android 微信 支付 接入流程总结

[TOC]

客户端微信支付

android 接入微信指南
android 资源下载页
微信支付 开发文档

  1. 登录微信官方开放平台微信,注册账号,在微信开放平台申请应用,输入已上线app的正式的应用包名和签名,微信提供了一个签名工具,一般使用它提供的签名工具生成签名,然后填写到对应的位置。。android微信接入指南,对于微信支付,还需要用户单独申请微信支付的功能,填写信息,签约等等。。
  2. 准备完成之后,会获取到相应的appId appSecret 商户秘钥,商户Id等。。APP支付接入指南
    需要注意的一点是,微信支付分为好几种扫描支付 公众号支付 app支付等,但是他们并不一样,公众号支付和扫码支付是在公众号注册用户,申请支付,而APP支付是在微信开放平台进行申请的。。请不要搞混乱,我因此乱了两周了。。。
  3. 一切准备完毕,接下来就进入正式的开发,我们的流程是,客户端预定商品,服务器生成订单号OrderId,然后根据此订单号,由服务器去统一下单,生成预支付订单,然后由服务器把需要调起支付页面的7个参数通过json格式传给客户端。。
{
                                                     "package": "Sign=WXPay",  包名
                                                    "timestamp": 1476092570,  随机时间
                                                    "sign": "6960633xxxxxxxx7F6FA1EFxxxxx2D72",  签名
                                                    "partnerid": "13xxxxxx1",  商户id
                                                    "appid": "wxxxxxxxxxx4e7d",  appid
                                                    "prepayid": "wx201610xxxxxxxx0663390994",  预支付订单号
                                                    "noncestr": "36a0de4b95314703881d051668a8"  随机字段值
                                                }
  1. 接下来就是客户端对微信端的工作了。。下载微信SDK ,然后添加到项目中。。或者使用build导入的形式
  2. 跟微信登录和分享是一样的,同样在包名下新建一个package - 包名.wxapi,在这个新包下创建两个类,WXPayEntryActivity,WXEntryActivity,这两个类主要是用来获取微信支付,微信登录分享之后的回调。。还需要在配置文件下对此类进行声明,主要是说明能够让外部引用。。 android:exported="true"
   
  1. 下面是配置微信登录分享的信息
            android:name=".wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
  1. 配置也配置好了,接下来就是在对应的类中的onResp()方法中,对返回的errorCode进行解读,不同的code代表不同的意思。。
switch (resp.errCode) {
            case 0:
                result = "支付成功!!!";
                break; //支付成功
            case -1:
                result = "支付失败!!!";
                break; //支付失败
            case -2:
                result = "取消支付!!!";
                break; //取消支付
        }
        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
            AlertDialog.Builder builder = new AlertDialog.Builder(WXPayEntryActivity.this);
            builder.setMessage(getString(R.string.pay_result_callback_msg, result));
            builder.setTitle("支付结果");
            builder.setPositiveButton(WXPayEntryActivity.this.getString(R.string.ok), new DialogInterface.OnClickListener() {
                @Override
                public void onClick(final DialogInterface dialog, int which) {
                    dialog.dismiss();
                    WXPayEntryActivity.this.finish();
                }
            });

            builder.create().show();
        }
  1. 一切准备完成,下面就是发送支付请求,调起支付界面了。。
    由于是服务器把所有的参数都准备好,所以只需要解析服务器数据即可。。
    但是在发送微信请求之前需要根据appid创建IWxapi,然后注册。。。一般使用全局的wxapi实例,所以可以在Application中对微信进行注册。。
IWapi wxapi = WXAPIFactory.createWXAPI(this, Constants.SOCIAL_WECHAT_APP_ID, true);
 wxapi.registerApp(Constants.SOCIAL_WECHAT_APP_ID);

//根据服务器返回的数据,调起支付

  PayReq req = new PayReq();
                req.appId = JsonUtil.getStringValue("appid", jsonObject);
                req.partnerId = JsonUtil.getStringValue("partnerid", jsonObject);
                req.packageValue = "Sign=WXPay";
                req.nonceStr = JsonUtil.getStringValue("noncestr", jsonObject);
                req.timeStamp = JsonUtil.getStringValue("timestamp", jsonObject);
                req.prepayId = JsonUtil.getStringValue("prepayid", jsonObject);
                req.sign =JsonUtil.getStringValue("json", jsonObject);
                Boolean sendResult = App.getContext().wxapi.sendReq(req);
  1. 请求发送结束之后,我们就可以在WxpayEntryActivity中对支付结果做出处理。。
    errotCode有三种选择 0:正常支付 -1:支付失败 -2:取消支付
  2. 下面是一些判断之类的:
if (App.getContext().wxPayApi.isWXAppInstalled()) {
                        if (App.getContext().wxPayApi.isWXAppSupportAPI()) {
                            payByWechat(orderId);
                        } else {
                            App.getContext().showMessage("您当前的微信版本不支持支付");
                        }
                    } else {
                        App.getContext().showMessage("您还未安装微信客户端");
                    }
  1. 微信的签名很大的坑,需要要按照他的签名规则才可以。。微信签名规则

你可能感兴趣的:(android 微信 支付 接入流程总结)