WeChatは署名アルゴリズムのいくつかのピットを支払います.
WeChatは署名アルゴリズムのいくつかのピットを支払います.
今日はWeChatでお支払いしていますが、気がふさぐことがありました.コードを確認しても問題は見つからないです.しかし、WeChat決済インターフェースは「千呼万出」です.一度signアルゴリズムをチェックしてみたら、問題が発見されました. WeChat支払い署名アルゴリズムのいくつかのピット 私のsignアルゴリズム signアルゴリズム注意事項 私のsignアルゴリズム
以下がポイントです.getWXSignアルゴリズムが伝えられたjsonは以下のように構成されています.
以下はパラメータ説明表です.
フィールド名
変数名
タイプ
必要とする
例の値
説明
アプリケーションID
apped
String(32)
はい、
wx 88888888888888
WeChatオープンプラットフォームで審査されたアプリケーションAPPID
商店番号
パートナーシップ
String(32)
はい、
1900000 109
WeChat決済で割り当てられた取引先番号
取引セッションIDを先払いする
prepayid
String(32)
はい、
WX 12775250140703323368018
WeChatが返した支払取引セッションID
拡張フィールド
package
String(128)
はい、
Sign=WXAY
固定値Sign=WXAYを仮記入
ランダムな文字列
アンス·スト
String(32)
はい、
5 K 8264 ILtKCH 16 CQ 2502 SI 8 ZNMTM 67 VS
ランダム文字列は、32ビット未満です.推奨乱数生成アルゴリズム
タイムスタンプ
timestamp
String(10)
はい、
1412000000
タイムスタンプは、インターフェースルール-パラメータ規定を参照してください.
署名する
sign
String(32)
はい、
C 380 BEC 2 BFD 727 A 4684519 F 3 AD6
署名、詳細は署名生成アルゴリズムを参照してください.
具体的な説明は以下のリンクを参照することができます.https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_12説明通りに厳格にすれば大丈夫です.
今日はWeChatでお支払いしていますが、気がふさぐことがありました.コードを確認しても問題は見つからないです.しかし、WeChat決済インターフェースは「千呼万出」です.一度signアルゴリズムをチェックしてみたら、問題が発見されました.
private String getWXSign(JSONObject json, String appKey) {
List signList = new ArrayList();
Iterator keys = json.keys();
while (keys.hasNext()) {
String key = (String) keys.next();
signList.add(key);
}
Collections.sort(signList);
String sign = "";
for (int i = 0; i < signList.size(); i++) {
String key = signList.get(i);
String value = json.optString(key);
sign = sign + key + "=" + value + "&";
}
sign = sign + "key=" + appKey;
sign = MD5.MD5Encode(sign, "UTF-8").toUpperCase();
// sign = MD5.getMessageDigest(sign.getBytes()).toUpperCase();
return sign;
}
signアルゴリズムの注意事項以下がポイントです.getWXSignアルゴリズムが伝えられたjsonは以下のように構成されています.
JSONObject signParams = new JSONObject();
signParams.put("appid", req.appId);
signParams.put("noncestr", req.nonceStr);
signParams.put("package", req.packageValue);
signParams.put("partnerid", req.partnerId);
signParams.put("prepayid", req.prepayId);
signParams.put("timestamp", req.timeStamp);
注意したいのですが、Key値は必ず小文字で書いてください.このピットのお父さんはPayReqのパラメータとは違って遊んでいます.PayReqのアプリはこのようなPayReq.appIdです.以下はパラメータ説明表です.
フィールド名
変数名
タイプ
必要とする
例の値
説明
アプリケーションID
apped
String(32)
はい、
wx 88888888888888
WeChatオープンプラットフォームで審査されたアプリケーションAPPID
商店番号
パートナーシップ
String(32)
はい、
1900000 109
WeChat決済で割り当てられた取引先番号
取引セッションIDを先払いする
prepayid
String(32)
はい、
WX 12775250140703323368018
WeChatが返した支払取引セッションID
拡張フィールド
package
String(128)
はい、
Sign=WXAY
固定値Sign=WXAYを仮記入
ランダムな文字列
アンス·スト
String(32)
はい、
5 K 8264 ILtKCH 16 CQ 2502 SI 8 ZNMTM 67 VS
ランダム文字列は、32ビット未満です.推奨乱数生成アルゴリズム
タイムスタンプ
timestamp
String(10)
はい、
1412000000
タイムスタンプは、インターフェースルール-パラメータ規定を参照してください.
署名する
sign
String(32)
はい、
C 380 BEC 2 BFD 727 A 4684519 F 3 AD6
署名、詳細は署名生成アルゴリズムを参照してください.
具体的な説明は以下のリンクを参照することができます.https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_12説明通りに厳格にすれば大丈夫です.