1、实体对应关系:
Application(包括appId,秘钥) — OneToMany — PaymentOrder(支付记录实体):(订单系统生成的订单号,订单商品信息,金额,返回订单系统的url,微信、支付宝服务器主动通知商户服务器里指定的url等) — OneToMany — PaymentRecord(支付记录详情):记录支付类型(wepay、alipay),客户端类型(普通浏览器、微信浏览器),客户端ip、通知信息等
2、流程
1、生成订单选择支付类型
2、支付宝:PC端、手机端、扫码;微信:微信公众号支付、扫码支付、H5支付。
客户端版本(Browser-Agent):MicroMessenger(微信浏览器)、AliApp、Mobile或iPad、PC
3、对于微信中
3.1、支付需要用户授权获取openId
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
通过拦截器拦截微信中的请求来获取openId放入cookie中时效5分钟,openId为空时进行授权,通过code换取网页授权access_token获取openId,
redirect_uri到授权回调设置cookie中openid的值时效5分钟,Redirect到请求页面,完成授权。
3.2、下单之前先检查是否完成交易
3.3、生成签名:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3,可利用treemap自然排序,封装成xml参数,
MD5方式签名
调用下单接口:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
获取PREPAY_ID,存放在redis缓存中,时效2小时,过期重新下单霍如PREPAY_ID
3.4、H5调起微信支付的内置JS
3.5、定时回调接收通知
3.6、JSAPI流程:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4
3.7、可参考:https://www.cnblogs.com/yimiyan/p/5603657.html
3.支付API
https工具:https://github.com/kevinsawicki/http-request
微信api:https://pay.weixin.qq.com/wiki/doc/api/index.html
支付宝api:https://docs.open.alipay.com/270/105899/
支付宝老接口:https://docs.open.alipay.com/62/104743/