天天看點

android 支付寶 40247,支付寶 app支付異常摘記 -- ALI40247

一. 支付

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 result = alipay.payV2(orderInfo, true);

1

2

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

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

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

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

1. 簽名錯誤:

我驗簽失敗是因為把支付寶的公鑰弄錯了,應該下圖指的位置的公鑰(開放平台密鑰)。

(圖檔所在網頁位址,https://openhome.alipay.com/platform/keyManage.htm)

順便說明下:移動支付和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

原文:https://www.cnblogs.com/Alex80/p/14764707.html