用PHP SDK做支付寶APP支付(下單及驗籤)
阿新 • • 發佈:2018-12-26
一、如下為支付寶APP支付PHP SDK DEMO地址。
二、如下為支付寶APP支
說明:此處用CI框架,若正式上線需將引數$aop->appId、$aop->rsaPrivateKey、$aop->alipayrsaPublicKey都改成正式的。
示例程式碼中的APP ID即$aop->appId從沙箱應用獲得。
用官網提供的公私鑰生成工具一次生成一對,一個應用私鑰($aop->rsaPrivateKey)和一個應用公鑰。將應用公鑰上傳至沙箱環境(上線就上傳至正式環境)獲得支付寶公鑰(即$aop->alipayrsaPublickey)。
官網demo中將支付寶返回的預支付資訊用htmlspecialchars()處理。本人使用時用htmlspecialchars處理後安卓前端無法調起支付介面。故示例中不用htmlspecialchars()。
class AlipayController extends CI_Controller
{
function pay()
{
require_once('/www/my/app/third_party/alipay/aop/AopClient.php');
require_once('/www/my/app/third_party/alipay/aop/request/AlipayTradeAppPayRequest.php');
$aop = new \AopClient();
//**沙箱測試支付寶開始
$aop->gatewayUrl = "https://openapi.alipay.com/gateway.do" ;
//實際上線app id需真實的
$aop->appId = "2016080300158242";
$aop->rsaPrivateKey = '填寫工具生成的商戶應用私鑰';
$aop->format = "json";
$aop->charset = "UTF-8";
$aop->signType = "RSA";
$aop->alipayrsaPublicKey = '填寫從支付寶開放後臺檢視的支付寶公鑰';
$bizcontent = json_encode([
'body' =>'商品資訊',
'subject'=>'衣服',
'out_trade_no'=>'123456',//此訂單號為商戶唯一訂單號
'total_amount'=> '9.88',//保留兩位小數
'product_code'=>'QUICK_MSECURITY_PAY'
]);
//**沙箱測試支付寶結束
//例項化具體API對應的request類,類名稱和介面名稱對應,當前呼叫介面名稱:alipay.trade.app.pay
$request = new \AlipayTradeAppPayRequest();
//支付寶回撥
$request->setNotifyUrl("https://demo.com/pay/alinotify");
$request->setBizContent($bizcontent);
//這裡和普通的介面呼叫不同,使用的是sdkExecute
$response = $aop->sdkExecute($request);
echo $response;
}
三、驗籤
class AlipayNotifyController extends CI_Controller
{
function notify()
{
require_once('/www/my/app/third_party/alipay/aop/AopClient.php');
$aop = new AopClient;
$aop->alipayrsaPublicKey = '請填寫支付寶公鑰,一行字串';
//此處驗籤方式必須與下單時的簽名方式一致
$flag = $aop->rsaCheckV1($_POST, NULL, "RSA");
//驗籤通過後再實現業務邏輯,比如修改訂單表中的支付狀態。
/**
①驗籤通過後核實如下引數trade_status、out_trade_no、total_amount、seller_id
②修改訂單表
**/
//列印success,應答支付寶。必須保證本介面無錯誤。只打印了success,否則支付寶將重複請求回撥地址。
echo 'success';
}
}