前幾天做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端進行支付,支付成功后執行異步回調,修改訂單狀態,當然還有一些細節操作就不說了,我是已經弄好了,回調這個地方是個坑,大家做的時候一定要仔細認真,耐心才行。現在流程已經走完了,希望能對做這個功能的童鞋有所幫助。
本文屬原創內容,為了尊重他人勞動,轉載請注明本文地址: