接口鉴权

乘云API会对每个访问请求进行身份验证,即每个请求都需要在公共请求参数中包含签名信息(Signature)以验证请求者身份。

签名信息由安全凭证生成,安全凭证包括 AppId 和 AppSecret;若你还没有安全凭证,请前往乘云小程序管理后台申请,否则无法调用乘云API接口。

1. 申请安全凭证

在第一次使用乘云API之前,请前往乘云小程序管理后台开放平台页面申请安全凭证。

安全凭证包括 AppId 和 AppSecret:

AppId 用于标识 API 调用者身份

AppSecret 用于加密签名串和服务器端验证签名字符串的秘钥。

注意:你必须严格保管好安全凭证,避免泄露!

申请安全凭证的具体步骤如下:

1)登录乘云小程序后台

2)前往系统设置 > 开放平台页面

3)在开放平台页面,点击【添加APP】即可以创建一对AppId / AppSecret

目前各个小程序最多可以拥有4对AppId / AppSecret。

2. 生成签名串

有了安全凭证 AppId 和 AppSecret 后,就可以生成签名串了,以下是生成签名串的详细过程:

假设你的 AppId 和 AppSecret 分别是:

AppId: tc_5a93848f4e8b4

AppSecret: 92a739662d8e0cd0df8c4f70f61919ae

注意:这里只是示例,请根据您实际申请的AppId和AppSecret进行后续操作!

查看商品列表(admin/goods/goodsList)接口为例,当用户调用这一接口时,其请求的参数可能如下:

参数名称 描述 参数值
AppId 公共参数:AppId tc_5a93848f4e8b4
Timestamp 公共参数:当前时间戳 1519696701
Nonce 公共参数:随机正整数 112233
pageIndex 请求参数:分页(页号) 1
pageSize 请求参数:分页(页长) 10
status 请求参数:商品状态 待上架#已上架#已下架
promote 请求参数:商品促销活动类型 秒杀#拼团#砍价#无促销

由上表可以看出,发送的参数中的公共参数只有3个:AppId、Timestamp 和 Nonce,而不是在 公共参数页面 中所述的4个,事实上,第4个参数 Signature(签名串)正是由其他参数(包括API名称)共同生成的,具体步骤如下:

2.1. 对参数排序

首先对所有请求的参数按参数名做字典序升序排列,所谓字典序升序排列,直观上就如同在字典中排列单词一样排序,按照字母表或数字表里递增顺序的排列次序,即先考虑第一个“字母”,在相同的情况下考虑第二个“字母”,依此类推。您可以借助编程语言中的相关排序函数来实现这一功能,如php中的ksort函数。上述示例参数的排序结果如下:

{
    "AppId": "tc_5a93848f4e8b4",
    "Nonce": 112233,
    "Timestamp": 1519696701,
    "pageIndex": 1,
    "pageSize": 10,
    "promote": "秒杀#拼团#砍价#无促销",
    "status": "待上架#已上架#已下架"
}

使用其它程序设计语言开发时, 可对上面示例中的参数进行排序,得到的结果一致即可。

2.2. 拼接请求字符串

此步骤生成请求字符串。

将把上一步排序好的请求参数格式化成“参数名称”=“参数值”的形式,如对pageIndex参数,其参数名称为"pageIndex",参数值为1,因此格式化后就为pageIndex=1。

注意:1、“参数值”为原始值而非url编码后的值。2、若输入参数中包含下划线,则需要将其转换为“.”。

然后将格式化后的各个参数用"&"拼接在一起,最终生成的请求字符串为:

AppId=tc_5a93848f4e8b4&Nonce=112233&Timestamp=1519696701&pageIndex=1&pageSize=10&promote=秒杀#拼团#砍价#无促销&status=待上架#已上架#已下架

2.3. 拼接签名原文字符串

此步骤生成签名原文字符串。

签名原文字符串由以下两个参数构成:

1)API名称:比如示例中的查看商品列表(admin/goods/goodsList)。

2)请求字符串:即上一步生成的请求字符串。

签名原文字符串的拼接规则为:

API名称 + ? + 请求字符串

示例的拼接结果为:

admin/goods/goodsList?AppId=tc_5a93848f4e8b4&Nonce=112233&Timestamp=1519696701&pageIndex=1&pageSize=10&promote=秒杀#拼团#砍价#无促销&status=待上架#已上架#已下架

2.4. 生成签名串

此步骤生成签名串。

首先使用 HMAC-SHA1 算法对上一步中获得的签名原文字符串进行签,然后将生成的签名串使用 Base64 进行编码,即可获得最终的签名串。

具体代码如下,以 PHP 语言为例:

$appSecret = '92a739662d8e0cd0df8c4f70f61919ae';
$srcStr = 'admin/goods/goodsList?AppId=tc_5a93848f4e8b4&Nonce=112233&Timestamp=1519696701&pageIndex=1&pageSize=10&promote=秒杀#拼团#砍价#无促销&status=待上架#已上架#已下架';
$signStr = base64_encode(hash_hmac('sha1', $srcStr, $appSecret, true));
echo $signStr;

最终得到的签名串为:

vx5d3KGOSD6HvGzOQ15WsBnIXAY=

使用其它程序设计语言开发时, 可用上面示例中的原文进行签名验证, 得到的签名串与例子中的一致即可。

3. 签名串编码

生成的签名串并不能直接作为请求参数,需要对其进行 URL 编码。

注意:如果用户的请求方法是GET,则对所有请求参数值均需要做URL编码。

如上一步生成的签名串为vx5d3KGOSD6HvGzOQ15WsBnIXAY=,则其编码后为vx5d3KGOSD6HvGzOQ15WsBnIXAY%3D。因此,最终得到的签名串请求参数(Signature)为:vx5d3KGOSD6HvGzOQ15WsBnIXAY%3D,它将用于生成最终的请求URL。

4. 鉴权失败

根据实际情况,存在以下鉴权失败的错误码,请根据实际情况处理

错误代码 错误类型 错误描述
-4101 鉴权失败 调用接口不在可访问列表内,可调用接口请参见 API概览
-4102 鉴权失败 公共参数不完整,完整公共参数请参见 公共参数
-4103 鉴权失败 appId不合法,该AppId无效或者已被删除,请参见乘云小程序管理后台 > 开放平台
-4104 鉴权失败 签名串比对错误,签名串生成规则见上文或者请求可能被劫持!
-4105 鉴权失败 非法调用,每个请求只允许被使用一次!如需再次请求,请重新生成公共参数以及签名串。
Copyright © 2017 Takecloud Inc.上海微庚信息科技有限公司 all right reserved,powered by Gitbook该文件修订时间: 2019-03-01 17:46:03

results matching ""

    No results matching ""