安卓接入微信支付一直返回错误码-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" };
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值