美文网首页
如何提供更安全的支付服务

如何提供更安全的支付服务

作者: ithankzc | 来源:发表于2019-08-14 23:32 被阅读0次

以下为支付服务设计过程中,自己思考及借鉴所记【完善中】

幂等性

对于可能存在的并发支付回调,实际更新支付结果应只有一次,这个可以通过加数据锁的方式去实现。和第三方支付系统交互。对外的 商户订单号是衔接起两边服务的桥梁。

分布式锁

加锁时机

第三方支付触发回调接口时,将 商户订单号 拼接特定的前缀如pay:${out_order_no} 作为key,如果当前有锁,根据实际业务情况选择等待或者抛异常,而没锁的情况下,则加锁后进行业务逻辑操作

锁的释放

由于支付逻辑及网络的不可确定性,需考虑加锁后对锁的释放

  • 出现异常时应该释放锁
  • 超出一定时间后主动释放锁

数据锁

事实上付款单的更新场景并不多,可以在 事务内 select for update , 然后再 update 。 只有在事务提交或者回滚的情况下,后面新的更新操作才能进行。

回调结果验证

以下验证通过后,才能更新支付状态及订单状态

  • 验证回调参数签名
  • 验证回调付款金额与订单金额是否一致
  • 验证回调收款账号是否与支付时收款账号一致
  • 验证应用id是否为支付时应用

支付状态不可逆

  • 待付款 → 支付成功
  • 待付款 → 关闭支付

相关文章

网友评论

      本文标题:如何提供更安全的支付服务

      本文链接:https://www.haomeiwen.com/subject/oslrjctx.html