小程序支付流程图说明(UNIAPP+第三方SDK:binarywang)

说明:小程序为UNI-APP开发,使用的第三方微信支付SDK为binarywang提供的,此SDK对微信公众号、小程序、微信各种类型的支付、企业微信的相关对接接口都有很好的全面集成,是应用得比较多的一款优秀的SDK。

如图为各个服务相互调用的过程,后续有步骤说明

流程图步骤说明

1、用户在小程序中触发了支付申请(如:点击了付款按钮,唤起微信支付页面,非扫码支付)

2、UNIAPP发起支付申请

用户在小程序(UNIAPP开发)上主动发起了一个向商家支付的申请后,调用UNIAPP的uni.log(obj)方法(无论是否是点击后调用还是点击前调用,均可以根据实际情况来决定,此处只是为了方便流程的讲解),其中参数类型与返回值说明如下图:

参考:https://uniapp.dcloud.io/api/plugins/login




在返回值中,我们得到了临时登录凭证code(只能使用一次),我们便可以根据code来获取用户的openId,由此我们可以获取得到了用户的小程序的openId。

参考:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html

3、调用自己的服务创建预支付单

如流程图中的步骤三创建预支付单的接口:gql.createWxPayOrdercode(code, orderId: 1000, trandeType: "JSAPI"),其中code为获取用户小程序的openId的临时凭证,即上一步所获得的code,orderId为自己业务的参数,trandeType为固定值JSAPI(JSAPI支付或小程序支付)。当然此值也可以在后台固定,此处只是为了提示此支付类型。



参考:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_2

4、调用自己的服务创建预支付单

在我们自己定义的接口的做相应的业务校验处理,准备好参数后,调用SDK中创建预支付单的接口wxPayService.createOrder

5、SDK调用微信小程序生单接口

在SDK中会调用微信小程序的生意接口,也就是原生的微信支付接口,在生单接口中有一个参数notify_url,此参数是微信服务器将用户的支付结果回传给我们时调用的url,即此url是我们自己服务对外暴露的url。

参考:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1


6、微信小程序将返回的结果返回给SDK

7、SDK将微信小程序返回的结果进行封装加密成唤起微信支付页面所需要的参数

在原生的微信小程序生单接口中,返回参数需要再次的根据相应的规则进行加密后,才能调用API唤起微信支付页面



但是在SDK中,SDK将此加密转换的过程已经帮我们做了,它返回的是已经处理好了的参数,所以我们在前面直接使用这些返回的结果就OK了。

参考:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5

8、9、创建预支付单的接口返回给小程序,唤起微信支付

在我们的小程序中接收到创建预支付单的接口返回值后,便可调用UNIAPP中的uni.requestPayment(OBJECT)方法来响起微信支付,我这边是这样调用的:result为后台返回的结果



参考:https://uniapp.dcloud.io/api/plugins/payment

10、用户支付完成,调用自己服务接口

用户支付完成后,可以根据实际情况更新自己的业务信息

11、用户支付完成,微信服务器的结果回传

当用户支付完成后,微信服务器会调用生单接口中参数notify_url的值进行结果的回传。此notify_url为我们系统对外暴露的url。我们在此url对应的接口中做相对应的支付结果业务处理。

参考:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_7&index=8

为了更好的理解,SDK提供了一个微信支付的DEMO,大家可去clone下来更方便的理解。

小程序微信支付(UNIAPP+第三方SDK:binarywang)的更多相关文章

  1. 微信小程序 微信支付

    微信小程序前端自处理: //时间戳 timeStamp() { return parseInt(new Date().getTime() / 1000) + '' }, //随机数 randomStr ...

  2. 微信小程序------微信支付模块

    最近项目涉及到小程序开发:需要进行微信支付模块,接下来通过叙述,记录一下微信小程序中微信支付模块的开发,以便日后翻阅和使用. 学习指南----------微信支付开发文档:https://pay.we ...

  3. TP5调用小程序微信支付,回调,在待支付中再次调用微信支付

    1,必须要有 $mch_id $key $appid这三个值,是需要去申请的,我是直接用公司的2,购买商品订单号用户openid统一下单名称商品价格(必须以分为单位,调起微信支付)服务器的ip地址(没 ...

  4. 微信小程序——微信支付

    这个讲起来也就比较麻烦一点,因为需要的不仅仅是咱们代码上的技术,嘿嘿! 先整理一下思路.如果想做微信支付: 1.现有一个公司账户(非个人账户),并且实名认证过的. 2.微信号 必须开通微信支付功能. ...

  5. 微信小程序微信支付的一些坑

    使用的是Node.js作为后端 统一下单: appid:这里的appid是调起微信支付的appid mch_id:商户号,需要注意的是商户号要与appid对应 nonce_str:Math.rando ...

  6. 微信小程序微信支付流程

    1.小程序调用wx.login获取登录凭证code wx.login(无请求参数)返回code(有效期5分钟) wx.login({ success:function(res){ //get res. ...

  7. .NET开发微信小程序-微信支付

    前台MD5加密代码 /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algor ...

  8. Taro/JS/H5/小程序:纯前端解决小程序微信支付统一下单和调起支付

    这个文章不会说具体0到1的代码流程,我会着重讲几个问题的解决 准备以下依赖 "md5": "^2.2.1", "xml-js": " ...

  9. Java实现小程序微信支付

    小程序支付流程交互图: 进入小程序,下单,请求下单支付,调用小程序登录API来获取Openid,生成商户订单 // pages/pay/pay.js var app = getApp(); Page( ...

随机推荐

  1. [CSP-J2019 江西] 道路拆除 题解

    发现大家都是将路径拆成三条链来做,这里提供一种暴力的乱搞方法. 思路 看到这一道题的第一想法就是跑最短路.可是仔细想想就发现,由于重合的路径只算一遍,所以导致两条最短路不一定是最优解. 接着,看到数据 ...

  2. 解决上传文件大小限制 PHP+Apache

    1.设置Apache文件大小上传限制 http.conf文件(apache/config目录下)添加如下设置(1G=1024*1024*1024): FcgidMaxRequestLen  53687 ...

  3. Java前后端分离的认识

    1.原由 在网上查了关于前后端分离的资料,有所粗浅认识.记录下来,方便以后使用.以下均是个人看法,仅做参考.如有错误请指教,共同进步. 2.为什么前后端分离? ①.一个后台,可以让多种前台系统使用.后 ...

  4. 【opencv】Java+eclipse+opencv 环境搭建 helloword入门demo

    文章为博主原创,纯属个人理解,如有错误欢迎指出. 如需转载,请注明出处. 引入jar包 引入配置文件 到此环境配置完成!!! 可能会出现的问题: 1. jdk版本不一致导致发生异常.如图 build ...

  5. 一、unittest介绍与基础使用

    一.unittest为单元测试框架,系统标准库 import unittest

  6. 脱壳入门----脱ASPack壳保护的DLL

    前言 结合脱dll壳的基本思路,对看雪加密解密里的一个ASPack壳保护的dll进行脱壳分析. 脱壳详细过程 寻找程序的OEP 先将目标DLL拖入OD,来到壳的入口处. 然后利用堆栈平衡原理在push ...

  7. Java并发-线程池篇-附场景分析

    作者:汤圆 个人博客:javalover.cc 前言 前面我们在创建线程时,都是直接new Thread(): 这样短期来看是没有问题的,但是一旦业务量增长,线程数过多,就有可能导致内存异常OOM,C ...

  8. .Net平台的GC垃圾回收

    一.先了解下必备的知识前提 内存中的托管与非托管,可简单理解为: 托管:可借助GC从内存中释放的数据对象(以下要描述的内容点) 非托管:必须手工借助Dispose释放资源(实现自IDisposable ...

  9. 桌面支持qt版本是多少检查

    桌面支持qt版本是多少 # rpm -qa |grep qt |grep 3 |sortqt3-3.3.8b-60.nd7.2.x86_64qt-4.8.6-13.nd7.3.x86_64qt5-qt ...

  10. Ubuntu 16.04 配置单网卡绑定多IP

    Ubuntu 16.04 配置单网卡绑定多IP 操作系统 Ubuntu 16.04 LTS 一.单个网卡配置多个IP //在 /etc/network/ 目录下编辑 interfaces 文件 roo ...