项目第一期已经完成,里面涉及到了微信支付,当时由于项目赶进度,只是把功能实现了,并没有认真的梳理一下,现在趁有时间好好总结一下。
第一步,在微信开放平台注册一个账号,然后创建一个应用,填写应用的相关信息(签名、包名、图标等)。填完之后,等待审核。审核通过之后,你会获取到AppId、AppSecret和接口相关信息,如下图。注:接口状态前两个是应用审核通过之后直接就获得的,而我们要用到的微信支付这个接口还是要申请的,申请资料是公司的相关资料(这个是公司相关人员申请的)。资料审核完以后,会向你所填写的邮箱里发送商户号和密码等重要信息,一定要保存好。
第二步,查看支付文档,下载微信提供的demo,正式开始开发。
下面是微信支付开发的时序图,可以更直观的查看app支付在各端的交互流程:
可以把微信提供的demo直接复制到你的应用中,然后在Constants这个类中将参数换成你自己的,商户号MCH_ID是在支付审核通过后给你邮箱中发送的一个参数,如下图:
1、在AppRegister类中注册你的appId
API 调用前,需要先向微信注册您的APP,代码如下:
final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);
// 将该app 注册到微信
msgApi.registerApp(APP_ID);
2、生成微信支付参数:
req.appId = Constants.APP_ID;
req.partnerId = Constants.MCH_ID;
req.prepayId = resultunifiedorder.get("prepay_id");
req.packageValue = "Sign=WXPay";
req.nonceStr = genNonceStr();
req.timeStamp = String.valueOf(genTimeStamp());
List<NameValuePair> signParams = new LinkedList<NameValuePair>();
signParams.add(new BasicNameValuePair("appid", req.appId));
signParams.add(new BasicNameValuePair("noncestr", req.nonceStr));
signParams.add(new BasicNameValuePair("package", req.packageValue));
signParams.add(new BasicNameValuePair("partnerid", req.partnerId));
signParams.add(new BasicNameValuePair("prepayid", req.prepayId));
signParams.add(new BasicNameValuePair("timestamp", req.timeStamp));
req.sign = genAppSign(signParams);
3、调起微信支付参数:
msgApi.registerApp(Constants.APP_ID);
msgApi.sendReq(req);
4、接受支付返回结果:在WXPayEntryActivity 类中实现onResp 函数,处理支付结果的通知和下一步界面操作。
在onResp 方法中带的参数resp的errCode有3个值:
errCode == 0 支付成功;
errCode == -1 支付失败;
errCode == -2 支付取消;
到这里,微信支付开发就结束了。最后,还要提醒大家注意下面几点:
(1)微信支付回调的WXPayEntryActivity必须是:你的包名+.wxapi.WXPayEntryActivity.java。
(2)如果微信支付之前可以支付,突然不能正常支付了,你可以清理一下微信缓存,这个我试过对我有用。
以上就是我所总结的微信支付的过程,难免会有漏洞和不足之处,欢迎大神批评吐槽,大家共同进步!
最后,附上参考网站的链接http://www.360doc.com/content/15/0214/10/7044580_448519997.shtml