前言
以前我一直是用的 支付宝 的 网页 即时到账 接口,代码是用的官方的 DEMO 改的
但是这样就会导致有很多没使用到的文件,而且即时到账接口并不适合我,我只需要扫码就行了,他那个需要在前端 iframe 一个提交页面,一堆乱七八糟的 div 层
一次偶然,让我看到了这个好东西:一个PHP文件搞定支付宝支付系列
这东西好啊,很全面,而且只需要一个文件即可,去掉了所有没有使用的函数
之前一直以为 开通即时到账 就只能用即时到账接口 ,当面付这类功能必须重新签约,后面折腾了一下,发现在能力里 签约 我之前创建的 接口信息即可,不需要二次提交签约认证材料
因此,我瞬间想把我的即时到账换成二维码了,二维码实在太简单方便了,于是开始了折腾之路
当面付功能实现所需代码汇总
当面付 (扫一扫)
代码:https://github.com/dedemao/alipay/blob/master/qrcode.php
使用如上代码,实现支付宝提交订单获取付款二维码
订单状态查询接口
代码:https://github.com/dedemao/alipay/blob/master/query.php
使用如上代码,做前端支付验证处理
异步通知
代码:https://github.com/dedemao/alipay/blob/master/notify.php
使用如上代码,做异步支付验证后的业务流程处理
遇到的坑
- 订单中文标题获取失败
- 当面付扫一扫功能二维码转换接口无法使用了,需要换一个接口,这个我倒是没浪费时间,一开始就懂,记录只是给一些童鞋提个醒
- query.php 订单查询接口文件中支付判断输出方式最好改成 json 输出方式,有利于前端 JS 判断操作
- 异步通知的坑有点多,前面的2个文件我倒是没花多少时间,主要是异步通知
一开始,我嫌他这个代码中一些莫名其妙的东西,所以改了很多,然后导致获取订单的标题一直失败,只要获取标题就无法执行数据裤操作和标题判断这些代码;
这个问题导致我折腾了非常久的时间,联系支付宝客服也是无法解决,后面发现问题原因:他代码中除 if 判断里面的代码可以改,其他代码还是不要随便修改的好,特别是文件头的 header() 函数,我当时觉得很多余给删除了....
$url = 'https://api.pwmqr.com/qrcode/create/?url='.$result['qr_code']; $img_src = "data:image/png;base64," . base64_encode(file_get_contents($url)); $qrcode = array ('code'=>'200','img'=>$img_src,'out_trade_no'=>$outTradeNo,'url'=>urlencode($result['qr_code'])); echo stripslashes(json_encode($qrcode)); /** *二维码输出方式最好用 json 输出 *code = 200 增加调用成功的一个判断值 方便前端js 验证 *img = base64 将图片转为base64方式输出 方便前端调用 *url = 订单返回的二维码地址 这个手机端唤醒支付宝需要用到 *out_trade_no = 商家订单号 这个用于后面的 query 查询接口调用 */
case 'TRADE_SUCCESS': $msg = array ('code'=>'200','msg'=>'支付成功'); echo stripslashes(json_encode($msg)); break;
一:如果调用 wordprss 配置文件,不能放于文件头,我也不知道什么原理,花了非常多的时间,太坑了,参考上图;
二:他这个异步代码验证存在问题,不能像官方的 DEMO ,验证签名+验证支付状态+不重复,他的代码只是验证了签名而已,注意上图下面两个红框处,我增加了一个支付成功状态的判断,还有一个订单是否重复的判断,必须增加,否则你的业务流程代码会被多次执行!
整个支付宝接口对接完成下来,加上我自己增加的一个接口基础信息配置文件 config.php 总共也才四个文件,方便简约了太多,我太爱了,实在对得起我花费的那么多时间!
秀下我的博客支付
点击支付,特效显示出一个提示状态+二维码,整个前端的支付 html 代码就 2个标签,一个div 一个img 是否好太多?之前的官方 demo 即时到账接口 会前端显示一堆标签
手机端的也做了调整
手机端不在像之前一样还需要保存二维码图片到相册,在支付宝扫码,太麻烦了
现在改成了不显示二维码,直接显示支付宝打开按钮,点击直接打开支付宝,然后自己付款就完事,帅太多了有么有~
本文作者为Mr.Wu,转载请注明,尊守博主劳动成果!
由于经常折腾代码,可能会导致个别文章内容显示错位或者别的 BUG 影响阅读; 如发现请在该文章下留言告知于我,thank you !