網站首頁 健康小知識 母嬰教育 起名 運動知識 職場理財 情感生活 綠色生活 遊戲數碼 美容 特色美食 愛好

如何驗證服務器創建的支付寶訂單格式正確

欄目: 互聯網 / 發佈於: / 人氣:1.7W

APP支付接口:
服務器端使用框架:Thinkphp5
登錄螞蟻金服開放平台 --> 創建應用 --> 添加App支付功能。具體查看官方文檔
下載官方 SDK (PHP版本資源)——當前SDK版本:106  生成時間:2017-07-25 11:46:10
將SDK原碼放置在TP5的vendor目錄下的alipay文件夾(可根據實際使用框架技術進行實際調整)。

操作方法

(01)支付接口調用原理1、APP支付系統架構APP支付系統架構圖

(02)2、數據校驗原理應用公鑰(商户自身的RSA公鑰):支付寶使用該公鑰驗證該交易是商户發起。支付寶公鑰(支付寶的RSA公鑰):商户使用該公鑰驗證該結果是支付寶返回的。

如何驗證服務器創建的支付寶訂單格式正確

(03)3、系統交互流程系統交互流程圖

如何驗證服務器創建的支付寶訂單格式正確 第2張

(04)4、支付場景具體實現流程(最詳細圖解)在集成App支付能力時,建議實現如下支付流程,創建訂單並支付,根據返回的結果確定支付狀態,並進行相應的異常處理,其過程如圖所示.支付場景具體實現流程商家APP在創建訂單並且喚起支付寶APP支付,流程如圖所示,根據第2.2,3步返回的支付結果,確定支付狀態,並且做相應的異常處理(必要時關閉訂單)

如何驗證服務器創建的支付寶訂單格式正確 第3張

代碼實現

(01)步驟1:商户APP端請求商户服務器接口,提交訂單數據。

(02)步驟2:商户服務器端接收數據,然後對數據進行簽名,返回請求參數到商户APP端。官方接口文檔:https://docs.open.alipay.com/204/105465/——代碼如下://vendor();為TP5框架的方法,作用:導入第三方框架類庫vendor('alipay.aop.AopClient');vendor('alipay.aop.request.AlipayTradeAppPayRequest');//實例化支付接口$aop = new AopClient();$aop->gatewayUrl = ""; //支付寶網關$aop->appId = “應用ID,填寫你的APPID”;$aop->rsaPrivateKey = "商户私鑰,您的原始格式RSA私鑰()";$aop->alipayrsaPublicKey = "支付寶公鑰";$aop->apiVersion = '1.0';$aop->signType = "簽名方式,如 RSA2 ";$aop->postCharset = 'UTF-8';$aop->format = "json";//實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:$appRequest = new AlipayTradeAppPayRequest();//SDK已經封裝掉了公共參數,這裏只需要傳入業務參數$bizcontent = json_encode(['body' => '餘額充值',  //訂單描述'subject' => '充值',   //訂單標題'timeout_express' => '30m','out_trade_no' => ‘20170125test01’, //商户網站唯一訂單號'total_amount' => '0.01', //訂單總金額'product_code' => 'QUICK_MSECURITY_PAY', //固定值]);$appRequest->setNotifyUrl($url);  //設置異步通知地址$appRequest->setBizContent($bizcontent);//這裏和普通的接口調用不同,使用的是sdkExecute$response = $aop->sdkExecute($appRequest);//htmlspecialchars是為了輸出到頁面時防止被瀏覽器將關鍵參數html轉義,實際打印到日誌以及http傳輸不會有這個問題echo htmlspecialchars($response);//就是orderString 可以直接給客户端請求,無需再做處理。// 如果最後有問題可以嘗試把htmlspecialchars方法去掉,直接返回$response

(03)步驟3:商户APP接收從商户服務器端返回的請求參數,然後調起支付寶支付面板。若用户支付成功,支付寶會同步給商户APP端返回一個支付結果。相應地,支付寶也會通過異步通知給商户服務器端返回一個支付結果。注意:由於同步通知和異步通知都可以作為支付完成的憑證,且異步通知支付寶一定會確保發送給商户服務端。為了簡化集成流程,商户可以將同步結果僅僅作為一個支付結束的通知(忽略執行校驗),實際支付是否成功,完全依賴服務端異步通知。

(04)步驟4:服務端異步通知處理機制(支付寶主動發起通知,該方式才會被啟用)官方接口文檔:注意點:1)必須保證服務器異步通知頁面(notify_url)上無任何字符,如空格、HTML標籤、開發系統自帶拋出的異常提示信息等;2)支付寶是用POST方式發送通知信息,因此該頁面中獲取參數的方式,如:$_POST[‘out_trade_no’];3)程序執行完後必須打印輸出“success”(不包含引號)。如果商户反饋給支付寶的字符不是success這7個字符,支付寶服務器會不斷重發通知,直到超過24小時22分鐘。一般情況下,25小時以內完成8次通知(通知的間隔頻率一般是:4m,10m,10m,1h,2h,6h,15h);4)當商户收到服務器異步通知並打印出success時,服務器異步通知參數notify_id才會失效。——代碼如下:$aop = new AopClient;$aop->alipayrsaPublicKey = '請填寫支付寶公鑰,一行字符串';$flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");  //驗證簽名if($flag)exit('fail');}echo"fail"; //驗證簽名失敗

(05)步驟5:當商户APP端接收到支付寶的同步返回結果為成功時,商户APP端再請求商户服務器端API,判斷訂單最終支付結果,並做出最終響應。

特別提示

在調試過程中要對代碼的安全細節做完善,以免數據被泄露