1. 程式人生 > >安卓接入微信支付一直返回錯誤碼-1

安卓接入微信支付一直返回錯誤碼-1

通常來講這裡的請求時由後臺拼好給你的,但是你也可以自己拼。我這裡說的是後臺拼的情況。

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
                    +"&timestamp="+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" };