小遊戲 虛擬支付 米大師 90009

詳細錯誤:

{"errcode":90009,"errmsg":"mp_sig error hint: [vmRqGa09211508]"}

檢查:

1.查看簽名順序是否一致,

2.access_token不允許放在body裏,只能放在url上使用?access_token=***來拼接;

3.傳的數據不能使用map,需要使用json傳參

可以用官網上的數據進行測試:

獲取sig:

  1. 參與米大師簽名請求參數
    "openid":"odkx20ENSNa2w5y3g_qOkOvBNM1g",
    "appid":"wx1234567",
    "offer_id":"12345678",
    "ts":1507530737,
    "zone_id":"1",
    "pf":"android"

     2.對參與米大師簽名的參數按照key=value的格式,並按照參數名ASCII字典序升序排序如下:

stringA="appid=wx1234567&offer_id=12345678&openid=odkx20ENSNa2w5y3g_qOkOvBNM1g&pf=android&ts=1507530737&zone_id=1"

    3.拼接uri、method和米大師密鑰(此處米大師密鑰爲微信公衆號平臺的AppKey,分爲沙箱和測試):

   在這裏官網上的請求地址爲 /cgi-bin/midas/getbalance;但是測試環境是 /cgi-bin/midas/sandbox/getbalance(官網並沒有寫).

stringSignTemp=stringA+"&org_loc=/cgi-bin/midas/sandbox/getbalance&method=POST&secret=zNLgAGgqsEWJOg1nFVaO5r7fAlIQxr1u"

   4.把米大師密鑰作爲key,使用HMAC-SHA256得到簽名。

sig=hmac_sha256(key,stringSignTemp)
   ="1ad64e8dcb2ec1dc486b7fdf01f4a15159fc623dc3422470e51cf6870734726b"

獲取mg_sig:

mg_sig:大多數是一樣的,不同的是,

1.加上了access_token和上面獲取的sign,

2.sig是使用AppKey做密鑰,而mg_sig是使用session_key作爲密鑰。

貼出加密算法:

// hmac_sha256
	private static String hmac_sha256(String message, String secret) {
		String hash = "";
		try {
			Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
			SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
			sha256_HMAC.init(secret_key);
			byte[] bytes = sha256_HMAC.doFinal(message.getBytes());
			hash = byteArrayToHexString(bytes);
			System.out.println(hash);
		} catch (Exception e) {
			System.out.println("Error HmacSHA256 ===========" + e.getMessage());
		}
		return hash;
	}

	private static String byteArrayToHexString(byte[] b) {
		StringBuilder hs = new StringBuilder();
		String stmp;
		for (int n = 0; b != null && n < b.length; n++) {
			stmp = Integer.toHexString(b[n] & 0XFF);
			if (stmp.length() == 1)
				hs.append('0');
			hs.append(stmp);
		}
		return hs.toString().toLowerCase();
	}

 

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