支付宝对接【手机网页支付】:
- 1.回跳地址可以是内网,return_url不需要携带自定义拼接参数,回跳成功返回示例:
https://www.baidu.com/?a=1&charset=UTF-8&out_trade_no=625025472840859648&method=alipay.trade.wap.pay.return&total_amount=0.01&sign=EY%2FehLjyBgfz6tRXGBc7jynPp7uE7krSSZqg94%2FZAG%2FtGHWwZV4JSR83AXUM1sMr6x%2BS8J0Z2JdyrxF%2FDQN%2FEmXypAN%2B3%2FluQZrDYfwkhKDh9UMxceOovVeeI7CSaxvD%2FOqTVRaBAk2Xcghpw1%2Bj4I7vUVw0P0RqXqn6v5z5QggfZf0vDufWjyL0Mkqqli7fi7GVuFeaGgKtldk%2FuRgX3JfYooAuOC8fWkKsRdyEqon7w7ch%2FOTjPQLmN%2F%2FnizRAn0g3j7MyRta9yUUj37YjYSzUog1hRHW13DxVIXRWkU5Whn1hq4IvwGECN7T1fa2GM87ewRmZGkDGOxQHQGPkMg%3D%3D&trade_no=2019092122001475810545501203&auth_app_id=2019090466887800&version=1.0&app_id=2019090466887800&sign_type=RSA2&seller_id=2088631212955538×tamp=2019-09-21+17%3A48%3A18
注意点:
-
1.支付接口预处理,检查订单状态,订单防重,防止重复支付
- 防重:
- 1.mysql唯一索引
- 2.利用redis的原子性实现分布式锁 将orderID作为key,setnx成功这进行insert/update
- 防重:
-
2.支付状态回调要注意的点:
-
1)使用支付宝公钥验证签名,(公私钥交互的目的就是保证消息数据不可被篡改,保证数据的安全性)
-
2)验证订单号,回调的订单号是否为商户创建的订单号
-
3)验证订单号金额
-
4)验证seller_id是否为订单号对应的操作方、appid等
-
-
3.订单补偿,使用延迟队列关闭未支付的订单以及对支付成功但用户未补充完成的信息进行退款,对退款失败和关闭失败的订单进行补偿