前几天弄完微信的条形码支付,很多条友私信说想知道支付宝的原理,那么今天小艾带着一上午搞定的成果出现啦废话不多说直接上效果!!!

  1. 商家通过扫描线下买家支付宝钱包中的条码、二维码等方式完成支付(本文讲讲这个);

  2. 线下买家通过使用支付宝钱包扫一扫,扫描商家的二维码等方式完成支付。

开发之前需要申请的开发参数详见支付宝开发平台进行申请

开发步骤:

步骤一、 下载官方demo 地址:https://opendocs.alipay.com/open/54/104506;放置项目框架(tp5)的vendor文件中

步骤二、配置自己开发申请的必要参数:

<?php/*** 扫码支付* 提醒:提交支付请求后微信会同步返回支付结果(没有异步回调通知)。当返回结果为“系统错误”时,商户系统等待5秒后调用【查询订单API】,查询支付实际交易结果;当返回结果为“USERPAYING”时,商户系统可设置间隔时间(建议10秒)重新查询支付结果,直到支付成功或超时(建议30秒);*/
namespace app\api\controller;
use think\Controller;
use think\Db;
use think\Input;
use think\facade\Request;
use app\api\controller\Common;header("Access-Control-Allow-Origin:*");
header("Content-type: text/html; charset=utf-8");
require_once $_SERVER['DOCUMENT_ROOT'].'/vendor/Alipaydangmianfu_demo/f2fpay/model/builder/AlipayTradePayContentBuilder.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/vendor/Alipaydangmianfu_demo/f2fpay/service/AlipayTradeService.php';
/*** 支付宝当面付* @package app\api\controller*/
class Alipay{/*** Notes:* User: 小艾* Time:下午 1:51*$authCode   用户支付码*$totalAmount 支付金额*$outTradeNo 订单号* DATE:2020/12/10 0010*/public function alipay($authCode,$totalAmount,$outTradeNo){$common = new Common();$config = array (//签名方式'sign_type' => "RSA2",//支付宝公钥    'alipay_public_key'=>'',//商户私钥'merchant_private_key' => "",//编码格式'charset' => "UTF-8",//支付宝网关'gatewayUrl' => "https://openapi.alipay.com/gateway.do",//应用ID'app_id' => "2016111102724113",//异步通知地址,只有扫码支付预下单可用'notify_url' => "",//最大查询重试次数'MaxQueryRetry' => "10",//查询间隔'QueryDuration' => "3");// (必填) 商户网站订单系统中唯一订单号,64个字符以内,只能包含字母、数字、下划线,// 需保证商户系统端不能重复,建议通过数据库sequence生成,
//        $outTradeNo = "Dsx" . date('Ymdhis') . mt_rand(100, 1000);$subject = "第三巷条形码支付";
//        $totalAmount = $_POST['payAmount'];    // (必填) 订单总金额,单位为元,不能超过1亿元// (必填) 付款条码,用户支付宝钱包手机app点击“付款”产生的付款条码
//        $authCode = $_POST['auth_code']; //28开头18位数字// 支付超时,线下扫码交易定义为5分钟$timeExpress = "5m";// 创建请求builder,设置请求参数$barPayRequestBuilder = new \AlipayTradePayContentBuilder();$barPayRequestBuilder->setOutTradeNo($outTradeNo);$barPayRequestBuilder->setTotalAmount($totalAmount);$barPayRequestBuilder->setAuthCode($authCode);$barPayRequestBuilder->setTimeExpress($timeExpress);$barPayRequestBuilder->setSubject($subject);// 调用barPay方法获取当面付应答$barPay = new \AlipayTradeService($config);$barPayResult = $barPay->barPay($barPayRequestBuilder);switch ($barPayResult->getTradeStatus()) {case "SUCCESS":
//                echo "支付宝支付成功:" . "<br>--------------------------<br>";$data = $barPayResult->getResponse();$result = $common->returnway(2000,"支付宝支付成功!",$data);return json_encode($result);break;case "FAILED":
//                echo "支付宝支付失败!!!" . "<br>--------------------------<br>";if (!empty($barPayResult->getResponse())) {$data = $barPayResult->getResponse();$result = $common->returnway(2002,"支付宝支付失败!",$data);return json_encode($result);}break;case "UNKNOWN":
//                echo "系统异常,订单状态未知!!!" . "<br>--------------------------<br>";if (!empty($barPayResult->getResponse())) {$result = $common->returnway(4000,"系统异常,订单状态未知!",$barPayResult->getResponse());return json_encode($result);}break;default:echo "不支持的交易状态,交易返回异常!!!";break;}return;}}

步骤三、接收前端参数 调取下列方法即可

/*** Notes:门店扫码支付* User: 小艾* Time:下午 4:14* DATE:2020/12/9 0009*/public function Scantopay(){header("Access-Control-Allow-Origin:*");$common = new Common();if (request()->isPost()){$authCode = input('authCode','');//用户付款码$payAmount = input('payAmount','');//订单支付金额$outTradeNo = input('outTradeNo','');//订单号$out_trade_no$payment_type = input('payment_type',1);//支付方式  1-微信  2-支付宝  3-现金支付if (!empty($authCode) && !empty($payAmount) && !empty($outTradeNo)){if($payment_type == 1){//调取微信扫码支付$weixinpay = new Scantopay();$data = $weixinpay->weixinpay($authCode,$payAmount,$outTradeNo);if($data['return_code']=='SUCCESS'){//订单支付成功扣除门店库存$result = $common->returnway(2000,'支付成功!',$data);return json_encode($result);}else{$result = $common->returnway(4001,'支付支付!',$data);return json_encode($result);}}elseif ($payment_type == 2){//调取支付宝扫码支付$alipay = new Alipay();$data = $alipay->alipay($authCode,$payAmount,$outTradeNo);print_r($data);die;
//                    if($data['return_code']=='SUCCESS'){//                        $result = $common->returnway(2000,'支付成功!',$data);
//                        return json_encode($result);
//                    }}}else{$result = $common->returnway(4001,'请求参数不能为空!',[]);return json_encode($result);}}else{$result = $common->returnway(4000,'请求方式有误!',[]);return json_encode($result);}}

和微信的原理效果一样,所以我封装到一起了,阅读到这里的好友们有没有get到程序的乐趣?

如果你有更好的封装效果欢迎留言!!! 注:做支付、办理个人POS(利率低至0.38,银联代理不跳码)扫码备注来意加好友!!!

支付宝扫码枪收银的实现原理你了解吗?相关推荐

  1. 超市自助收银系统的原理和应用优势,你了解多少呢?

    随着商超.便利店等零售门店向新零售转型,在门店的人力成本的投入也逐渐降低成本消耗,减少人工收银员,而是引进自助收银设备,辅助人工收银进行自助结算.那么,超市自助收银系统的原理和应用优势,你了解多少呢? ...

  2. 扫码枪收银有手续费吗_生鲜店的收银系统应该如何选择?

    2020年可以说是生鲜水果店大力兴起的一年,几乎每条街道不到两公里就能看到一个,每个社区都有几个很不错的生鲜水果店.那么生鲜水果店的收银系统具体都有哪些功能需求,而不同规模的生鲜店又需要配置什么样的收 ...

  3. 支付宝当面付扫码支付支付后不回调_科普帖 | 青蛙?蜻蜓?自助收银?刷脸支付?一文为你解惑...

    思迅支付金融 青蛙是什么? 蜻蜓又是什么? 要如何购买正确的设备? 自助刷脸大屏又是什么鬼? 刷脸支付还要区分设备和支付方式? 我采购的硬件设备能开通刷脸支付吗? 刷脸支付有没有新的优惠政策呢? 不知 ...

  4. 微信支付宝支付代理 微信扫码支付收银系统

    随着城市的多元化,中西结合,现代与古代文化的交融,人们的衣食住行也在发生着翻天覆地的变化,在10年前,出门消费都是现金或者刷卡.而现在你去购物都有会考虑一个问题:能不能用支付宝,微信支付?扫码支付已经 ...

  5. zbar扫描无法近距离扫码_生意好时最怕收银出故障,这几个扫码枪的常见问题你一定要知道...

    文|杭州丰收收 不怕生意不够好,就怕生意好时收银出故障. 这几天丰收收经常接到询问,说自己商铺所在的位置信号非常不好,很多客户等了很久没法付款,索性就不买了.看着上门的生意就这么走了,心里很不是滋味. ...

  6. web版收银系统,支持支付宝,微信扫描枪支付,数字输入

    Web版收银系统 这是一款web版的系统,可以在PC,平板,手机等多平台使用,支持微信,支付宝扫码支付,对接小程序订单,界面简洁明了,而且支持键盘输入. 在线测试地址:https://admin.zj ...

  7. (WPF)连锁超市收银系统总结

    前言 好久没写博客了,如今做完了一个收银系统,静下心来做一个简单的总结.虽然收银系统各种各样,到处都有,开源的也不少,但是自己亲手做了一遍以后也收获颇丰.相比其他收银软件,功能上没什么创新,主要在于客 ...

  8. 收银软件如何实现收银一体化

    收银管理软件从引流,到客户留存,再到储值消费,实现会员管理.会员消费完整的流程化管理,解决实体店营销难.客流量低.软件迭代慢等诸多问题,帮助实体行业轻松完成经营工作. 另外,收银软件支持多端使用,涵盖 ...

  9. 刷脸支付的数字化助力商户无人化收银

    目前刷脸支付商业化仍处于初期阶段.新事物的成长尚需时间,但相比二维码.NFC等移动支付手段,刷脸支付省去了手机这个介质,进一步给消费者提供了便捷. 支付方式变迁带来生活方式改变,足不出户就能缴水电费, ...

  10. 美容院如何进行收银管理工作?

    收银管理是每个会员管理系统的基础,保障财务的安全性,准确性是一个店铺的基础工作.那么云上铺美容会员管理系统如何进行收银管理?今天就给大家来简单介绍一下. 开单收银扫码支付,自动记账不必算账 一:开单收 ...

最新文章

  1. SaltStack自动化运维(三)——Grains与Pillar组件
  2. Camel In Action 读书笔记 (1)
  3. 11 个新项目入选 CNCF Sandbox | 云原生生态周报 Vol. 56
  4. linux fedora设置开机自动挂载win磁盘
  5. Android Studio使用心得
  6. 拦截器原理多个拦截器执行顺序
  7. Linux系统基本概念
  8. 列车时刻管理c语言程序设计,列车时刻表信息管理系统实践报告C语言源代码
  9. [家里蹲大学数学杂志]第275期华中师范大学2011年数学专业复试试题及部分参考解答...
  10. LINUX中获得cpu名称
  11. wps mysql ubuntu_Ubuntu 安装WPS
  12. MySQL查询数据---单表查询
  13. 原生JS实现图片爆炸特效
  14. java编程题代做,代做COMP 2406作业、代写Java语言作业、代做programming作业、代写Java程序实验作业...
  15. 人工智能—— 产生式表示法
  16. Java101___一个牛人给JAVA初学者的建议
  17. Python 图像文本识别 EasyOCR
  18. unity 使用超椭圆方程对图片进行裁切制作圆角矩形
  19. JEECMS 自定义标签
  20. 量子纠缠的超距作用,超光速是假象

热门文章

  1. android 信鸽推送点击消息跳转问题,信鸽推送 Android 跳转Activity
  2. DTcmsV4.0分析学习——(2)系统框架
  3. 基于C++的简易的国际象棋双人对战程序设计
  4. 微师电脑客户端 附使用教程
  5. 迷你KMS mini-KMS_Activator_v1.3_Office2010_VL_ENG使用
  6. esp8266 蓝牙耳机_基于Qualcomm QCC3001/TWS迷你型入耳式蓝牙耳机方案
  7. 管理会计习题集及答案 5-7章
  8. oracle数据库怎么查实例名,查询oracle数据库实例的名字
  9. K-均值聚类算法通俗讲解
  10. overleaf官网登录注册报错:Sorry, we could not verify that you are not a robot.