前言

月底就要离职走人了。在这个公司包括实习期的话也干了将近一年半了。

好歹也算是一年工作经验了,下次面试的话应该也是问项目经验居多。

准备近期先将自己自己做过的东西详细整理一下,方便到时候书写简历以及应对面试。

支付业务

刚到公司的时候,接触的是公司的一个B2B2C电商项目。当时的销售途径是售货机,支付的话流程基本成型,后来需求增加,新增手机商城,使用H5实现,H5支付这一块就落到了我的手上,支付的业务大同小异,我就去研究之前前辈写的支付业务,加上H5支付的文档,将手机商城的支付做了出来。

只要流程业务以及一些细节能说清楚,我说支付就是我自己做的,面试官应该也不会介意吧。下面我们开始这个业务的分析。

其中的准备工作就不说了,比如申请授权什么的大家可以自行查阅资料。

业务流程

下面的图大概体现出了一个支付业务在前端的基本操作流程,以及对应后端的接口调用情况。

支付业务流程

这么一看不算复杂,不过到代码层面的话,还是有很多细节问题要去研究

接口分析

我们这里把后端的接口思路分析一下,看看每个接口里干了些什么事。

一、预下单接口

https://xxx.com/api/v1/pay/pre-order

预下单中不同的项目可能处理的业务有所不同,但最基本的业务还是要有的:

校验订单数据
商品库存预售
保存订单数据

我们的项目中由于涉及业务较多,那么其他的业务处理就也多一些:

用户会员卡价格处理
商品相关优惠活动价格梳理
订单分成处理(B2B2C)
购物车支付删除相关商品

二、后台支付接口

https://xxx.com/api/v1/pay/root?orderId=001

获取支付二维码以及支付调整链接中存储的链接都是这个支付接口,接口参数是预下单生成订单信息的订单号。

1.根据订单号获得完整订单信息

2.查询系统配置的支付配置(微信、支付宝、银联)

这里以微信支付为例,主要是获取配置的appid

3.拼接调起微信后的链接返回

api1:https://open.weixin.qq.com/connect/oauth2/authorize?appid=appId&redirect_uri=https://xxx.com/api/v1/pay/hook?response_type=code&scope=snsapi_base&state=orderId

这个链接中主要包含了三个参数:、

  1. appId
  2. redirect_uri
  3. orderId

这个链接可以帮助我们调起手机微信app然后跳转到redirect_uri,也就是授权回调接口。

三、授权回调接口

https://xxx.com/api/v1/pay/hook

微信 OAuth2.0 授权登录系统是调用很多微信功能所必须经历的流程,这里不细说AppID,AppSecret,code,access_token等值的意义,看下图吧。

微信 OAuth2.0 授权登录系统

根据上一个链接,微信打开后会调用我们的redirect_uri中再多返回code值,然后根据配置的appId、appSecret以及code,我们可以获取到微信授权结果的openId,不成功则授权失败。

api2:https://api.weixin.qq.com/sns/oauth2/access_token?appid=myappId&secret=SECRET&code=xxcodexx&grant_type=authorization_code

有了openId,接口就会返回一个链接,一个我们自己自定义的H5支付页面,可以使用微信客户端自带的JS:WeixinJSBridge,调用我们的预支付接口。

四、预支付接口

https://xxx.com/api/v1/pay/wx-pay

此接口中的业务还是比较复杂的,必须看着接口文档写,写错一个参数名或者传错一个参数都是无法成功的。
其中有一个参数就是notify_url,是我们的支付回调接口,就是支付成功后支付宝异步调用的我们的这个回调接口。

1.生成签名
2.生成预支付xml数据
3.调用预付单api

api3:https://api.mch.weixin.qq.com/pay/unifiedorder

4.重新生成签名
5.封装返回结果

返回到页面之后微信可以判断支付成功与否或者取消支付!

五、支付回调接口

https://xxx.com/api/v1/pay/hook/wx

这个接口中的业务也比较多,毕竟支付成功后很多的数据都要发生改变。

1.回调参数解析
2.回调参数校验

a.回调状态是否为SUCCESS
b.签名是否为空,签名验证
c.订单号是否为空

3.修改数据

订单:支付状态、支付渠道、支付时间、取货码
商品:售出库存

4.统计订单数据
5.通知设备或者前端页面

六、退款接口

最后还有一个退款接口,退款的话也有很多参数细节需要注意,不能有误。
还需要配置cert证书

api4:https://api.mch.weixin.qq.com/secapi/pay/refund

最后附上支付宝和微信的支付流程时序图

微信支付流程时序图

微信支付流程时序图

支付宝支付流程时序图

支付宝支付流程时序图

Last modification:June 12th, 2020 at 04:42 pm
如果觉得我的文章对你有用,请随意赞赏
评论打卡也可以哦,您的鼓励是我最大的动力!