支付简单来说就是服务端集成相应的SDK,微信支付宝都有对应不同服务端语言的SDK代码,修改的只有少部分参数,然后定义需要的参数接口暴露给前端。用户点击下单以后,后端接收前端的参数,如用户id(一般支付从token获取),商品id的集合等创建订单。价格一般是后端自己计算,并且需要使用bigdecima类型避免金额精度损失。然后服务端开启定时任务,一般30分钟,若用户未支付,定时任务会关闭该订单。
接着是支付,用户下单以后点击支付,后端会根据对应的订单id调用SDK接口,获取对应的url返回给前端,前端打开对应的url网页,微信支付宝会和后端建立socket,实时返回用户的支付情况,支付成功后会调用配置好的回调url,此时支付完成,前端第三方的支付网页自动重定向到之前配置的回调url,后端会在支付成功的钩子函数拿到提示,修改订单的支付状态,此时支付完成。
现在很多网站都是二维码付款,二维码网页一般自己提供,此时需要前后端建立websocket(ajax轮巡一般不采用),在用户支付完成后关闭该网页。
- 沙箱环境初始化配置
- 支付请求发起
- 支付回调处理
商品浏览 > 添加购物车 > 结算 > 计算商品总价 > 生成订单 > 选择支付方式 > 支付成功回调
- 用户在客户端提交订单 向服务器端发送请求
- 服务器返回支付地址,引导客户端跳转到支付地址
- 用户支付
- 支付成功,支付宝重定向到服务端预设的客户端地址,通知用户支付结果。 同时支付宝向服务端发送 post 请求ÿ