签名方式
第一步: 参数顺序排序后拼接
对所有请求参数(不包括 sign 参数),按照参数名ASCII码表升序顺序排序。如:foo=1, bar=2, foo_bar=3, baz=4 排序后的顺序是 bar=2, baz=4, foo=1, foo_bar=3。
将参数列表排列成一个 string。 用 & 分隔每个参数。对于上述参数,签名 payload 如下所示:
api_key=cA66c6dd9523835-kSSRJkJSJNDNRSkND-8s66c6dd952384f-4g66c6dd9523852×tamp=1724325685&user_id=10000008984
第二步: 计算签名
- 使用
api_secret进行HMAC-sha512加密
$ echo -n 'api_key=cA66c6dd9523835-kSSRJkJSJNDNRSkND-8s66c6dd952384f-4g66c6dd9523852×tamp=1724326435' | openssl dgst -sha512 -hmac '6566c6dd9523856-kSSRJkJSJNDNRSkNk-Dv66c6dd952385e-kSSRJkJSccJckDLJL-kn66c6dd9523866'
(stdin)= 0354954708f6a0f774489416d0aa0efab8d26583a6501b2e7786b7b00a6634c1525df6e9fe8191d238deb644da1537c39806e52f8e2df20eadfe21d521f4193d
- PHP 加密方法
$api_key = 'cA66c6dd9523835-kSSRJkJSJNDNRSkND-8s66c6dd952384f-4g66c6dd9523852';
$timestamp = '1724326435';
$api_secret = '6566c6dd9523856-kSSRJkJSJNDNRSkNk-Dv66c6dd952385e-kSSRJkJSccJckDLJL-kn66c6dd9523866';
$data = "api_key={$api_key}×tamp={$timestamp}";
$signature = hash_hmac('sha512', $data, $api_secret);
echo $signature;
第三步 : 请求示例
默认请求参数
| 字段 | 参数 |
|---|---|
| 签名 | sign |
| apiKey | api_key |
| 请求时间秒戳 | timestamp |
curl 命令:
$ curl -X POST -d 'api_key=cA66c6dd9523835-kSSRJkJSJNDNRSkND-8s66c6dd952384f-4g66c6dd9523852×tamp=1724327022&sign=cbfa966b84095ea057461c5120ea5fe3faa97e5640145541e4bc741eb9620814c0fc529d74210763957f7e18b5f6b9e71d2effe3c312ea3787c378c8ad56994e' https://apiv2.shanghapi.com/test/time