# Android微信支付接入
微信支付接入
一、 前期准备
申请应用
二、微信支付业务流程
统一下单API、支付结果通知API和查询订单API等都涉及签名过程,调用都必须在服务器端完成。
商户系统和微信支付系统主要交互说明:
步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。
步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。
步骤3:统一下单接口返回正常的,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appid,,,,,。注意:的值格式为Sign=WXPay
步骤4:商户APP调起微信支付。
步骤5:商户后台接收支付通知。
步骤6:商户后台查询支付结果。
三、接入步骤
步骤一:在微信开放平台现在最新sdk,并集成到项目中。
步骤二:在应用启动的时候初始化api
IWXAPI msgApi = WXAPIFactory.createWXAPI(context, APP_ID);msgApi.registerApp("wxd930ea5d5a258f4f");
步骤三:调起支付
PayReq req = new PayReq();
PayResult.DataBean data = payResult.getData();
req.appId = data.getAppId();
req.partnerId = data.getPartnerId();
req.prepayId = data.getPrepayId();
req.packageValue = data.getPackageX();
req.nonceStr = data.getNonceStr();
req.timeStamp = data.getTimeStamp();
req.sign = data.getSign();
// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
LogUtil.logByD("PAY_GET", req.toString());
if (!api.isWXAppInstalled()) {AppUtil.showToastMsg(view.getFragment().getContext(), "您还未安装微信客户端,请先安装微信客户端");return;
}
api.sendReq(req);
在调用支付之前需要统一下单,这个操作在服务端进行,上面的就是服务端返回的统一下单结果。
步骤四、支付结果回调
参照微信SDK ,在net...wxapi包路径中实现类(包名或类名不一致会造成无法回调),在类中实现函数,支付完成后,微信APP会返回到商户APP并回调函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。注意一定不能以客户端返回作为用户支付的结果,应以服务器端的接收的支付通知或查询API返回的结果为准。
publicvoidonResp(BaseRespresp){if(resp.getType()==ConstantsAPI.COMMAND_PAY_BY_WX){Log.d(TAG,"onPayFinish,errCode="+resp.errCode);AlertDialog.Builderbuilder=newAlertDialog.Builder(this);builder.setTitle(R.string.app_tip);}
}
返回结果码
回调中errCode值列表:名称 描述 解决方案
0 成功 展示成功页面
-1 错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
-2 用户取消 无需处理。发生场景:用户不支付了,点击取消,返回APP。
接受到结果后展示不同的结果。至此,维信支付就全部完成了。