# Android微信支付接入

微信支付接入
一、 前期准备
申请应用
二、微信支付业务流程
统一下单API、支付结果通知API和查询订单API等都涉及签名过程 , 调用都必须在服务器端完成 。

# Android微信支付接入

文章插图
商户系统和微信支付系统主要交互说明:
步骤1:用户在商户APP中选择商品 , 提交订单 , 选择微信支付 。
步骤2:商户后台收到用户支付单 , 调用微信支付统一下单接口 。
# Android微信支付接入

文章插图
步骤3:统一下单接口返回正常的 , 再按签名规范重新生成签名后 , 将数据传输给APP 。参与签名的字段名为appid ,  ,  ,  ,  ,  。注意:的值格式为Sign=WXPay
步骤4:商户APP调起微信支付 。
步骤5:商户后台接收支付通知 。
步骤6:商户后台查询支付结果 。
三、接入步骤
【# Android微信支付接入】步骤一:在微信开放平台现在最新sdk,并集成到项目中 。
步骤二:在应用启动的时候初始化api
IWXAPI msgApi = WXAPIFactory.createWXAPI(context, APP_ID);msgApi.registerApp("wxd930ea5d5a258f4f");
步骤三:调起支付
# Android微信支付接入

文章插图
PayReq req = new PayReq();PayResult.DataBean data = http://www.kingceram.com/post/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);
# Android微信支付接入

文章插图
在调用支付之前需要统一下单 , 这个操作在服务端进行 , 上面的就是服务端返回的统一下单结果 。
步骤四、支付结果回调
参照微信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 。
接受到结果后展示不同的结果 。至此 , 维信支付就全部完成了 。