支付寶 app支付異常摘記 -- ALI40247

原文鏈接:https://blog.csdn.net/luojinbai/article/details/52753660

參考鏈接:https://blog.csdn.net/luojinbai/article/details/52753660

一. 支付

1. 系統繁忙,請稍後重試。(ALI40247): 簽名錯誤。

我的問題來源(兩個問題): 
① 簽名串sign=簽名串,這個簽名串是不帶雙引號的,我不小心兩頭有雙引號; 
② 簽名流程是: 
  △ 1. 請求參數按照key=value&key=value方式拼接的未簽名原始字符串; 
  △ 2. 再對原始字符串進行簽名,參考 簽名規則; 
  △ 3. 最後對請求字符串的所有一級value(biz_content作爲一個value)進行encode,編碼格式按請求串中的charset爲準,沒傳charset按UTF-8處理,獲得最終的請求字符串;
  簽名之後給value進行URL編碼之前,是不需要進行任何編碼的,我不小心在這之前給簽名穿進行了URL編碼,最後相當於簽名串URL編碼了兩次;

  注意:biz_content中的json串不需要進行排序;

2. app調起支付,輸入密碼之後,提示:暫時無法獲取訂單信息,請稍後重試。

查找資料應該是簽名過了,需要換換更高版本的SDK。 
http://www.cocoachina.com/bbs/read.php?tid-1692932.html 
支付寶升級過sdk,換上最新的sdk,sdk調用也需要更改下,以android爲例:
    // 構造PayTask 對象
    PayTask alipay = new PayTask(PayDemoActivity.this);
    // 調用支付接口,獲取支付結果
    String result = alipay.pay(payInfo, true);
更新爲

    PayTask alipay = new PayTask(PayDemoActivity.this);
    Map<String, String> result = alipay.payV2(orderInfo, true);

  到這裏,我的問題還是沒有解決,依舊是 暫時無法獲取訂單信息,請稍後重試,後來檢查配置的時候,發現原來是配置錯了,兩個支付寶商戶號,A簽約的是移動支付的,B簽約的是app支付的,一直報錯是配了移動支付的A配置,到這裏猜測下錯誤信息的意思,錯誤信息中的訂單信息可能是商戶與支付寶的簽約訂單,而非商戶自己的訂單,而A配置是沒有簽約app支付的,是沒有權限使用支付2.0的接口;

3. app調起支付,輸入密碼之後,提示:系統太忙了,請稍後重來(T8912)。

問題:支付寶訂單超時關閉了,超過了支付寶發起支付時候的超時時間。

二. app支付成功之後異步回調驗籤

1. 簽名錯誤:

  我驗籤失敗是因爲把支付寶的公鑰弄錯了,應該下圖指的位置的公鑰(開放平臺密鑰)。 
(圖片所在網頁地址,https://openhome.alipay.com/platform/keyManage.htm) 

順便說明下:移動支付和app支付異步回調的驗籤規則一模一樣,兩者通用,但是,兩者的公鑰是不同的,簽約app支付的商戶也可以用移動支付付款,但是移動支付驗籤的密鑰是從下圖指定的地方獲取(合作伙伴密鑰)。 

順便說明下:移動支付和app支付異步回調的驗籤規則一模一樣,兩者通用,但是,兩者的公鑰是不同的,簽約app支付的商戶也可以用移動支付付款,但是移動支付驗籤的密鑰是從下圖指定的地方獲取(合作伙伴密鑰)。 

到這裏,我已經懵圈了。

  還有移動支付和app支付的異步通知的數據,同一意思的字段兩個的key不一樣,比如:訂單金額,移動支付裏面是‘total_fee’表示,app支付是‘total_amount’表示,其他的字段也有不一樣的,這裏不一一舉例。


三. 退款

  退款的簽名算法與支付的是一樣的。

1. 撤銷或退款金額與訂單金額不一致
{
    "code":"40004",
    "msg":"Business Failed",
    "sub_code":"ACQ.REFUND_AMT_NOT_EQUAL_TOTAL",
    "sub_msg":"撤銷或退款金額與訂單金額不一致",
    "out_trade_no":"2016101413332343230",
    "refund_fee":"0.00",
    "send_back_fee":"0.00"
}

退款的請求參數中,有個參數:out_request_no,標識一次退款請求,參數要求是,如果不填寫該參數,表示是交易全額退款,如果同一筆交易多次退款需要保證唯一,如需部分退款,則此參數必傳。 
  我的問題是忘記填寫該參數了,然後又是部分退款,相當於全額退款,那麼退款金額與訂單金額不一致了,然後同一筆交易多次退款需要保證唯一的問題,一筆交易分多次退款,每次的退款號要唯一。

————————————————
版權聲明:本文爲CSDN博主「賤一白」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/luojinbai/article/details/52753660

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章