ThinkPHP5.0 實現 app支付寶支付功能
阿新 • • 發佈:2018-08-01
napi security rsa 賬號 sdk n) success format 修改
https://mp.weixin.qq.com/s/EbfOmEGN93QAnrZOKVP0Vg
先來個效果圖
做這個支付寶支付我總共用到了三個控制器:
1:支付寶支付控制器。
2:支付寶支付配置參數控制器。
3:支付寶回調地址控制器。
首先創建個支付寶支付的控制器,是由上個頁面選擇好支付方式之後確認支付後需要經過的控制器(這裏選擇的是支付寶支付),代碼 如下:
<?php namespace app\mobile\controller; use app\mobile\model\Goods; use app\mobile\model\OrderGoods; use think\Controller; class Pay extends Controller { public function pay_order() { $res = new OrderGoods(); //獲取訂單號 $where[‘id‘] = input(‘post.order_sn‘); $reoderSn = input(‘post.order_sn‘); //查詢訂單信息 $order_info = $res->where($where)->find(); //獲取支付方式 $pay_type = input(‘post.pay_type‘);//微信支付 或者支付寶支付 //獲取支付金額 $money = input(‘post.totle_sum‘); //判斷支付方式 switch ($pay_type) { case ‘ali‘;//如果支付方式為支付寶支付 //更新支付方式為支付寶 $type[‘pay_type‘] = ‘ali‘; $res->where($where)->update($type); //實例化alipay類 $ali = new Alipay(); //異步回調地址 $url = ‘XXXXXXXXXXXXXXXXXX/Callback/aliPayBack‘; $array = $ali->alipay(‘商品名稱‘, $money,$reoderSn, $url); if ($array) { return $array; } else { echo json_encode(array(‘status‘ => 0, ‘msg‘ => ‘對不起請檢查相關參數!@‘)); } break; case ‘wx‘; break; } } }
然後又創建了一個Alipay控制器,寫支付寶配置參數,代碼如下:
class AliPay extends Controller { protected $appId = ‘‘;//支付寶AppId protected $rsaPrivateKey = ‘‘;//支付寶私鑰 protected $aliPayRsaPublicKey = ‘‘;//支付寶公鑰 private $seller = ‘‘; /* * 支付寶支付 */ public function aliPay($body, $total_amount, $product_code, $notify_url) { /** * 調用支付寶接口。 */ /*import(‘.Alipay.aop.AopClient‘, ‘‘, ‘.php‘); import(‘.Alipay.aop.request.AlipayTradeAppPayRequest‘, ‘‘, ‘.php‘);*/ Loader::import(‘Alipay\aop\AopClient‘, EXTEND_PATH); Loader::import(‘Alipay\aop\request\AlipayTradeAppPayRequest‘, EXTEND_PATH); $aop = new \AopClient(); $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do"; $aop->appId = $this->appId; $aop->rsaPrivateKey = $this->rsaPrivateKey; $aop->format = "json"; $aop->charset = "UTF-8"; $aop->signType = "RSA2"; $aop->alipayrsaPublicKey = $this->aliPayRsaPublicKey; $request = new \AlipayTradeAppPayRequest(); $arr[‘body‘] = $body; $arr[‘subject‘] = $body; $arr[‘out_trade_no‘] = $product_code; $arr[‘timeout_express‘] = ‘30m‘; $arr[‘total_amount‘] = floatval($total_amount); $arr[‘product_code‘] = ‘QUICK_MSECURITY_PAY‘; $json = json_encode($arr); $request->setNotifyUrl($notify_url); $request->setBizContent($json); $response = $aop->sdkExecute($request); return $response; } function createLinkstring($para) { $arg = ""; while (list ($key, $val) = each($para)) { $arg .= $key . "=" . $val . "&"; } //去掉最後一個&字符 $arg = substr($arg, 0, count($arg) - 2); //如果存在轉義字符,那麽去掉轉義 if (get_magic_quotes_gpc()) { $arg = stripslashes($arg); } return $arg; } function argSort($para) { ksort($para); reset($para); return $para; } }
Alipay支付demo我放在extend目錄下了,用這種方法來實現支付寶支付的話,上面的那個支付寶配置參數控制器的內容除了支付寶Appid,支付寶公鑰,私鑰,收款人賬號,其他的照搬下來就行了,現在已經寫了兩個控制器了,接下來還有一個異步回調地址。
<?php namespace app\mobile\controller; use app\mobile\model\OrderGoods; use app\mobile\model\IntegralRecord; use app\admin\model\SystemSettings; use app\mobile\model\Members; use think\Controller; use think\Request; use think\Db; class Callback extends Controller { /* * 支付寶支付回調修改訂單狀態 */ public function aliPayBack() { if ($_POST[‘trade_status‘] == ‘TRADE_SUCCESS‘) {//如果支付成功 //===============修改訂單狀態===========================// $order = new OrderGoods();//實例化 $orderSn = $_POST[‘out_trade_no‘];//獲取訂單號 $where[‘order_sn‘] = $orderSn; $data1[‘type‘] = 2; $order->where($where)->update($data1);//修改訂單狀態 echo ‘success‘; exit; } } }
OK現在代碼寫完了。執行支付寶支付訂單的時候先進入支付寶Pay控制器接收POST傳遞的三個參數,訂單號,金額,支付方式。接收到之後寫商品名稱,商品描述,回調地址等 然後實例化Alipay類調用這個類裏面的aliPay方法進行支付,調用結果返回一個簽名,把這個簽名反饋給app端進行支付,支付成功後執行異步回調,修改訂單狀態
ThinkPHP5.0 實現 app支付寶支付功能