#Android微信支付接入(三步完工解析+实例)

最近有朋友问到微信支付的一些开发点,博主就把微信支付接入流程,捋一捋.基本初入安卓的也能根据本文,快速接入微信支付.默认读者具备签名打包知识(如不具备请先查阅相关知识点)

参照博主提供例子,按照下文即可快速简单接入微信支付,给需要的读者直接上的安卓微信支付Demo

文章目录

    • 一 公司官方注册微信开放平台账号(准备1)
    • 二 登录[微信开放平台](https://open.weixin.qq.com/)创建移动应用(准备2)
    • 三 微信支付接入(核心代码)
    • 四 服务端坑点
    • 五 尾言
    • 六 微信返回-1终极处理补充(20190712)
    • 补充--调不起微信支付原因

一 公司官方注册微信开放平台账号(准备1)

第一步:开发者第一点注意贵公司是否已申请微信开放平台账号( 微信目前只支持公司账号申请支付,暂不支持个人开发者支付申请),没有则协调沟通申请即可.

二 登录微信开放平台创建移动应用(准备2)

  • :登录账号后,点击上面菜单栏 [管理中心] – [移动应用]–[创建应用],创建应用三个步骤按提示填入(审核后这部分资料可修改),微信会在7天内完成审核.记录好AppIDAppSecret后面使用即可.

    注:博主那时负责安卓端与IOS端这块由我申请的,微信支持两端一起创建即可(这里踩过坑,读者注意)

  • 安卓需要配置应用签名 :打一个release包,安装即可,在安装一个微信自己的获取签名APK,在该APK输入,刚才release包名,即可生成应用签名,绿色字体既是应用签名 (微信采用安全码策略:包名+应用名+应用签名,只要一个改变,就无法调起微信支付)

    微信官方截图如下:

三 微信支付接入(核心代码)

1.在app的build.gradle文件中,添加如下依赖:

dependencies {   compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'}

2.在注册清单AndroidManifest.xml中添加权限与WXPayEntryActivity

                

3.在应用入口MyApplication中将该app注册到微信即可

final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);// 将该app注册到微信   AppID:步骤二申请到的AppIDmsgApi.registerApp(AppID);

4.接受后台返回支付信息:在APP支付发起页面,向后台服务器请求,服务器生成预付单,返回response 成功,获取到prepay_id等相应参数,app再调起微信支付即可

  /**     * 微信支付     */    public void payToWX() {        StringBuilder url = new StringBuilder();        url.append(Constants.GET_WX_PARAMETER);        url.append("?Token=" + PreferencesUtils.getString(this, Constants.TOKEN_KEY));        url.append("&orderNum=" + orderBean.getOrderNumber());        HttpUtils.post(url.toString(), new HttpCallBack() {            @Override            public void onBefore(BaseRequest request) {                super.onBefore(request);                showDialog("加载中...");            }            @Override            public void onSuccess(String s, Call call, Response response) {                InfoResultData infoResultData = new Gson().fromJson(s, InfoResultData.class);                if (infoResultData.getStatus() == 200) {                    goToWX(infoResultData.getData().toString());                } else {                    disDialog();                    showShort(infoResultData.getMessage());                }            }            @Override            public void onError(Call call, Response response, Exception e) {                super.onError(call, response, e);                disDialog();            }        });    }

5,调起原生微信支付:把服务器返回的,字典封装并提交给微信即可mWxApi.sendReq(req);

    /**     * 前往微信页面支付     */    public void goToWX(String json) {    // 可以在当前页面注册,或者前面APP 注册        IWXAPI mWxApi = WXAPIFactory.createWXAPI(this, Constants.WX_APPID, true);        mWxApi.registerApp(Constants.WX_APPID);        if (mWxApi != null) {            PayReq req = new PayReq();            req.appId = Constants.WX_APPID;// 微信开放平台审核通过的应用APPID            try {                JSONObject jsonObject = new JSONObject(json);                req.partnerId = jsonObject.getString("partnerid");// 微信支付分配的商户号                req.prepayId = jsonObject.getString("prepayid");// 预支付订单号,app服务器调用“统一下单”接口获取                req.nonceStr = jsonObject.getString("noncestr");// 随机字符串,不长于32位咱生成                req.timeStamp = jsonObject.getString("timestamp");// 时间戳                req.packageValue = jsonObject.getString("package");// 固定值Sign=WXPay,服务器返回固定值                req.sign = jsonObject.getString("sign");// 签名            } catch (JSONException e) {                e.printStackTrace();            }            mWxApi.sendReq(req);        }    }

6.支付成功:在WXPayEntryActivity页面接收微信支付结果回调,做自己相应需求即可

@Overridepublic void onResp(BaseResp resp) {//0成功 -1支付出错 -2用户取消支付 //-1支付出错可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {//支付成功  TODO }}

注:踩过的坑–测试debug签正式签名即可调起(同release发布版一样操作即可)

四 服务端坑点

  • 坑点一:服务端key,是微信商户平台,在账户设置,API安全,秘钥设置里面设置(这个坑我们后台接入时踩过)

  • 坑点二: 服务端返回数据需要带上商户IDpartnerId(我们后端估计没仔细看文档)

  • 坑点三: 服务端几个相关id,现在都是小写,请仔细看官方文档是id不是Id(最后直接 C + V保证一致)

五 尾言

希望读者看完上面文章即可简单快速接完微信支付,下面是官方链接

微信开放平台

微信开放平台接入指南

微信APP端开发步骤

六 微信返回-1终极处理补充(20190712)

返回-1请注意:你已经确认你包名,签名等所有配置没问题,清空微信缓存,或者卸载微信缓存。
开发时场景:debug 与 release签名切换后,导致返回-1,不能正常调起微信支付。这个是微信的一个bug也是一个坑,个人理解微信把包名和签名存储起来了,后面不更新,导致切换签名后,不能正常覆盖,而最终不能吊起支付。

再说3次:卸载,卸载,卸载 即可

补充–调不起微信支付原因

注意包名,在xx.xxxxxx.xxxx.wxapi包路径中实现WXPayEntryActivity类(包名或类名不一致会造成无法回调)
build文件配置:applicationIdSuffix 包名尾缀

更多相关文章

  1. Enhanced Security Solution in Android
  2. Android微信支付彻底扫坑
  3. Android的签名文件生成两种方法
  4. android指定签名的apk才能安装
  5. Android(安卓)微信支付快速集成案例及有效解决返回值-1
  6. 将VitamioBundle工程作为Android(安卓)Library引入Demo工程使用
  7. apk反编译和重新打包
  8. Android(安卓)App支付系列(一):微信支付接入详细指南(附官方支付dem
  9. Android中微信支付的调用方法

随机推荐

  1. window环境下使用VScode连接虚拟机MySQL
  2. Mysql经典高逼格/命令行操作(速成)(推荐)
  3. 详解mysql基本操作详细(二)
  4. 浅谈Mysql、SqlServer、Oracle三大数据库
  5. mysql unique key在查询中的使用与相关问
  6. MySQL数据库定时备份的实现方法
  7. mysql数据库和oracle数据库之间互相导入
  8. 浅析使用JDBC操作MySQL需要添加Class.for
  9. 详解一条sql语句在mysql中是如何执行的
  10. 你还在 Select * 吗?