WeChatは署名アルゴリズムのいくつかのピットを支払います.


WeChatは署名アルゴリズムのいくつかのピットを支払います.
今日はWeChatでお支払いしていますが、気がふさぐことがありました.コードを確認しても問題は見つからないです.しかし、WeChat決済インターフェースは「千呼万出」です.一度signアルゴリズムをチェックしてみたら、問題が発見されました.
  • WeChat支払い署名アルゴリズムのいくつかのピット
  • 私のsignアルゴリズム
  • signアルゴリズム注意事項
  • 私の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説明通りに厳格にすれば大丈夫です.