去年有个项目开发当时有接入微信支付的经验,过程比较顺利,一次就调通了,中间并没出什么问题,
但这次就没上次那么 '运气' 了,说实话微信支付接起来很快,结果调试的时候返回 ErrCode容易
出现-1情况,来看完整的微信接入及支付过程。
步骤1: 用户进入商户APP,选择商品下单、确认购买,进入支付环节。商户服务后台生成支付订单,签名后将数据传输到APP端。
步骤2: 用户点击后发起支付操作,进入到微信界面,调起微信支付,出现确认支付界面。
步骤3: 用户确认收款方和金额,点击立即支付后出现输入密码界面,可选择零钱或银行卡支付。
步骤4: 输入正确密码后,支付完成,用户端微信出现支付详情页面。
步骤5: 回跳到商户APP中,商户APP根据支付结果个性化展示订单处理结果。
微信支付接入步骤:
1, 后台设置,参考微信支付API,商户在微信开放平台申请开发应用后,微信开放平台会生成APP的唯一标识APPID。
由于需要保证支付安全,需要在开放平台绑定商户应用包名和应用签名,设置好后才能正常发起支付。设置界面
在【开放平台】中的栏目【管理中心 / 修改应用 / 修改开发信息】里面。
应用包名:是在APP项目配置文件AndroidManifest.xml中声明的package值,例如DEMO中的package="net.sourceforge.simcpux"。
应用签名:根据项目的应用包名和编译使用的 keystore(正式的),可由签名工具生成一个32位的md5串,在调试的手机上安装签名工具后,
运行后输入你正式签名过的包名, 如:net.sourceforge.simcpux ,如图所示,绿色串即应用签名。签名工具下载地址https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk
2,把 libammsdk.jar 考到工程 libs下面,eclipse , studio 都一样.
3, 配置 WXPayEntryActivity, AndroidMainfest权限等:
⑴:在AndroidMainfest.xml找到 package,在自己的工程包名后面创建一个.wxapi的包,把微信Demo的 WXPayEntryActivity 拷贝
并放在.wxapi下,wx_pay_result.xml 放在layout下即可。
⑵:配置权限等信息:
4,微信Api调用支付请求配置,这一步先从服务器后台生成微信支付订单后,返回过来并在客户端调用,WechatPayData就是
我自己服务器返回的订单参数:
//微信支付初始化
PayReq req = new PayReq();
IWXAPI msgApi = WXAPIFactory.createWXAPI(mActivity, null);
//支付订单参数赋值
req.appId = wechatPayData.getAppid();
req.partnerId = wechatPayData.getPartnerid();
req.prepayId = wechatPayData.getPrepayid();
req.packageValue = wechatPayData.getPackageValue();
req.nonceStr = wechatPayData.getNoncestr();
req.timeStamp = wechatPayData.getTimestamp();
req.sign = wechatPayData.getSign();
//调起支付
msgApi.sendReq(req);
@Override
public void onResp(BaseResp resp) {
Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
if(String.valueOf(resp.errCode).equals("0")){
result_textview.setText("微信支付成功");
}else if(String.valueOf(resp.errCode).equals("-1")){
result_textview.setText("微信支付失败");
}else if(String.valueOf(resp.errCode).equals("-2")){
result_textview.setText("微信支付取消");
}
}
}
errCode:
0 : 支付成功
1 : 参数错误
2 : 签名不正确
-1 : 支付失败
-2 : 取消支付
整个支付流程就这样,过程简单,现在我们来说说errCode返回 -1情况:
问题1:
签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
问题2:
自己服务器后台生成的订单有问题,参数名必须小写,服务器订单参数顺序最好一致,参数多加了或者少加了,订单参数都会
造成签名失败 , 最好把服务器订单参数在该地址测下,看是不是签名出现的问题,地址:https://pay.weixin.qq.com/wiki/tools/signverify/
Ps: 这次代价有点惨痛,在问题一上面耗了点时间,各种换libammsdk.jar,查看keystore签名等,最后花了一天时间才搞定-1问题,
我的问题就出现在问题2 , 就是订单多加了一个参数,android段是不需要的,造成签名失败了,奇怪的是 IOS支付没问题,开始以为
订单是没问题的,导致我影响了判断,最后发现原来是订单多加了一个参数造成的-1失败。