做过微信支付的都知道这是一个坑。。。
总结了一下最近两次微信支付中碰到的问题:
<span style="font-size:14px;">switch (resp.errCode) {
case -4:// 认证被否决
ToastUtils.showToast(this, R.string.authorize_refuse);
finish();
break;
case 0:// 正常返回
if (PayActivity.order_comefrom_orderdetail) {
finish();
for (int i = 0; i < BaseApplication.mActivitys.size(); i++) {
if (BaseApplication.mActivitys.get(i) instanceof PayActivity) {
BaseApplication.mActivitys.get(i).finish();
}
}
return;
}
commonDialog = DialogUtils.CommonDialog(this, handler, R.string.pay_result, -1, R.string.to_home, -1);
break;
case -1:// 一般错误
ToastUtils.showToast(this, R.string.general_error+resp.errStr);
finish();
break;
case -3:// 发送失败
ToastUtils.showToast(this, R.string.send_failed_retry);
finish();
break;
case -5:// 不支持的错误
ToastUtils.showToast(this, R.string.unsupport_error);
finish();
break;
case -2:// 用户取消
ToastUtils.showToast(this, R.string.pay_cancel);
finish();
break;
}</span>
碰到最多的、最头痛的应该就是这个“-1”的错误了(想再喷一下微信,就不能分的细一点?)。
以下总结一般哪些情况会是-1:
- 签名:
- 缓存?
- appid
- 服务器订单签名
package:这个字段,一定要传,签名的时候后台一定要加进去,为什么坑呢,因为微信文档里写着,“”暂填写固定值Sign=WXPay”,坑了很多人,很多人不写就会出错。还有就是用android 中gson解析的时候package与java关键字冲突(不知道微信是怎么想的。。),要手动解析,或者你就不管它,手动赋值“Sign=WXPay”