美文网首页
如何设计一个对外的回调接口

如何设计一个对外的回调接口

作者: 飨宴 | 来源:发表于2020-03-06 18:53 被阅读0次

引言

最近的工作中涉及到第三方对接,用户在第三方的平台进行某些操作后,第三方会通过我们提供的回调接口来通知我们,然后我们再进行一些业务上的处理,比如奖励发放等。通过这边文章总结自己设计回调接口的一些思路。

接口设计

1、请求方式

为了方便扩展以及参数上的考虑,请求方式为 POST,Content-Type 为 application/json

2、参数定义

下面列举一些必要的请求参数:

参数 类型 说明
requestId String 请求ID,第三方自定义,每次请求唯一,用于幂等性处理
userId String 用户id
appKey String 媒体公钥
timestamp Long 用于签名的时间戳,毫秒
sign String 签名,32位小写,MD5(requestId + userId + appKey + appSecret + timestamp)
ext JSONObject 额外参数,方便后续扩展

注:用于签名的 appKey 和 appSecret 通过其他方式给到第三方,appKey 和 appSecret 一一对应。

3、接口设计

参数校验

对参数进行非空判断和其他校验,过滤无效的请求

时效限制

将 timestamp 与当前时间进行判断,超过 5 分钟则不处理该请求。该限制主要出于安全上的考虑。

签名校验

对部分参数使用哈希算法计算出签名,其中 appSecret 为公开的媒体私钥,和 appKey 一一对应。通过验签过滤无效或者非法的请求。

可以使用 MD5 以外的其他哈希算法。
签名参数可以先排序再哈希。

幂等性

为了避免第三方重复调用,或者用户以非正常方式重复触发请求,需要对请求进行幂等性处理,确保多次请求的结果一致。

在 Redis 中设计 key 和 value 用来保存每次请求的 requestId。每次请求判断 Redis 中是否存在对应的 key,如果存在则拒绝当前请求,否则保存本次请求的 requestId。

根据具体业务对多次请求的情况进行处理,避免重复请求导致异常,比如奖励超发等。

错误码

针对不同的异常情况设计合理的错误码和错误信息,并通过接口返回。能够提高第三方对接效率,并且能够针对部分异常情况进行特殊处理,比如重发请求等。

4、示例代码

PHP

<?php
$request_id = $_POST['requestId'];
$user_id = $_POST['userId'];
$sign = $_POST['sign'];
$app_key = $_POST['appKey'];
$timestamp = $_POST['timestamp'];

// 参数校验,略

// 时效性验证
if (time() * 1000 - $timestamp > 300000) {
    $arr = array('code' => '-1', 'msg' => '时效性验证失败');
    echo json_encode($arr);
    exit();
}

// 从数据库查询 appKey 对应的 appSecret
$app_secret = '';

// 签名验证
$str = $request_id . $user_id . $app_key . $app_secret . $timestamp;
if (empty($sign) || md5($str) != $sign) {
    $arr = array('code' => '-2', 'msg' => '验签失败');
    echo json_encode($arr);
    exit();
}

// TODO 业务实现及异常处理

$arr = array('code' => '0', 'msg' => '成功');
echo json_encode($arr);
?>

相关文章

  • 如何设计一个对外的回调接口

    引言 最近的工作中涉及到第三方对接,用户在第三方的平台进行某些操作后,第三方会通过我们提供的回调接口来通知我们,然...

  • Kotlin使用接口回调

    1.Java中的接口回调实现(支持多方法回调) 声明回调接口,初始化接口 使用接口回调(无参数) 使用接口回调(带...

  • Java回调深入理解

    1 接口回调 1.1 接口回调概念 什么是接口回调接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声...

  • java设计——接口回调

    一、什么是接口回调 网络上有很多关于接口回调技术的文章,但是看来看去,都是一些专业术语,这指针那指针的,初学者要看...

  • Java接口处理以及异常处理

    接口在Andriod中的应用 回调函数:事件监听 Asdl...... 框架设计 框架设计的时候 接口处理 -声明...

  • Android Module之间数据传递

    方法一:使用接口回调 (1)在子module创建回调接口(参数可变) (2)在子module 实现类设置接口回调 ...

  • python 闭包

    python 闭包 回调函数的应用场景 一般来说设计好回调接口后,很难对接口进行修改。 1.调用框架是其他人实现的...

  • 接口回调

    接口回调 对于初学者接口回调是一个很难理解的方法,当初我理解就是煞费苦心,后来参悟一篇博客才有所理解,把接口回调比...

  • Android接口回调

    之前对接口回调一直有点模糊,会写但是理解的不透彻,今天记录一下自己理解的回调是什么。 接口回调是什么? 接口回调是...

  • Springboot实战系列之@Autowired注入类的lis

    一个回调接口有多种回调逻辑,在项目启动时需要将回调接口的实现类都放到一个list中然后回调每个实现类的具体方法。在...

网友评论

      本文标题:如何设计一个对外的回调接口

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