PHP支付寶APP支付介面
阿新 • • 發佈:2018-12-18
1-1:首先下載支付寶官方SDK,我的是PHP版的,起名“alipay”
1-2:配置檔案 config.php
// 支付寶 'ALIPAY_CONFIG' =>[ 'app_id' =>'12345678', //app_id // 支付寶私鑰 'rsaPrivateKey' =>'ZS1FY8LDXd', // 支付寶公鑰 'alipayrsaPublicKey'=>'p/JhMWNiQIDAQAB', 'notify_url' =>'http://www.abc.com/public/api/portal/Order/notify_url.html',//回撥地址(支付寶支付成功後回撥修改訂單狀態的地址) 'payment_type' =>1,//(固定值) 'charset' => 'utf-8',//編碼 'sign_type' => 'RSA2',//簽名方式 'version' =>"1.0",//固定值 'url' => 'https://openapi.alipay.com/gateway.do',//固定值 'method' => 'alipay.trade.app.pay', //固定值 ],
注:其中,支付寶公鑰為這個
1-3:控制器
// 1-2 支付寶生成簽名 public function ZfbSing() { if ($this->request->isGet()) { // 引入支付寶第三方sdk類庫 import('alipay.aop.AopClient', EXTEND_PATH); // 呼叫支付寶配置檔案 $API = config('ALIPAY_CONFIG'); //構造業務請求引數的集合(訂單資訊) $content = array(); $content['subject'] = '商品標題'; // 商品標題 $content['body'] = '商品描述'; // 商品描述 非必須 $content['out_trade_no'] = '訂單號'; // 訂單號 $content['timeout_express'] = "15m"; // 允許最晚的支付時間 非必須 $content['total_amount'] = '15.00'; // 要求必須為浮點型,訂單金額 $content['product_code'] = "QUICK_MSECURITY_PAY"; //銷售產品碼,固定值 $con = json_encode($content); //$content是biz_content的值,將之轉化成json字串 //公共引數 $Client = new \AopClient(); //例項化支付寶sdk裡面的AopClient類,下單時需要的操作,都在這個類裡面 $param = array(); $param['app_id'] = $API['app_id']; //支付寶分配給開發者的應用ID $param['method'] = $API['method']; //介面名稱 $param['charset'] = $API['charset']; //請求使用的編碼格式 $param['sign_type'] = $API['sign_type']; //商戶生成簽名字串所使用的簽名演算法型別 $param['timestamp'] = date("Y-m-d H:i:s"); //傳送請求的時間 $param['version'] = $API['version']; //呼叫的介面版本,固定為:1.0 $param['notify_url'] = $API['notify_url']; //支付寶伺服器主動通知地址 $param['biz_content'] = $con; //業務請求引數的集合,長度不限,json格式 $paramStr = $Client->getSignContent($param);//組裝請求籤名引數 到此步目前沒有問題 $sign = $Client->alonersaSign($paramStr, $API['rsaPrivateKey'], 'RSA2'); //生成簽名 $param['sign'] = $sign; $str = $Client->getSignContentUrlencode($param); //最終請求引數 echo json_encode(['code' => 100, 'msg' => '成功', 'data' => ['sing' => $str]], JSON_UNESCAPED_UNICODE); exit; } else { echo json_encode(['code' => 101, 'msg' => '請求型別錯誤'], JSON_UNESCAPED_UNICODE); exit; } }
1-4:支付寶支付成功回撥
// 支付寶支付非同步回撥 public function notify_url() { import('alipay.aop.AopClient', EXTEND_PATH); // 引入支付寶第三方類庫 $API = config('ALIPAY_CONFIG'); // 呼叫支付寶配置檔案 $Client = new \AopClient(); // 例項化類 $Client->alipayrsaPublicKey = $API['alipayrsaPublicKey']; $parm = $_POST; // 驗證簽名 $flag = $Client->rsaCheckV1($parm,NULL,"RSA2"); if($flag){ if ($parm['trade_status'] == 'TRADE_SUCCESS' || $parm['trade_status'] == 'TRADE_FINISHED') { // 此處為自己業務邏緝處理 $OrderModel = new ServerOrderModel(); $condition['order_num'] = $parm['out_trade_no']; // 交易訂單號 $data['pay_time'] = $parm['gmt_payment']; // 付款時間 $data['pay_type'] = 1; // 支付型別 1:支付寶 2:微信 $data['is_pay'] = 1; // 是否支付 $OrderModel->updateOrder($condition, $data); echo 'success'; } } }
1-5:備註,回撥方法中,$_POST陣列如下:
{
"gmt_create":"2018-10-29 14:06:27",
"charset":"utf-8",
"seller_email":"[email protected]",
"subject":"索尼相機系列",
"sign":"NS+bPlvoAHfNIcf97mUmtkBcTaTB\/vMTyVp9R4QM+DM7wlr",
"body":"所選服務:索尼相機系列 x 1",
"buyer_id":"2088402609538780",
"invoice_amount":"0.01",
"notify_id":"2018102900222140628038781018476292",
"fund_bill_list":'[{"amount":"0.01","fundChannel":"ALIPAYACCOUNT"}]',
"notify_type":"trade_status_sync",
"trade_status":"TRADE_SUCCESS",
"receipt_amount":"0.01",
"app_id":"12345678",
"buyer_pay_amount":"0.01",
"sign_type":"RSA2",
"seller_id":"2088031469395781",
"gmt_payment":"2018-10-29 14:06:27",
"notify_time":"2018-10-29 14:06:28",
"version":"1.0",
"out_trade_no":"20181029140609758396",
"total_amount":"0.01",
"trade_no":"2018102922001438781005066681",
"auth_app_id":"2018030702332021",
"buyer_logon_id":"894***@qq.com",
"point_amount":"0.00"
}