ThinkPHP5.0 实现 app支付宝支付功能

Posted 洛卡卡了

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThinkPHP5.0 实现 app支付宝支付功能相关的知识,希望对你有一定的参考价值。

前几天做APP开发,用到了支付宝接口,简单写一下我做的APP接入支付宝支付的过程,希望对做APP支付宝支付的童鞋有帮助,

不懂的可以先去支付平台看一下支付宝支付的文档,我是下的demo看的,这个是用tp5.0做的,先上图:

 

至于支付接口的接口包文件自己下吧,这个我就不提供地址链接了,这个支付接口我用的是异步回调,好像现在版本的支付宝同步回调只能用来跳转页面用了,哎,不说了,看代码吧。

做这个支付宝支付我总共用到了三个控制器:

1:支付宝支付控制器。

2:支付宝支付配置参数控制器。

3:支付宝回调地址控制器。

好了,首先创建个支付宝支付的控制器,是由上个页面选择好支付方式之后确认支付后需要经过的控制器(这里选择的是支付宝支付),代码 如下:

 1 <?php
 2 namespace app\\mobile\\controller;
 3 use app\\mobile\\model\\Goods;
 4 use app\\mobile\\model\\OrderGoods;
 5 use think\\Controller;
 6 
 7 class Pay extends Controller
 8 {
 9     public function pay_order()
10     {
11         $res = new OrderGoods();
12         //获取订单号
13         $where[\'id\'] = input(\'post.order_sn\');
14         $reoderSn = input(\'post.order_sn\');
15         //查询订单信息
16         $order_info = $res->where($where)->find();
17         //获取支付方式
18         $pay_type = input(\'post.pay_type\');//微信支付 或者支付宝支付
19         //获取支付金额
20         $money = input(\'post.totle_sum\');
21         //判断支付方式
22         switch ($pay_type) {
23             case \'ali\';//如果支付方式为支付宝支付
24 
25                 //更新支付方式为支付宝
26                 $type[\'pay_type\'] = \'ali\';
27                 $res->where($where)->update($type);
28 
29                 //实例化alipay类
30                 $ali = new Alipay(); 
31 
32                 //异步回调地址
33                 $url = \'XXXXXXXXXXXXXXXXXX/Callback/aliPayBack\';
34              
35                 $array = $ali->alipay(\'商品名称\', $money,$reoderSn,  $url);
36                 
37                 if ($array) {
38                     return $array;
39                 } else {
40                     echo json_encode(array(\'status\' => 0, \'msg\' => \'对不起请检查相关参数!@\'));
41                 }
42                 break;
43             case \'wx\';
44                 
45                 break;
46         }
47     }
48 }

然后又创建了一个Alipay控制器,写支付宝配置参数,代码如下:

 1 class AliPay extends Controller
 2 {
 3 
 4     protected $appId = \'\';//支付宝AppId
 5     protected $rsaPrivateKey = \'\';//支付宝私钥
 6     protected $aliPayRsaPublicKey = \'\';//支付宝公钥
 7     private $seller = \'\';
 8 
 9     /*
10      * 支付宝支付
11      */
12     public function aliPay($body, $total_amount, $product_code, $notify_url)
13     {
14         /**
15          * 调用支付宝接口。
16          */
17         /*import(\'.Alipay.aop.AopClient\', \'\', \'.php\');
18         import(\'.Alipay.aop.request.AlipayTradeAppPayRequest\', \'\', \'.php\');*/
19         Loader::import(\'Alipay\\aop\\AopClient\', EXTEND_PATH);
20         Loader::import(\'Alipay\\aop\\request\\AlipayTradeAppPayRequest\', EXTEND_PATH);
21 
22         $aop = new \\AopClient();
23 
24         $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
25         $aop->appId = $this->appId;
26         $aop->rsaPrivateKey = $this->rsaPrivateKey;
27         $aop->format = "json";
28         $aop->charset = "UTF-8";
29         $aop->signType = "RSA2";
30         $aop->alipayrsaPublicKey = $this->aliPayRsaPublicKey;
31         $request = new \\AlipayTradeAppPayRequest();
32         $arr[\'body\'] = $body;
33         $arr[\'subject\'] = $body;
34         $arr[\'out_trade_no\'] = $product_code;
35         $arr[\'timeout_express\'] = \'30m\';
36         $arr[\'total_amount\'] = floatval($total_amount);
37         $arr[\'product_code\'] = \'QUICK_MSECURITY_PAY\';
38         
39         $json = json_encode($arr);
40         $request->setNotifyUrl($notify_url);
41         $request->setBizContent($json);
42 
43         $response = $aop->sdkExecute($request);
44         return $response;
45 
46     }
47 
48 
49     function createLinkstring($para)
50     {
51         $arg = "";
52         while (list ($key, $val) = each($para)) {
53             $arg .= $key . "=" . $val . "&";
54         }
55         //去掉最后一个&字符
56         $arg = substr($arg, 0, count($arg) - 2);
57 
58         //如果存在转义字符,那么去掉转义
59         if (get_magic_quotes_gpc()) {
60             $arg = stripslashes($arg);
61         }
62 
63         return $arg;
64     }
65 
66 
67     function argSort($para)
68     {
69         ksort($para);
70         reset($para);
71         return $para;
72     }
73 }

 

Alipay支付demo我放在extend目录下了,用这种方法来实现支付宝支付的话,上面的那个支付宝配置参数控制器的内容除了支付宝Appid,支付宝公钥,私钥,收款人账号,其他的照搬下来就行了,现在已经写了两个控制器了,接下来还有一个异步回调地址。这个异步回调有点坑了,支付成功有时候就是不回调,先上代码吧

 1 <?php
 2 namespace app\\mobile\\controller;
 3 use app\\mobile\\model\\OrderGoods;
 4 use app\\mobile\\model\\IntegralRecord;
 5 use app\\admin\\model\\SystemSettings;
 6 use app\\mobile\\model\\Members;
 7 use think\\Controller;
 8 use think\\Request;
 9 use think\\Db;
10 
11 class Callback extends Controller
12 {
13     /*
14      * 支付宝支付回调修改订单状态
15      */
16     public function aliPayBack()
17     {
18 
19         if ($_POST[\'trade_status\'] == \'TRADE_SUCCESS\') {//如果支付成功
20             //===============修改订单状态===========================//
21             $order = new OrderGoods();//实例化
22             $orderSn = $_POST[\'out_trade_no\'];//获取订单号
23                 $where[\'order_sn\'] = $orderSn;
24                 $data1[\'type\'] = 2;
25             $order->where($where)->update($data1);//修改订单状态
26             echo \'success\';
27             exit;
28         }
29     }
30 }

OK现在代码写完了。执行支付宝支付订单的时候先进入支付宝Pay控制器接收POST传递的三个参数,订单号,金额,支付方式。接收到之后写商品名称,商品描述,回调地址等 然后实例化Alipay类调用这个类里面的aliPay方法进行支付,调用结果返回一个签名,把这个签名反馈给app端进行支付,支付成功后执行异步回调,修改订单状态,当然还有一些细节操作就不说了,我是已经弄好了,回调这个地方是个坑,大家做的时候一定要仔细认真,耐心才行。现在流程已经走完了,希望能对做这个功能的童鞋有所帮助。

 

本文属原创内容,为了尊重他人劳动,转载请注明本文地址:

http://www.cnblogs.com/luokakale/p/7612365.html

以上是关于ThinkPHP5.0 实现 app支付宝支付功能的主要内容,如果未能解决你的问题,请参考以下文章

php实现支付宝APP支付功能与源码

支付宝剪贴板开启有啥用

支付宝APP支付(基于Java实现支付宝APP支付)

APP能实现H5支付吗

iOS Scheme以及微信、支付宝等第三方功能的实现

支付宝APP支付(基于Java实现支付宝APP支付)