Android app集成微信支付

  • 鉴于微信支付的文档入口不太容易找到、以及文档中有些逻辑不通或者容易产生歧义或者缺失一些信息的情况,记录下此次接入的流程和需要关注的一些点。

  • 使用的是app支付-> APP支付产品介绍

    首先阅读介绍等,了解一些基础的概念和建立共识,大体的在脑中组织微信支付的框架。

  • APP支付接入前准备

    注册申请id等。需要Android程序员提供的信息或者前提条件:

    1. 包名和签名(小写md5字符串,通过keytool或者jeb等逆向软件或者微信提供的apk获取)。
    2. 目前是2023/1/18,可能是从22年开始app必须先上架应用商店,才能申请微信支付。
  • 支付后端程序员可参考:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay-1.shtml。

APP支付开发指引

  • 参考:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_5_2.shtml。但是这个文档中没有详细的接入Android sdk的部分,多是介绍服务端、iOS、Android下单的这个过程。

  • Android sdk接入指南 核心如下:

集成sdk

  • Android studio添加Maven Central仓库,引用sdk:‘com.tencent.mm.opensdk:wechat-sdk-android:+’。未找到明确的说明wechat-sdk-android-without-mta等一些版本的区别。
  • studio提示替换成版本号,但是根据提示替换后只是把"+“号给去掉了,反而引用不到sdk了。又不确定是否当前本地的就是最新版本,所以也没有填入具体版本号(可以通过Project Structure->Dependencis查询最新版本号)。找官方文档也是指定用”+"号:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/Android.html。(这个studio的警告可以忽略,只是提醒如果指定加号会自动获取最新版本,可能产生版本依赖的问题。)
  • 查看本地的C:\Users\xx.gradle\caches\modules-2\files-2.1\com.tencent.mm.opensdk\wechat-sdk-android\6.8.18\xmd5\wechat-sdk-android-6.8.18.aar:


    带了proguard.txt,应该不用再手动配置混淆了。studio查看的不显示proguard.txt,但看混淆后的mapping文件,应该是引用了proguard.txt,即混淆配置了、生效了,不需要手动配置。

    但是比官方文档中的混淆配置少了"com.tencent.mm.sdk":
-keep class com.tencent.mm.sdk.** {*;
}

不确定是文档较久还是微信的程序员配置漏了。

调用sdk发起请求(支付、分享等基本类似)

  • 第一步是注册到微信:其中的动态注册广播的意义不明,也未查询到详细的介绍,暂时未注册广播。

       // APP_ID 替换为你的应用从官方网站申请到的合法appID
    private static final String APP_ID = "wx88888888";// IWXAPI 是第三方 app 和微信通信的 openApi 接口
    private IWXAPI api;private regToWx() {// 通过 WXAPIFactory 工厂,获取 IWXAPI 的实例api = WXAPIFactory.createWXAPI(this, APP_ID, true);// 将应用的 appId 注册到微信api.registerApp(APP_ID);//建议动态监听微信启动广播进行注册到微信registerReceiver(new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {// 将该 app 注册到微信api.registerApp(Constants.APP_ID);}}, new IntentFilter(ConstantsAPI.ACTION_REFRESH_WXAPP));}
    
  • 需要自己添加xml适配支持Android11启动微信(描述的很模糊,不确定targetSdkVersion 30指的是微信还是app还是二者皆是,所以保险起见必须适配了)。

    <!-- 微信sdk用于Android11及targetSdkVersion>=30, --><queries><package android:name="com.tencent.mm" /></queries>
    
  • 文档中发起请求的例子是分享,所以我把支付请求放在下面,先写接收微信回调的请求(接收微信的请求及返回值),这部分也是分享、支付是共用的。

    <activityandroid:name=".wxapi.WXEntryActivity"android:label="@string/app_name"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:exported="true"android:taskAffinity="填写你的包名"android:launchMode="singleTask">
    </activity>
    

    其中的name必须是:包名+.wxapi.WXEntryActivity,taskAffinity也必须是包名(此项未测试,猜测是必须)。否则不会触发回调。WXEntryActivity(demo中没有设置setContentView,即没有布局文件。且onResp和onReq最后都主动调用了finish。)实现IWXAPIEventHandler接口,但是好像只会触发回调onResp,不会触发onReq(暂不确定,因为没有走完完成的支付流程,只是打开微信后返回,触发了-2:用户取消的事件)。

    可以参考demo:https://developers.weixin.qq.com/doc/oplatform/Downloads/Android_Resource.html,页面中的点击下载:https://res.wx.qq.com/op_res/dl_hmdniBHBL1Jh2zHwHaZ-FM8YE9hTH6H6U7NKwbshR0QSgb7vH5aL4zwhtGqEt

  • SDK拉起支付:根据https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_5_2.shtml#part-6。

    IWXAPI api;PayReq request = new PayReq();request.appId = "wxd930ea5d5a258f4f";request.partnerId = "1900000109";request.prepayId= "1101000000140415649af9fc314aa427",;request.packageValue = "Sign=WXPay";request.nonceStr= "1101000000140429eb40476f8896f4c9";request.timeStamp= "1398746574";request.sign= "7FFECB600D7157C5AA49810D2D8F28BC2811827B";api.sendReq(request);
    
    • api通过上面的注册到微信获取。所需的参数通过调用服务端(由后端调用微信支付的api生成订单:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_1.shtml,后端再返回给app订单数据)提供的接口获取。

    • 参数的说明见:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_4.shtml。

    • 支付成功、失败、取消支付会回调WXEntryActivity(实现IWXAPIEventHandler接口)的onResp,回调中errCode值列表:

      名称 描述 解决方案
      0 成功 展示成功页面
      -1 错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
      -2 用户取消 无需处理。发生场景:用户不支付了,点击取消,返回APP。
    • 不能以上面的回调值作为真正支付成功的凭据,需要服务端确定是否成功并通知客户端。

Android app集成微信支付相关推荐

  1. 微信小程序、app集成微信支付

    一.微信小程序支付 开发文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_11&index=2 申请小程序 ...

  2. Android app集成支付宝支付

    支付宝支付 其实是比较简单的,但因为发起订单总是失败,经过各种测试.排除,最终确定是服务端返回数据有误造成的.所以严格来说支付宝文档等没有什么问题,问题在于后端程序员不认真看文档和测试. 申请id需要 ...

  3. iOS集成微信支付--Swift

    微信支付在微信红包的推动发展势头越来越猛,甚至有超过支付宝的趋势,那么在App集成微信支付也是比不可少了.我最近在一个项目中集成微信支付遇到了不少问题,Google了不少资料才搞定,不得不吐槽一下微信 ...

  4. Android集成微信支付之-天坑

    项目集成微信支付,折腾了三天左右,坑太多,做个简单记录 开通和主要原理不再讲了,参考微信支付官网 截个官网的业务流程图,下面好说明 1 支付结果回调(图中的17步) 支付结果回调,微信官方的说法是: ...

  5. android微信迁移数据,【CSDN博客迁移】Android集成微信支付之-天坑

    项目集成微信支付,折腾了三天左右,坑太多,做个简单记录 开通和主要原理不再讲了,参考微信支付官网 截个官网的业务流程图,下面好说明 微信支付业务流程.png 1 支付结果回调(图中的17步) 支付结果 ...

  6. Android集成微信支付

    Android集成微信支付 项目中集成第三方支付的功能,基本是我们app中经常用到的功能.今天先给大家讲一下微信支付的集成过程,重点只说一下代码部分.首先,你要到微信开发者平台注册账号,并创建你的应用 ...

  7. Android 集成微信支付和支付宝支付工具类

    Android 集成微信支付和支付宝支付工具类 1.前言 去年年底接了一个商城app 外包项目,里面尼涉及到 微信和支付宝支付,这里我整理出几个工具类,下面就和大家分享一下,废话不多说,下面我一步一步 ...

  8. android微信支付插件,React Native集成微信支付【Android】

    wechat.jpg 本次博客主要讲解主要在RN中集成微信支付以及被我踩平的坑,需要一定的原生集成经验! 一. 导入微信SDK 用Android Studio打开RN项目中的android部分,在ap ...

  9. android快速集成微信分享支付

    前言 最近公司的项目中有又又又又微信分享和支付的功能,每次我都会重新集成,为了方便以后的开发,以及方便各位同仁的开发,整合了这次开发的一些点滴,方便亲们快速集成微信分享和支付. 参考文档 –1.微信官 ...

最新文章

  1. 【Oracle】查找每期数据都存在的产品
  2. JAVA抽象类为什么可以有构造_抽象类为什么可以有构造函数?- Constructor of an abstract class in C#(转载)...
  3. docker之container
  4. html 页面工具,html页面工具-htmlUnit
  5. NEERC13 Problem H.Hack Protection
  6. Qt文档阅读笔记-Transformations解析及例子
  7. sed基本用法 sed文本块处理 、 sed高级应用
  8. leetcode之53.最大子序和
  9. OCS2007标准版服务器部署
  10. 几个 h5页面效果和 自动 app 生成网站 微页
  11. 苹果手机充电口接触不良怎么办_用了HOU吼猴3C数码配件让手机充电口不再接触不良...
  12. linux下搭建阿帕奇服务器
  13. 虚拟机ruc_sched Self-detected stall on cpu{4}(t=60001)
  14. lilo是什么意思_Lilo
  15. 用Python写了个工具,完美破解了MySQL!!(建议收藏)
  16. 电阻、电容、电感及其阻抗、容抗、感抗概念回顾
  17. OpenCV色彩空间类型
  18. JavaScript 中的设计模式
  19. 什么是泊松分布?什么是泊松过程?
  20. 信号与系统中冲激函数匹配法怎么理解

热门文章

  1. 抖音直播怎么做?新人直播不冷场的十二技巧
  2. 区块链入门-带你搞懂区块链-熊丽兵-专题视频课程
  3. 《数据结构》(C++)之第一章:绪论
  4. 单片机与一般微型计算机区别,单片机与普通微型计算机的不同之处
  5. 小汽车每年有哪些手续要办
  6. 青龙面板——抖抖健身 脚本+超详细教程
  7. 现在的00后,真是卷死了呀,辞职信准备好了·····
  8. 涨知识!光伏扶贫4种项目类型和8种开展模式
  9. 当AI遇上展会——全息世界的又一“现在进行时”
  10. Canon EOS350D/EOS300D/EOS20D规格比较