做支付、订单相关功能时的注意点

不确定的一定要采取保守策略,不可以直接设置最终态。

  1. 调用第三方支付接口时,若出现网络异常,则记为「处理中」,而不是「处理失败」;
  2. 查询订单失败时,不能作为「交易失败」;
  3. 使用第三方服务时,确保「幂等」下才可重试;(如流水号可以确保幂等时,可以通过流水号不变来重试)
  4. 较短时间内查询第三方订单不存在或失败时,不能想当然认为订单失败,可能是第三方还没处理结束,要延长处理频次或人为干预,确保自己系统的健壮性;
  5. 后端防重时,可以采用有限状态机模式(数据库乐观锁+白名单);
  6. 状态尽量是单向流转(如已完成的订单,不可再变更为处理中)。

简言之,不确定的一定要采取保守策略,不可以直接设置最终态。

微信开发_curl_errno_58错误

在使用微信支付API时,若curl返回的错误代码为58,一般与SSL安全策略有关。使用curl时,需指定使用SSL高版本参数信息:

注意,使用以上信息要求,php版本不低于5.2,curl版本不低于7.21

参考:

https://mp.weixin.qq.com/cgi-bin/announce?action=getannouncement&key=1414562353&version=11&lang=zh_CN

https://binsee.github.io/wechat-php-sdk/2014/201411032325/