签名校验参数

当您在对接24好玩平台的接口时,为了确保数据传输的安全,我们会对所有接口的请求都加上签名。

您可以在24好玩官网的高级设置中获取到对应用户的 appid 和 appsecret,如下图 2-1 所示。如果您的账号下没有高级设置 ,请联系24好玩的客服,咨询开通事宜。

图2-1

示例

例如,您在24好玩的高级设置中,添加了【查询第三方优惠券列表】的接口。那么当需要展示您的优惠券列表时,24好玩将会调用您设置的接口,示例如下:

POST https://example.com/api/coupons

我们会以 Content-Type: application/json 的方式带上以下【查询第三方优惠券列表】所约定的参数:

{
    "page": 1,    // 页码,在【查询第三方优惠券列表】中所约定
    "page_size": 10,    // 每页所显示的数量,在【查询第三方优惠券列表】中所约定
    "sign": "xxxxxx"    // 24好玩加上的签名,在所有开放接口中都会加上
}

其中的 sign 参数,就是24好玩加上的签名,目的是为了让请求数据无法伪造。

当您接收到这个请求时

您就可以通过 sign 参数来校验这个请求的合法性,示例如下:

// 为了展示原理的目的,这里以 Node.js 编写一个函数处理【查询第三方优惠券列表】请求

function getCoupons(req, res) {
    const { page, page_size, sign } = req.body

    // 1. 将业务参数(除了 sign 以外的参数)进行字符串拼接
    // 重点:
    //    a. 顺序是对参数的 key 进行 ASCII 升序,例如,是 abc + acc,而不是 acc + abc
    //    b. 是参数数组字的value 进行字符串拼接,如果是 number 类型的参数,需要转换成字符串
    let verifyString = '' + page + pageSize

    // 2. 从步骤 1 获得的字符串,需要再加上您从 24好玩 平台获得的 APP SECRET
    verifyString += APP_SECRET

    // 3. 对步骤 2 获得的字符存进行 md5 运算
    const mySign = md5(verifyString)

    if (mySign === sign) {
        // 验证成功!
    } else {
        // 验证失败!
    }
}

results matching ""

    No results matching ""