支付宝 接口 当面付 一个文件实现

Mr.Wu 408 0

前言

以前我一直是用的 支付宝 的 网页 即时到账 接口,代码是用的官方的 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
使用如上代码,做异步支付验证后的业务流程处理

遇到的坑

  1. 订单中文标题获取失败
  2. 一开始,我嫌他这个代码中一些莫名其妙的东西,所以改了很多,然后导致获取订单的标题一直失败,只要获取标题就无法执行数据裤操作和标题判断这些代码;
    这个问题导致我折腾了非常久的时间,联系支付宝客服也是无法解决,后面发现问题原因:他代码中除 if 判断里面的代码可以改,其他代码还是不要随便修改的好,特别是文件头的 header() 函数,我当时觉得很多余给删除了....

  3. 当面付扫一扫功能二维码转换接口无法使用了,需要换一个接口,这个我倒是没浪费时间,一开始就懂,记录只是给一些童鞋提个醒
  4.     $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 查询接口调用
    */
  5. query.php 订单查询接口文件中支付判断输出方式最好改成 json 输出方式,有利于前端 JS 判断操作
  6.         case 'TRADE_SUCCESS':
                $msg = array ('code'=>'200','msg'=>'支付成功');
                echo stripslashes(json_encode($msg));
                break;
  7. 异步通知的坑有点多,前面的2个文件我倒是没花多少时间,主要是异步通知

  8. 一:如果调用 wordprss 配置文件,不能放于文件头,我也不知道什么原理,花了非常多的时间,太坑了,参考上图;
    二:他这个异步代码验证存在问题,不能像官方的 DEMO ,验证签名+验证支付状态+不重复,他的代码只是验证了签名而已,注意上图下面两个红框处,我增加了一个支付成功状态的判断,还有一个订单是否重复的判断,必须增加,否则你的业务流程代码会被多次执行!

整个支付宝接口对接完成下来,加上我自己增加的一个接口基础信息配置文件 config.php 总共也才四个文件,方便简约了太多,我太爱了,实在对得起我花费的那么多时间!

秀下我的博客支付


点击支付,特效显示出一个提示状态+二维码,整个前端的支付 html 代码就 2个标签,一个div 一个img 是否好太多?之前的官方 demo 即时到账接口 会前端显示一堆标签

手机端的也做了调整

手机端不在像之前一样还需要保存二维码图片到相册,在支付宝扫码,太麻烦了

现在改成了不显示二维码,直接显示支付宝打开按钮,点击直接打开支付宝,然后自己付款就完事,帅太多了有么有~

打赏
发表评论 取消回复
表情 图片 链接 代码

分享
微信
微博
QQ