课程名称:SpringBoot+Vue3 项目实战,打造企业级在线办公系统
课程章节: 用户管理模块
课程讲师: 神思者
课程内容
微信支付有很多种形式,调用的API接口也不相同。现在做的是Web版本的在线办公系统,所以就得使用Web版本的微信支付API接口。这里我们用的是微信支付里面的Native支付,就是网站生成支付二维码,然后用户在手机上面用微信扫码付款。
商品订单是我们本地系统生成的。由于我们做的不是电商系统,所以本地的商品订单其实就是罚款单,用户要为这笔罚款付钱。支付订单是微信服务器生成的,我们调用API接口,传入参数就能创建支付订单了。
每个支付订单都有唯一的ID值,将来我们查询这笔付款是否支付成功,就会用到支付订单的ID作为查询条件。另外,商品订单ID在我们的项目中也必须要唯一。例如我们用某个商品订单ID创建支付订单,第一次可以成功创建支付订单,但是你再用这个重复的商品订单ID创建支付订单,微信服务器就会报错,因为这个商品订单ID已经用过一次了,这一点大家要切记。
付款过程
用户拿微信扫描网站生成的二维码,并不是直接扣款。因为用户信不过卖家。假如商品订单金额是100元,但是卖家的系统调用微信平台接口,创建了一个1000元的支付订单。如果用户在微信上不核实付款金额和内容的话,就被商家骗走了900元钱。
所以当用户拿手机扫描二维码之后,自动访问微信平台,然后查询支付订单的详情(收款方、支付金额、订单备注等等),如果用户确认没有问题,就可以在手机上输入支付密码了。这个付款请求不是发给卖家的(怕卖家篡改支付金额),而是直接发送给微信平台的。微信平台先核对请求内容,然后执行扣款,最后把付款结果分别发送给商家的后端系统和付款人。
确认付款
创建支付订单的时候,其中的参数就包含了商户系统的接收付款结果的URL地址,微信服务器会向这个URL地址发送付款结果。但是万事万物总有个特殊情况,万一微信服务器的消息队列宕机了,没能向商家的系统发送付款结果,那么商家系统中的订单状态就依然是未付款的状态。当然了,商家系统没能接收到付款通知的原因有很多,例如短暂的网络故障,程序错误等原因。