支付宝开发-条码支付
来源:互联网 发布:网络贷款理财平台 编辑:程序博客网 时间:2024/04/20 03:11
支付宝开发-关于条码支付
最近项目需要用到支付宝支付。大致流程就是收银台通过扫码设备扫描用户出示的付款码。进行付款。快捷方便。用php编写请求代码。c++(也就是收银台)那边调用我写的接口。进行付款。
首先还是看看开发文档吧 。传送门:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.u3cxFZ&treeId=193&articleId=105072&docType=1
具体流程图如下:
第一步:首先要去支付宝开发者平台创建应用
1.点击创建应用,下面两个是我已经创建过了应用
2.设置应用参数
这里面应用网关和回调地址我都设置服务器地址了。
这里的rsa密钥很关键,我是通过openssl工具生成,我建议大家也用这个生成。这个工具在官方文档上可以下载。
这里我给个配置rsa密钥连接,里面详细介绍了如果获得rsa密钥,
传送门:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.XZAA3d&treeId=200&articleId=105310&docType=1
如果还有其他问题,再联系我。
以上设置过了。就可以上线应用了,一般半天就好 了。
第二步,下载官方demo,阅读代码
下面拿我的php代码解释:
首先要在config.php文件中配置appid,商户密钥 支付宝密钥什么的。
<?php$config = array( //支付宝公钥 'alipay_public_key' => "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDI6d306Q8fIfCOaTXyiUeJHkrIvYISRcc73s3vF1ZT7XN8RNPwJxo8pWaJMmvyTn9N4HQ632qJBVHf8sxHi/fEsraprwCtzvzQETrNRwVxLO5jVmRGi60j8Ue1efIlzPXV9je9mkjzOmdssymZkh2QhUrCmZYI/FCEa3/cNMW0QIDAQAB", //商户私钥 'merchant_private_key' => "MIICXAIBAAKBgQDvLN/xcR8Nu+3/3K8IHaYK/LrFS3JPwM38oN95RaqAwSMJ6XH9vR2JB5w9MM+Et3gdZ/iVWROALQV5TSZIsVRA56u4jhnucuTC8YqNejySpxSI/N8rqffGqmfvtO+wDU3pcLrGiJN9FcPuUNVwYvdLuli0N6DAh2S5Vtvna2ovoQIDAQABAoGAT7vODFeB2rpD5YBUeYgoypDmUs+MFDpacVXQKkWnSbUZUTyZ29Un+36l/2A+Tig7ytHWdTN05M4dfQrTMHitdTC874vrbFHaDUT5vF7uPeA+wLDthM5lI1yrMT+L9sNYwDDTQYoRyBDhQ7miYd/Up3TGyinMQ0whBQkRuX1HAWECQQD92rQfgvY4qV0uFyPJAULObw8xk9G3dKYKl8TXKdi0q1F0Obu1GO6XiXqxHmXI1RsZ7rxqIPcbEBwsESrq8W6nAkEA8TJoiOU9EEGYNMra67GluoCII830qe+P9unIUKKdhIKuXxOfJt38+sqRThdFEarefrBIyTSkfE8p2CEKIQpAdwJBAL4S9tGtbo0oiyOKofnMXuhREfBOPTX/OqAt2W494AwPRtMes2S7AVMn1l0uZIoGvt8g+aUBf+ScoGuCgz8dfXsCQDVagjcuBljvOZ0L9mtGq7NatUK+T027+WuUAUSdBB0Iz0umyoDNgCV147iTeyrSUk9R7XfcljoNRONTQ6tVWjcCQC7ZddZzf12IgFFgHMF+5TStuGhLBVBVttvCBFGj1Jk9QPi7IOuzBrxSdmG530eMTnjBaJAAolGfLb6XrHrhdlI=", //编码格式 'charset' => "UTF-8", //支付宝网关 'gatewayUrl' => "https://openapi.alipay.com/gateway.do", //应用ID 'app_id' => "2016120904050389", //异步通知地址,只有扫码支付预下单可用 'notify_url' => "http://www.baidu.com", //最大查询重试次数 'MaxQueryRetry' => "10", //查询间隔 'QueryDuration' => "3");
支付宝公钥和商户私钥在你的应用信息里面都有,appid也在你的应用中。
支付接口请求接口:https://openapi.alipay.com/gateway.do
请求参数
- out_trade_no //订单编号
- auth_code //付款码
- subject //订单名称
这3个参数必填。其他参数可以在官方文档详细介绍。
if (!empty($_POST['out_trade_no'])&& trim($_POST['out_trade_no'])!="") { // (必填) 商户网站订单系统中唯一订单号,64个字符以内,只能包含字母、数字、下划线, // 需保证商户系统端不能重复,建议通过数据库sequence生成, $outTradeNo = "2016120904050389" . date('Ymdhis') . mt_rand(100, 1000);// $outTradeNo = $_POST['out_trade_no']; // (必填) 订单标题,粗略描述用户的支付目的。如“XX品牌XXX门店消费” $subject = $_POST['subject']; // (必填) 订单总金额,单位为元,不能超过1亿元 // 如果同时传入了【打折金额】,【不可打折金额】,【订单总金额】三者,则必须满足如下条件:【订单总金额】=【打折金额】+【不可打折金额】 $totalAmount = $_POST['total_amount']; // (必填) 付款条码,用户支付宝钱包手机app点击“付款”产生的付款条码 $authCode = $_POST['auth_code']; //28开头18位数字 // 继续创建并添加第一条商品信息,用户购买的产品为“xx牙刷”,单价为5.05元,购买了两件 $goods2 = new GoodsDetail(); $goods2->setGoodsId("good_id002"); $goods2->setGoodsName("XXX商品2");// 当面付2.0条码支付(带轮询逻辑) public function barPay($req) { $outTradeNo = $req->getOutTradeNo(); $bizContent = $req->getBizContent(); $appAuthToken = $req->getAppAuthToken(); $this->writeLog($bizContent); echo $bizContent; $request = new AlipayTradePayRequest(); $request->setBizContent ( $bizContent ); $response = $this->aopclientRequestExecute ( $request , NULL , $appAuthToken); //获取alipay_trade_pay_response对象数据,方便后续处理 $response = $response->alipay_trade_pay_response; $result = new AlipayF2FPayResult($response); if (!empty($response)&&("10000" == $response->code)) { // 支付交易明确成功 $result->setTradeStatus("SUCCESS"); } elseif (!empty($response)&&("10003" == $response->code)) { // 返回用户处理中,则轮询查询交易是否成功,如果查询超时,则调用撤销 $queryContentBuilder = new AlipayTradeQueryContentBuilder(); $queryContentBuilder->setOutTradeNo($outTradeNo); $queryContentBuilder->setAppAuthToken($appAuthToken); $loopQueryResponse = $this->loopQueryResult($queryContentBuilder); return $this->checkQueryAndCancel($outTradeNo, $appAuthToken, $result, $loopQueryResponse); } elseif ($this->tradeError($response)) { // 系统错误或者网络异常未响应,则查询一次交易,如果交易没有支付成功,则调用撤销 $queryContentBuilder = new AlipayTradeQueryContentBuilder(); $queryContentBuilder->setOutTradeNo($outTradeNo); $queryContentBuilder->setAppAuthToken($appAuthToken); $queryResponse = $this->query($queryContentBuilder); return $this->checkQueryAndCancel($outTradeNo, $appAuthToken, $result, $queryResponse); } else { // 其他情况表明该订单支付明确失败 $result->setTradeStatus("FAILED"); } return $result; }// 当面付2.0条码支付(带轮询逻辑) public function barPay($req) { $outTradeNo = $req->getOutTradeNo(); $bizContent = $req->getBizContent(); $appAuthToken = $req->getAppAuthToken(); $this->writeLog($bizContent); echo $bizContent; $request = new AlipayTradePayRequest(); $request->setBizContent ( $bizContent ); $response = $this->aopclientRequestExecute ( $request , NULL , $appAuthToken); //获取alipay_trade_pay_response对象数据,方便后续处理 $response = $response->alipay_trade_pay_response; $result = new AlipayF2FPayResult($response); if (!empty($response)&&("10000" == $response->code)) { // 支付交易明确成功 $result->setTradeStatus("SUCCESS"); } elseif (!empty($response)&&("10003" == $response->code)) { // 返回用户处理中,则轮询查询交易是否成功,如果查询超时,则调用撤销 $queryContentBuilder = new AlipayTradeQueryContentBuilder(); $queryContentBuilder->setOutTradeNo($outTradeNo); $queryContentBuilder->setAppAuthToken($appAuthToken); $loopQueryResponse = $this->loopQueryResult($queryContentBuilder); return $this->checkQueryAndCancel($outTradeNo, $appAuthToken, $result, $loopQueryResponse); } elseif ($this->tradeError($response)) { // 系统错误或者网络异常未响应,则查询一次交易,如果交易没有支付成功,则调用撤销 $queryContentBuilder = new AlipayTradeQueryContentBuilder(); $queryContentBuilder->setOutTradeNo($outTradeNo); $queryContentBuilder->setAppAuthToken($appAuthToken); $queryResponse = $this->query($queryContentBuilder); return $this->checkQueryAndCancel($outTradeNo, $appAuthToken, $result, $queryResponse); } else { // 其他情况表明该订单支付明确失败 $result->setTradeStatus("FAILED"); } return $result; }
barpay方法中调用aopclientRequestExecute方法请求支付接口,根据返回的参数来判断支付成功
如果返回10003的情况下,证明用户正在付款,它会查询10次订单状态,每次睡眠5秒。如果10次之后用户依旧没有付款的情况下,那它就调用撤销订单接口。避免用户继续支付。
我这边只介绍一些重点。如果想进行开发的话,建议一定要通读源码。理解其意。
以上!
- 支付宝开发-条码支付
- 支付宝当面付(条码支付)功能开发
- 支付宝支付开发—当面付条码支付和扫码支付
- 支付宝支付开发——当面付条码支付和扫码支付
- 支付宝支付开发——当面付条码支付和扫码支付
- 支付宝支付开发——当面付条码支付和扫码支付
- 支付宝支付-刷卡支付(条码支付)详解
- .NET C# 支付宝条码支付接口
- springboot--支付宝条码支付的实现
- 支付宝支付-电脑网站支付开发
- Windows 32bit + VS2013 支付宝条码支付
- 支付宝快捷支付开发
- ios支付宝支付开发
- 支付宝手机支付开发
- 支付宝支付开发教程
- Android 支付宝支付开发
- 支付宝移动支付开发
- iOS开发-支付宝支付
- history命令显示执行时间和执行者
- 【2016-12-12】交易日记
- Hadoop YARN架构设计要点
- sdut 1294—选票统计
- Linux下的压缩解压缩命令详解
- 支付宝开发-条码支付
- android自定义广播_有序广播
- ondraw方法没有被调用
- vxworks学习记录
- java常用方法
- Sql Server级联操作
- 创建FTP遇到的问题,不定期更新
- 按值传递还是按引用传递详细解说
- 字符相似度算法及应用