月底就要离职走人了。在这个公司包括实习期的话也干了将近一年半了。
好歹也算是一年工作经验了,下次面试的话应该也是问项目经验居多。
准备近期先将自己自己做过的东西详细整理一下,方便到时候书写简历以及应对面试。
刚到公司的时候,接触的是公司的一个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
这个链接中主要包含了三个参数:、
这个链接可以帮助我们调起手机微信app然后跳转到redirect_uri,也就是授权回调接口。
https://xxx.com/api/v1/pay/hook
微信 OAuth2.0 授权登录系统是调用很多微信功能所必须经历的流程,这里不细说AppID,AppSecret,code,access_token等值的意义,看下图吧。
根据上一个链接,微信打开后会调用我们的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
最后附上支付宝和微信的支付流程时序图
欢迎访问我的个人小站:我爱吃土豆