php网站集成支付宝接口微信支付V3sdk封装了与业务错误语义不一致的现象支付宝网站集成支付宝
2021-11-23
根据微信v3的接口文档,我们知道微信支付返回业务错误时,会返回相应的。当状态码在[200,300)之间时,认为请求合法返回;当大于300时,判断接口返回一定有异常错误。微信支付V3 sdk封装了和的相关处理。
在对外暴露http接口时,在抛出业务错误的同时,也必须抛出同样的语义,这就需要开发者搞清楚语义。这样做的缺点是学习成本高,而且根据开发人员的熟练程度,可能会出现语义和业务错误语义不一致的情况。
2. 支付宝错误码定义
参考链接:
不同服务的业务错误代码:举一个接口的例子#%E4%B8%9A%E5%8A%A1%E9%94%99%E8%AF%AF%E7%A0%81
, 这两个参数标识支付宝返回的业务错误代码和业务错误信息;
{"code":"",//网关返回码"msg":"",//网关返回码"":"ACQ.","":"无效参数"}
支付宝的错误码定义与微信支付v2界面定义风格类似。
支付宝错误码结构分为两级:第一级:网关,第二级:业务错误码。
要请求支付宝接口,首先要通过支付宝网关系统。网关系统执行签名验证、加解密、流量控制等功能。如果发生网关验证错误,则会抛出公共错误代码。网关验证成功后,交给下游业务系统,并带有清晰的语义错误代码和错误描述。
3. API 规范
参考链接:%E9%94%99%E8%AF%AF.md
在错误码的定义中,返回码的结构定义为
{// 可以通过的代码。// 代码是由`.rpc.Code` 编写的。代码 = 1; // A--输入。它 // 和它。= 2; // 代码可用于 // 的php网站集成支付宝接口,例如或帮助链接。..任何= 3;}
其中code:是错误代码,而:是具体的错误信息。根据错误,建议调用方采取什么措施。
错误码的定义比较简洁。一个代码分配给一个主要类别;不为多个相似的错误类型提供多个代码。
规范中的信息:指明错误的具体原因,定义参考:
定义该信息表示可以返回错误码进行重试,并给出推荐的重试延迟时间,该信息表示配额错误、超过限流等;可以详细解释为什么会报这个错误等,等待开发者根据详细的错误返回码做出正确的响应。
4. 微博规范
参考接口:
{"": "//.json", "": "", "": "需要 uid。"}
错误码的组成:1位错误级别号(系统、服务)+2位服务模块(如网关、微博、评测、私信更像是服务标识)+2位错误码(自定义错误码)
服务级别错误(1 是系统级别错误)服务模块代码特定错误代码
微博的错误代码具有清晰的结构和语义。服务系统标识显示在错误代码中。这个操作有点类似于支付宝错误码的组成。第一个数字标识服务级别和系统级别字段。不知道是不是网关抛出的错误,还是分类抛出了几个系统级的错误。
5.阿里巴巴的JAVA技术手册
阿里巴巴规范
第一点:解释错误码的特点:简单明了;
第二点:错误码最好定义为字符串类型:源+错误号(这样错误码的值可以携带更多的信息)
第三点:避免随意添加错误代码,避免直接将错误代码暴露给用户端
综上所述,从这些被调查企业的外部文件来看,业界并没有统一的错误代码定义标准。但一般的设计思路如下:
一种。错误码类型为字符串类型
湾 如果系统由网关→内部服务组成,错误代码分为两级
C。错误代码可以识别引发错误的源服务。
d. 错误码可以抽象出两种常见的错误码和业务错误码
四、思考与结论
结合以上调查的行业错误代码定义和钱包系统的现状。由于支付系统处于整个业务流程的最基础层,并提供支付、支付等RPC能力,因此不存在直接对外暴露http接口的可能。因此,微信支付和支付宝支付的三层错误码结构不适合钱包系统。
基于以上调查的api,错误码定义为字符串类型,更适合业务场景,方便后期业务扩展。规范中对错误码场景定义的统一规范,在一定程度上降低了开发者随意定义新的错误码的可能性。所以在场景定义上参考-api规范
错误代码:字符串。前N位是当前业务领域的标识。优点:易于区分其他业务错误代码。如果由于业务扩展或业务收缩导致业务拆分和合并php网站集成支付宝接口,错误代码仍可保持当前设置。
提取常见的常见错误:
参考采集规范:
RPC 接口常见错误 内部错误 115 请求不被支持 112 状态错误 110 频繁请求 109 无权限类型错误 108 权限检查错误 107 现有类型错误 106 不存在类型错误 105 超时类型错误 104 参数错误 103 未知错误
(比如调用下游接口出错,可以抛出这个异常) 101
对于其他业务错误代码,可以使用200~999错误段进行自定义设置;但是如果有错误语义碰到了上面的错误小程序开发,则需要先选择上面的错误代码。
五、RPC 错误代码结构定义
{1:; 2:;}
错误代码定义:
组成:业务+错误代码类型+自定义业务代码;自定义业务代码为系统自定义。
标识服务错误代码的类型(3)自定义服务代码(2)
参数验证失败:{"":".", "":" does not " }:表示当前错误发生时正在处理的业务标识 105:不存在 01:交易不存在 02:用户存在不存在 03:订单不存在...
2.:错误信息
错误信息开发人员可以快速定位问题。
3. 必须抛出错误
如果接口处理出现错误,将相应的错误代码和错误描述打包输出,而不是将错误包装在接口返回参数中。因为公司使用的是-http协议,监控告警强烈依赖直接抛出错误,监控可以更有效的监控RPC接口,避免处理错误,但是返回200。