微信小程序支付篇
我们尽量用简单直白的内容,最快速的解决小程序支付的问题;
初期的配置这里不做赘述,请配置服务器域名到微信支付、小程序的业务等域名中;
- 小程序框架:uni-app + vscode
- 服务端框架:spring-boot + wx 官方java sdk
小程序部分代码非常简单:
服务端内容:
依赖最新版本的 V3 SDK;
初始化配置项:(因为小程序是 JSAPI 下单方式,所以这里引入了相关包以及类;如果是其他方式,请直接查看源码目录下其他文件夹即可。
编写接口
小程序支付的具体代码内容只有上述,非常简单;但是我们在真正使用的时候,踩到了很多坑;比如证书格式、参数传递、回调解密等等。非常感谢网络上有大量分享内容的作者。
接下来是关于小程序登录的一些细节,如果您已经可以获取 OpenId 可以省略这一段内容。
小程序端首先需获取 code ,将该 code 传递给后端,后端请求微信服务器即可正常获得小程序 openId;由于我们使用了uni-app,所以这里直接使用 uni-app 提供的获取 code 办法;
服务端代码也比较简单,首先我们需要增加一个开源框架:版本号可以到 maven central 中加载最新。
使用恰当的开源框架可以避免重复造轮子,因为大部分的坑作者已经踩过,我们没必要浪费时间去踩。学会站在巨人的肩膀上同样是一件非常重要的事。当然,这个前提是,恰当的开源框架。
不恰当通常包括:过时、不维护、开源协议不符合公司要求、等等 当然有的时候,恰当的开源框架也让人非常的恼火,比如 alibaba-fastjson 经常有漏洞升级的事情,我们已经做了上百次了。
好了,祝你幸福。
Spring Boot中的微信支付(小程序)
微信支付是企业级项目中经常使用到的功能,作为后端开发人员,完整地掌握该技术是十分有必要的。
logo
图1-1
- 注册微信支付账号
- 获取微信小程序APPID
- 获取微信商家的商户ID
- 获取微信商家的API私钥
- 配置微信支付回调地址
- 绑定微信小程序和微信支付的关系
- 搭建SpringBoot工程编写后台支付接口
- 发布部署接口服务项目
- 使用微信小程序或者UniAPP调用微信支付功能
- 支付接口的封装
- 配置jwt或者openid的token派发
- 原生微信小程序完成支付对接
商家或者企业想要通过微信支付来进行商品的销售,必须先通过微信平台(pay.weixin.qq.com)去将商家进行注册。注册成功后将会有商户信息等界面,包括商家的账户信息、企业信息等等。如图2-1所示:
图2-1
商户id是项目开发中的唯一标识,是微信支付给予每个商户或者企业的唯一id。也是客户(消费者)在拉起微信支付时的凭据之一,在图2-1中的“微信支付商户号”就是商户id。
在注册商户成功后,同样在微信平台(pay.weixin.qq.com)可以对API私钥进行设置。如图3-1所示:
图3-1
API私钥也称为支付密钥,商户id和API密钥是用户拉起微信支付时后台所必须获取的。
商户可以根据需要签约微信支付的产品,主要包括有:
- JSAPI支付:商户通过调用微信支付提供的JSAPI接口,在支付场景中调起微信支付模块完成收款;
- Native支付:商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式;
- 小程序支付:通过好友分享或扫描二维码在微信内打开小程序时,可以调用微信支付完成下单购买的流程;
- 付款码支付:用户出示微信钱包中的条码、二维码,商家通过扫描用户条码即可完成收款;
- 刷脸支付:用户在集成微信刷脸支付SDK的线下机具上\”刷脸\”即可完成支付。
如图4-1所示:
图4-1
支付回调地址是微信支付服务器返回给用户支付信息(通知)的地址。如果商户签约的是微信小程序产品,那么支付回调地址可以配置也可以不进行配置。该地址为公司的域名,或者不加以配置。
首先要登录申请官网进行微信小程序的注册:https://mp.weixin.qq.com/,如图6-1所示:
图6-1
注册成功后即可获得小程序唯一的APPID。如图6-2所示:
图6-2
在微信支付平台对APPID进行绑定即可。如图7-1所示:
图7-1
- 首先创建一个初始化SpringBoot项目;
- 在项目/模块的resources文件夹下,编写properties/yml配置文件;
- 配置文件中需隔离dev环境与prod环境;
- 配置文件中还包括了server、数据库、spring、token、日志、时区、json格式、mybatis-plus、swagger、redis、服务器配置、微信小程序配置(包括支付相关)等等全局统一配置。
- 项目基本架构(SSM:Spring+SpringMVC+MyBatis)
- controller后端接口,与前端数据交互
- config云服务器配置Swagger配置接口(路由)微信支付配置(引入微信相关服务)
- commonconstantenumsAjaxresultBaseControllerBaseEntityPage(Page与Table返回参数)
- domain接口与页面所需参数(DTO、entity、req、res、VO等)
- mappermapper文件接口(SQL方法定义)
- serviceService:承接Controller层的接口方法定义Impl(接口实现类):接口的具体实现逻辑
- utils文件工具类Json工具类时间格式工具类第三方登录工具类
用户首先需要在小程序端进行微信用户登录授权,需调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台帐号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台帐号)及本次登录的会话密钥(session_key)等。
具体的登录流程如图8-1所示:
图8-1
此时调用服务端接口,请求参数如图8-2所示:
图8-2
用户登录后的返回参数,如图8-3所示:
图8-3
用户登录小程序后,在小程序页面拉起支付请求时,会调用统一的下单接口。
在拉起支付请求时,下单接口参数需要两部分:一是商户、小程序相关的openid,appid等,二是需要商品相关的价格,名称,数量等参数。
以下将用代码来对微信支付接口做详细的讲解,代码以REST风格API接口的形式编写。
统一下单接口
创建订单接口
用户可以在商品页面对某个商品进行下单,此时需要创建该用户购买某个商品的订单。
该过程主要是通过接口去请求用户信息、商品信息等参数,经过逻辑判断(是否存在已购买的订单)后创建(数据库插入相关信息)新的订单,最后返回该订单的所需数据。
取消订单接口
当用户拉起微信支付时,如果在付款界面点击×取消付款(但此时订单已经创建),则该操作视为取消订单支付,同时在订单页面应当显示此时该订单的支付状态。
该接口可以通过订单id来作为请求参数,首先判断数据库中是否存在该订单信息,接着对可以取消支付的订单类型进行限制,最后更新数据库表(订单、商品和声明周期)状态。
订单详情接口
当订单生成后,用户可以在页面查看该商品订单的详情。
该接口通过订单id即可从数据库获取详情信息,而该页面展示的数据由业务需求确定。
订单详情逻辑
微信支付回调是用户在对商品进行支付操作后,将数据发送至微信服务器,微信服务器再将支付的结果返回(通知)给用户和商家的过程。
其中,主要关注的是用户支付-微信回调判断-修改数据库这个过程。
支付回调接口
其中,notifyOrder方法的作用是在支付成功后在数据库更新订单的状态。
notifyOrder(SysOrders sysOrders)方法
至此,Spring Boot中的微信支付全过程已经分享完成。如有不足,望大家指正。
文章来自https://www.cnblogs.com/Apluemxa/p/16315443.html
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。