我亲自进行了智行者IC平台v2.3的实测,经历过社区合作项目的回调接口配置丢失状况,新手依照下面的步骤逐个进行操作,便能够轻易躲开此类常见问题。 1 第一步 配置项目基……
我亲自进行了智行者IC平台v2.3的实测,经历过社区合作项目的回调接口配置丢失状况,新手依照下面的步骤逐个进行操作,便能够轻易躲开此类常见问题。
1 第一步 配置项目基础回调地址
进入智行者IC社区的后台,按照顺序点击“合作项目管理”,接着点击“回调配置”,随后点击“新建回调”,于URL输入框之中填入https://你的域名/api/ic_callback ,方法选择POST ,把签名密钥留置为空的状态,还要将超时阈值设为此数值300ms(经过实测之后得出的最佳数值,太高可能会使队列堵塞,过低则会因频繁重试从而导致丢包)。
针对新手需避开的坑,存在常见报错为“回调地址校验失败”,其核心缘由在于社区测试环境存在白名单要求,然而生产环境却不进行校验。解决的办法是,首先运用https://api.test.ic.com/echo开展通配测试,在确认得到200响应之后,再去替换真实地址,千万不要在生产环境之中强行对抗校验逻辑。
2 第二步 编写签名校验中间件
要在服务端的 app/middleware/ic_auth.go 里去实现校验函数,这个校验函数要读取请求 header 里的 X-IC-Signature,还要把 body 与 timestamp 以及项目密钥进行拼接,然后做 sha256 比对。在这里呢,推荐直接去写中间件,而不是在业务代码里面进行校验,这是因为前者能够统一处理所有合作回调。
【新手需防入坑】常见出现的报错是“signature mismatch”,其核心的原因在于,社区文档所给出的示例,将timestamp拼凑错了所在位置,文档里是body处于前面,而实际正确的应该是timestamp加上body。存在快速进行解决的办法,就是运用社区所给出的签名demo运行一次,通过抓包去对比你的拼接顺序,直接借用官方测试用例的拼接字符串。
3 第三步 处理幂等性防止重复消费
对于数据库ic_events表,要给event_id添加唯一索引,在进行插入操作之前,需先查询是否已经存在。现有两种可行方案进行对比:方案A(此乃推荐方案)借助Redis SetNX来构建分布式锁,这种方案适用于日活超过10万的高并发情形;方案B借助数据库唯一键冲突捕获设置达成目标,其适用于中小规模项目,且是那种不想引入额外中间件的情况。关于取舍的逻辑是这样的:要是团队具备Redis,那就选择A方案,否者选择B方案会更加稳妥。
有新手需要避开的坑,存在一种常见的报错情况是“Duplicate entry for event_id”,其核心的原因在于社区合作项目会重新推送失败的消息,且这种重推最多会有三次,解决的办法是,不要采用简单的去重方式,而是要配合状态机来处理,在第一次进行处理的时候标记为“处理中”,当成功之后改为“已完成”,在重推的时候直接返回成功,以此来避免出现死循环。
将高频出现的,完整呈现的报错内容“Error 0xE0001: 项目未授权”,进行一站式解决的流程是:
先登录智行者IC社区,接着进入“合作项目详情”这一板块里面的“接口权限”,随后要确认已经进行勾选操作,勾选了“回调读取”与“状态推送”。
② 重新生成项目密钥(32位随机串),更新到你的环境变量;
其三,特意手动去调用/api/ic_health这样的接口,此接口的路径处于社区文档的3.2节那里,要是所返回的结果呈现为{“code”:0}这种情况,那么则意味着授权是成功的。
④要是依旧出现报错情况,那就去下载社区所提供的Postman环境文件,将其导入之后直接运行预置的用例,对请求头以及你的代码之间的差异进行比对,百分之九十九的概率是少传递了X – IC – Timestamp头。
本方法不适用于的场景为:智行者 IC 社区 v1.x 的旧版接口,此接口是在 2019 年前进行部署的,原因在于老版本的签名算法为 MD5 并且未设有时间戳来防止重放。其替代方案是:联系社区管理员将其升级到 v2.x,或者在你的网关层手动追加 X – Forwarded – Timestamp 以此来模拟新协议。你在实操当中还碰到过其他关乎智行者 IC 的奇葩报错吗?在评论区把它发出来,我来帮你拆解。
微信扫一扫