如何驗證伺服器建立的支付寶訂單格式正確
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、系統互動流程系統互動流程圖
(04)4、支付場景具體實現流程(最詳細圖解)在整合App支付能力時,建議實現如下支付流程,建立訂單並支付,根據返回的結果確定支付狀態,並進行相應的異常處理,其過程如圖所示.支付場景具體實現流程商家APP在建立訂單並且喚起支付寶APP支付,流程如圖所示,根據第2.2,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,判斷訂單最終支付結果,並做出最終響應。
特別提示
在除錯過程中要對程式碼的安全細節做完善,以免資料被洩露
-
為什麼qq老掉線/QQ自動掉線原因與解決方法
最近有朋友問為什麼我的QQ老掉線,提示說和伺服器連線失敗,以前都沒這種事的,也不知道是從什麼時候開始就老愛掉線了,而且是時好時掉線的,根據網上的一番收集與調查,總結出了以下QQ自動掉線所導致的原因與解決方法,以下一起來看看怎麼解決qq自動掉線的故障吧!QQ自動掉線...
-
回收站清空了還能恢復嗎,怎麼恢復找回檔案
相信不少人都有隔段時間就會去刪除回收站裡面的東西,而有一種習慣的網友們應該不在少數,也正因為如此,有時在刪除完後才想起還有些東西其實是用得著的,不過刪除完了怎麼把它們還原恢復呢,下面我來說下回收站清空了還能恢復嗎,怎麼恢復找回檔案。操作方法(01)在刪除了我...
-
淘寶雙11活動攻略
大家都知道雙十一都是有紅包可以領取的,無論哪個網購平臺基本都是有紅包的,作為行業老大天貓自然是少不了紅包,今天就主要給大家講一下天貓雙十一紅包的具體玩法有哪些,希望能給大家帶來幫助,畢竟紅包關乎著大家的錢包。操作方法(01)超級紅包玩法2019雙11紅包活動時間...
-
報名“天天特價”通過率高的技巧?
相信很多開網店的朋友都是知道天天特價的,因為報名天天特價,不能能引來很高的店鋪流量,而且還能帶起你店鋪的成交,更能帶動店內其他商品的成交,對於星級賣家店鋪來說,這無疑是個巨大的誘惑和吸引力,正是因為這樣,報名的商家更是成千上萬,那麼怎麼樣才能報名成功呢,下面小...