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

#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端开发步骤

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

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

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

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

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

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
对于Android应用接入微信支付,您需要按照以下骤进行操作: 1. 在微信支付开放平台注册账号并登录。前往微信支付开放平台(https://pay.weixin.qq.com/)注册一个账号,并进行登录。 2. 创建应用并获取应用ID。在开放平台创建一个应用,并获取到对应的应用ID,这是后续接入过程中的重要标识。 3. 配置应用信息。在应用管理页面填写应用的基本信息,包括应用名称、AppID、支付回调URL等。确保信息填写准确无误。 4. 下载SDK和文档。在开放平台下载对应的微信支付SDK和接入文档,以便后续进行接入操作。 5. 导入SDK到Android项目。将下载的微信支付SDK导入到您的Android项目中,可以使用Gradle或手动导入的方式进行集成。 6. 配置权限和签名。在AndroidManifest.xml文件中添加必要的权限声明,并确保应用的签名信息与在微信支付开放平台注册时填写的一致。 7. 实现支付功能。根据微信支付开放平台提供的接入文档,按照要求实现支付功能的相关代码逻辑。 8. 发起支付请求。在合适的时机,通过调用微信支付SDK提供的API发起支付请求,并传递必要的订单信息和回调参数。 9. 处理支付结果回调。在您的应用中处理微信支付结果的回调通知,根据返回的支付结果状态进行相应的处理操作。 10. 测试和上线。在开发阶段进行测试,确保支付流程和结果正常。待测试通过后,提交应用上线并进行发布。 请注意,以上只是一个大致的流程概述,具体的接入骤和代码实现会因应用的具体需求和技术栈而有所差异。建议您仔细阅读微信支付开放平台提供的官方文档,并根据文档中的指引进行接入操作。如果遇到问题,可以参考文档中的常见问题解答或联系微信支付开放平台的技术支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值