安卓接入微信支付一直返回錯誤碼-1
阿新 • • 發佈:2018-12-10
通常來講這裡的請求時由後臺拼好給你的,但是你也可以自己拼。我這裡說的是後臺拼的情況。
1.看看你是否建立了一個wxapi的包,並在這個包下有WXPayEntryActivity類。
2.檢查你的應用包名是否與申請開通支付時的包名一致。
3.如果包名一直,檢視金鑰是否一致,因為簽名和不簽名獲取到的金鑰是不一樣的。
4.後臺使用的api金鑰是否正確,這裡的api金鑰不是AppSecret,是需要單獨申請的。
5.請你的後臺檢查拼接字元時候的key值是否按照ascii碼的順序來的。
6.如果以上都是正常的那麼就是sign的問題了,因為後臺在發起微信支付的時候,也是要傳sign給微信,而且微信也會返回sign給後臺,有可能你的後臺把微信給他的sign返回給你了;如果你拿著這個sign去請求是會一直返回-1的。
如果你需要在本地拼接sign欄位,那麼一下程式碼可能會幫助到你:
//位元組陣列轉字串 private static String byteArrayToHexString(byte b[]) { StringBuffer resultSb = new StringBuffer(); for (int i = 0; i < b.length; i++) resultSb.append(byteToHexString(b[i])); return resultSb.toString(); } //位元組轉字元 private static String byteToHexString(byte b) { int n = b; if (n < 0) n += 256; int d1 = n / 16; int d2 = n % 16; return hexDigits[d1] + hexDigits[d2]; } /** * md5加密 * @param origin 需要加密的字串 * @param charsetname 字元編碼 * @return 加密後的字串 */ public static String MD5Encode(String origin, String charsetname) { String resultString = null; try { resultString = new String(origin); MessageDigest md = MessageDigest.getInstance("MD5"); if (charsetname == null || "".equals(charsetname)) resultString = byteArrayToHexString(md.digest(resultString .getBytes())); else resultString = byteArrayToHexString(md.digest(resultString .getBytes(charsetname))); } catch (Exception exception) { } return resultString; } //微信登陸本地簽名 private String signNum(String partnerId,String prepayId,String packageValue,String nonceStr,String timeStamp,String key){ String stringA= "appid="+ APP_ID +"&noncestr="+nonceStr +"&package="+packageValue +"&partnerid="+partnerId +"&prepayid="+prepayId +"×tamp="+timeStamp; String stringSignTemp = stringA+"&key="+key; String sign = TipsUtils.MD5Encode(stringSignTemp,"utf-8"); return sign; } private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };