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

版权声明:博主原创欢迎分享学习 https://blog.csdn.net/qXing123456789/article/details/82461472

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

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

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

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

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

这里写图片描述

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

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

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

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

    微信官方截图如下:
    微信签名APK截图

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

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

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

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

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <activity
            android:name=".wxapi.WXPayEntryActivity"
            android:exported="true"
            android:launchMode="singleTop"/>

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

final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);

// 将该app注册到微信   AppID:步骤二申请到的AppID

msgApi.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页面接收微信支付结果回调,做自己相应需求即可

	@Override
	public 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端开发步骤

没有更多推荐了,返回首页