为了统一相关得微信支付渠道,需要做一个封装,可以随意更换其他支付商户得系统支付封装。所以需要做相关得兼容配置,然后使用同一套得需要去处理相关得支付。
关于不同得微信支付商户得,主要需要自己配置相关得微信商户得信息,根据传入自定义得AppID来区分即可。
主要得问题集中点是关于微信得H5和微信公众得封装处理。因为支付得唤起需要再统一得域名下唤起才可以,所以相关得左右的支付唤起需要做一个中间层来进行唤起。
H5的封装流程:
1)中间层(微信支付授权的域名下)接口的封装
1:订单生成的接口,传入AppID,和入口需要回调的前端地址(用于回调通知处理)
2:根据AppID读取相关的微信商户配置信息
3:提交微信接口,生成相关的订单和返回相关的微信H5支付地址,记录到订单记录中,此步骤需要注意传比如H5中的回调地址是中间层的回调地址,当微信回调此地址之后,用于处理服务端自动302回调到入口曾传入的回调地址
4:返回中间层封装好的H5入口的地址,或者当组装好H5地址后,服务端自己重定向到中间曾的入口地址(用于中间层访问接口地址之后,返回微信的H5支付地址)
5:中间层里通过接口请求,然后服务端重定向到微信的支付地址(解决页面的前段页面关闭的问题)
6:用户支付或取消,微信会回调到步骤3中传入的回调地址。此时服务端处理后,自动得把相关得信息处理好会回调到入口层得传入得回调地址
公众号封装流程:
1)中间层(微信支付授权的域名下)接口的封装
1:订单生成的接口,传入AppID,和入口需要回调的前端地址(用于回调通知处理)
2:根据AppID读取相关的微信商户配置信息
3:提交微信接口,生成相关的订单和返回相关的微信公众号支付信息,此步骤中需要传入相关得异步通知结果地址,告诉服务支付结果,再返回相关得支付信息得同时,我们返回给中间层一个入口得地址
4:入口层通过3步骤中地址,请求会返回相关的支付信息(不管错误与否都,服务端再存在到openid的情况下,都返回openid)
5:中间层里通过接口请求,判断本地是否缓存有opendi,没有opendi就访问获取微信授权地址(分静默授权,和弹窗授权处理),如果有openid就直接走通过openid下单得地址,返回支付信息
6:同通过访问授权地址后回调到入口地址,客户入口层,判断是否携带code,提交通过code下单得地址返回支付信息
7:中间层客户端根据返回得支付信息通过微信js唤起微信支付
6:用户支付或取消,微信实时回调客户端内,然后客户端通过返回token提交服务端,服务端自动重定向到入口层得地址