支付简单来说就是服务端集成相应的SDK,微信支付宝都有对应不同服务端语言的SDK代码,修改的只有少部分参数,然后定义需要的参数接口暴露给前端。用户点击下单以后,后端接收前端的参数,如用户id(一般支付从token获取),商品id的集合等创建订单。价格一般是后端自己计算,并且需要使用bigdecima类型避免金额精度损失。然后服务端开启定时任务,一般30分钟,若用户未支付,定时任务会关闭该订单。
接着是支付,用户下单以后点击支付,后端会根据对应的订单id调用SDK接口,获取对应的url返回给前端,前端打开对应的url网页,微信支付宝会和后端建立socket,实时返回用户的支付情况,支付成功后会调用配置好的回调url,此时支付完成,前端第三方的支付网页自动重定向到之前配置的回调url,后端会在支付成功的钩子函数拿到提示,修改订单的支付状态,此时支付完成。
现在很多网站都是二维码付款,二维码网页一般自己提供,此时需要前后端建立websocket(ajax轮巡一般不采用),在用户支付完成后关闭该网页。
- 沙箱环境初始化配置
- 支付请求发起
- 支付回调处理
商品浏览 > 添加购物车 > 结算 > 计算商品总价 > 生成订单 > 选择支付方式 > 支付成功回调
- 用户在客户端提交订单 向服务器端发送请求
- 服务器返回支付地址,引导客户端跳转到支付地址
- 用户支付
- 支付成功,支付宝重定向到服务端预设的客户端地址,通知用户支付结果。 同时支付宝向服务端发送 post 请求(请求地址是提前设置好的)告诉服务器当前支付结果 ,服务端创建订单,根据支付结果修改订单状态(未支付、已支付)
支付宝流程
支付流程:先去调后台服务的支付接口,传递支付宝和服务端所需参数,服务端会返回一个支付宝支付页面链接,然后前端跳转到链接进行支付,支付完成支付宝会自动跳转到服务端定好的前端指定页面,支付即完成。
在用户在浏览器点击进入支付过程按钮后,会向网站服务器发送一个带有相关信息的请求,然后服务器会将订单所需要的信息和支付完成后跳转回来的地址一同向支付宝的服务器发送一个请求,然后会得到一个可以用来打开支付页面的url 地址。接着网站服务器会将这个url 地址返回给浏览器,此时浏览器就可以跳转到这个支付页面的支付宝的 url,待到支付完成后,支付宝的支付页面会跳转到之前服务器告知的返回页面,这样就又会回到自己的网站了。浏览器跳转回自己网站的同时,支付宝的服务器还会向网站服务器发送一个post请求,服务器接受到这个 post 请求就可以对订单状态进行处理了。
a. 客户端点击购买, 向服务端发送请求, 并入参相应参数
b. 服务端根据接收的信息, 校验通过后, 向支付宝下单, 并获取支付地址, 将该地址传回客户端
c. 客户端获取地址后, 跳转到该支付地址
d. 该地址为支付宝的地址, 在操作登录后(如果未登录), 支付订单
e. 支付宝收到支付请求, 校验通过后, 向服务端发送支付成功的通知, 服务端修改相应订单内容, 支付宝通知客户端支付成功
f. 客户端展示支付成功界面, 尔后跳转到购物车界面
- 触发提交流程
- 传入 支付宝接口要求的必填参数
- 传入 服务器端要求的必填业务参数
- 输入账号密码等待支付宝完成支付并显示支付结果
- 返回支付结果的url
- 在项目中定义alipay url 对应的页面组件
- 提交订单订单的时候,需要传入Alipay相关的参数(订单总金额、订单标题、订单描述)和内部创建订单需要的参数(商品ID和数量、收获地址、用户ID)
- 使用Alipay提供的sdk,获取支付链接
- 使用支付宝支付完成后,客户端回跳到自己的支付成功页,同时会异步通知服务端用户已支付成功
- 服务端调用Alipay的sdk验签接口,如果验证通过,开始创建订单,写入数据库
1、传递 订单标题 订单金额 订单描述 产品信息 收货地址和当前创建人参数,获取支付地址 2、拿到收货地址后使用 window.location.href 进行跳转
3、输入支付宝用户名密码登录后输入支付密码支付,支付成功后跳转到设置好的支付成功页面
注意:支付宝支付接口不支持本地调试
————————————————
版权声明:本文为CSDN博主「大唐荣华」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_40599109/article/details/114643539