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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM