android 集成微信小程序支付

之前公司让集成微信小程序支付,过去得有一个月了,今天想了想还是记录一下吧,万一哪天有用到了呢

在此之前咱们先引用别人文章里的官网文档要装作自己很认真的样子

  1. 微信小程序开发步骤:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3&index=1
  2. 微信小程序API: https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-pay.html#wxrequestpaymentobject
  3. 微信小程序业务流程: https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_4&index=2
  4. 微信小程序统一下单:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1
  5. 微信小程序签名生成算法:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_3
  6. 微信小程序签名校验:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1

其实在我看来哪有那么复杂,安排--

像咱们如果集成原生或者h5支付的时候,大家都是会拿到一个商品的 ServiceId 也就是商品的服务id来像后台发起请求,获取订单信息,比如说原生咱们拿到ServiceId接着像后台发起请求,得到的返回值有很多,像 price 、 orderInfo 、 paySource 、 ServiceName 等等,个人建议微信小程序的订单调起参数也在这个接口里获取,这样可以做到后台任意切换 原生 - h5 - 小程序支付 , 我这里是在这个接口里返回了一个type,当type == 1 原生 ,type == 2 h5 ,type == 3 小程序,

先看文档,一会我会吧文档放在文末,需要的朋友可以去下载看一下

android 集成微信小程序支付_第1张图片

android 集成微信小程序支付_第2张图片

由此可看到其实我们如果掉起支付的话需要三个参数

  1. appId : 这个参数是需要我们调起支付前初始化激活用的
  2. userName:这个解释就是小程序的原始id,什么意思呢,其实需要的并不是咱们当前配置微信原生支付的这个包名的签名,需要的是你要调起微信小程序的这个包名的app,并且这个app已经关联了小程序,需要的是这个关联的小程序的id,一句话其实就是你们关联微信小程序的包名的的这个产品她关联的那个小程序的id,不知道有没有解释清楚(重点:包名一定要和微信支付关联小程序的包名一定要一致)
  3. path:这个其实和orderInfo是一个意义的,就是用来调起小程序的

那咱们就来说一下这个 path 的格式

android 集成微信小程序支付_第3张图片

至于加密的话我这是在后台进行的base64加密,推荐在后台加密

       //app跳转小程序支付
    public void presentToMiniProgram(final String wxappid, final String path, String originId) {
        // startActivity(new Intent(PayActivity.this, WXEntryActivity.class));
        // AppConst.WEIXIN.APP_ID是指你应用在微信开放平台上的AppID,记得替换。
        api = WXAPIFactory.createWXAPI(BaseApplication.getGlobalContext(), wxappid);

        WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req();
        req.userName = originId;// 填小程序原始id
        req.path = "page/component/confirm/index?" + path;//拉起小程序页面的可带参路径,不填默认拉起小程
        req.miniprogramType = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE;//可选打开 开发版,体验版和正式版
        api.sendReq(req);
    }

我这里后台返回的只是后面的那串加密的数据

data=eyJhbW91bnQ iO iIxMDAiLCJtY2hfaWQ iO iIxMDAwMDAwMDAxMjMiLCJyZXR1cm 5fdXJsIjoiaHR0cHM6XC9cL3d3dy54eHguY29tIiwicGF5bWV udF90eXBlIjoidHJhZGUud2VpeGluLm FwcCIsIm 5vbm NlX3N0ciI6IjI3NjY4NiIsIm lzX3JhdyI6I jAiLCJub3RpZnlfdXJsIjoiaHR0cHM6XC9cL3d3dy54eHguY29tIiwic3BiaWxsX2NyZWF0ZV9pcCI 6IjEyNy4wLjAuMSIsIm JvZHkiO iJ4eHh4Iiwic2lnbiI6IjVhYm I1Nm Y3ZTg0MTI2ZjRiZGEyZjk3Y WE2O WQ 2MDZkIiwib3V0X3RyYWRlX25vIjoiMTgxMjE4MTQ 0NjIxMDIxMjY3Mjc0Mzk0NiJ9&info=e yJtY2hfbm FtZSI6IuaUtuasvuWVhuaIt%2BWQ jeensCJ9"

然后自己拼接的path

req.path = "page/component/confirm/index?" + path;//拉起小程序页面的可带参路径,不填默认拉起小程

版本的话可以

android 集成微信小程序支付_第4张图片

其实主要的是在WXEntryActivity里面,进行的回调,在onReq方法里,这里我把我的代码贴出来你们参考一下:

android 集成微信小程序支付_第5张图片

if (baseResp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) {
            WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) baseResp;
            String extraData = launchMiniProResp.extMsg; //对应小程序组件 

这是微信小程序的主要回调代码,至于这个EventBus作用就是因为这个回调是否支付成功这个事情前端没办法进行控制,后台又提供不了回调,所以图二求其次,直接写了个弹窗,在微信小程序调起的时候,让他弹个窗口,形式呢就是这种,大家可以参考一下:

android 集成微信小程序支付_第6张图片

让用户手动选择是否支付成功,这个弹窗是在PayActivity里面接收的.

还有就是配置清单文件了,AndroidMainfest.xml文件

文档里给出要在WXPayEntryActivity配置,这里我贴出自己的配置信息大家参考一下:

         

到这里其实就已经集成完了,没错你没有听错事集成完了,就是这么简单,主要的操作其实还是在服务端和哪些来配置关联小程序的人那里咱们要做的操作其实本身就没有多少,也有可能我给忘了点毕竟过去好久了,如果又问题大家可以留言我再补全(谢谢体谅)

问题

遇到的问题:

  1. 跳转失败
  2. 点击支付不跳转到支付页面

其实这两个问题都很好解决,第一个问题主要就是包名不一致,第二个问题其实就是合作方的问题

这是文档的下载地址:App跳转小程序文档 (提取码: iygz )

差不多就这么多吧,谢谢

你可能感兴趣的:(android 集成微信小程序支付)