支付寶小程式 支付時訂單處理失敗 報ALI38173
阿新 • • 發佈:2018-12-24
我的後臺使用的PHP語言 用的官方SDK
$aop = new AopClient;
$aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$aop->appId = "app_id";
$aop->rsaPrivateKey = '請填寫開發者私鑰去頭去尾去回車,一行字串';
$aop->format = "json";
$aop->charset = "UTF-8";
$aop->signType = "RSA2";
$aop->alipayrsaPublicKey = '請填寫支付寶公鑰,一行字串' ;
//例項化具體API對應的request類,類名稱和介面名稱對應,當前呼叫介面名稱:alipay.trade.app.pay
$request = new AlipayTradeAppPayRequest();
//SDK已經封裝掉了公共引數,這裡只需要傳入業務引數
$bizcontent = "{\"body\":\"我是測試資料\","
. "\"subject\": \"App支付測試\","
. "\"out_trade_no\": \"20170125test01\","
. "\"timeout_express\": \"30m\","
. "\"total_amount\": \"0.01\","
. "\"product_code\":\"QUICK_MSECURITY_PAY\""
. "}";
$request->setNotifyUrl("商戶外網可以訪問的非同步地址");
$request->setBizContent($bizcontent);
//這裡和普通的介面呼叫不同,使用的是sdkExecute
$response = $aop->sdkExecute($request);
//htmlspecialchars是為了輸出到頁面時防止被瀏覽器將關鍵引數html轉義,實際列印到日誌以及http傳輸不會有這個問題
echo htmlspecialchars($response);//就是orderString 可以直接給客戶端請求,無需再做處理。
在支付時提示交易訂單處理失敗,請稍後再試。(ALI38173)
查詢了好久,最終的解決方案是
把htmlspecialchars($response); 去掉 ,直接輸出 $response給客戶端呼叫即可。
回撥判斷
$aop = new AopClient;
$aop->alipayrsaPublicKey = '請填寫支付寶公鑰,一行字串';
$flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");
if($flag){
if($_POST['trade_status' == "TRADE_SUCCESS"){
// 修改訂單支付狀態
}
}else{
//驗證失敗
}