小程序支付流程图说明(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. C# 通过DataSet 获取SQL 存储过程返回的多个结果集(tables)

    测试数据:Northwind 链接地址: https://files.cnblogs.com/files/louiszh/NorthWind.zip 首先创建一个测试存储过程: IF EXISTS ( ...

  2. IO系列测试源码

    //IO系列测试源码(需要自取) using System; using System.CodeDom; using System.Collections.Generic; using System. ...

  3. LINQ之方法语法

    上节讲到使用linq的查询关键字进行查询,这节讲一下linq查询的另一种方式--linq方法. 使用linq方法语法,必须要会用lambda表达式,配合lambda表达式才能体会到linq的优雅便捷. ...

  4. Smss.exe加载win32k.sys过程总结

    windows操作系统初始化 windows操作系统再初始化的过程中,当内核完全初始化而且各个组件也已经准备好后会加载一个个用户进程smss.exe(会话管理器),此进程会接着调用NtSetSyste ...

  5. 发现数据结构与算法之美的第n次重新学习 ——— 初遇数据结构与算法(了解)

    你的数据结构怎么学的?提起数据结构,计算机与软件,it行业内无人不知,无人不晓.但是,当你真正的去通过数据结构与算法内容去实践内容时,真的能联系起来吗?那肯定的 不管是考研还是做项目,数据结构都是必学 ...

  6. ART-TEMPLATE的核心语法

    模板引擎语法 核心方法 // 基于模板名渲染模板 template(filename, data); // 将模板源代码编译成函数 template.compile(source, options); ...

  7. gdb 调试,当发现程序退出,需要定位程序退出位置时。

    在进入gdb后设置,执行下面语句 handle SIGSEGV nopass handle SIGSEGV nostop 执行程序,触发问题,gdb侧执行c 故障出现时,执行bt,显示堆栈调用.

  8. Linux_LVM管理

    一.Ivm的应用场景及其弊端 1.应用场景: 随着公司的发展,数据增长较快,最初规划的磁盘容量不够用了 2.弊端: 数据不是直接存放在硬盘上,而是在硬盘的.上面又虚拟出来--层逻辑卷存放数据,故而增加 ...

  9. BogoMips 和cpu主频无关 不等于cpu频率

    http://tinylab.org/explore-linux-bogomips/ 内核探索:Linux BogoMips 探秘 Tao HongLiang 创作于 2015/05/12 打赏 By ...

  10. python基础之面向对象(一)(概念、实例、魔法方法)

    一.面向对象概念理解 1.面向对象和面向过程 面向过程:核心过程二字,过程即解决问题的步骤,就是先干什么后干什么 基于该思想写程序就好比在这是一条流水线,是一种机械式的思维方式 优点:复杂的过程流程化 ...