API签名方式和接口规范
<h3>接口规范</h3>
<ul>
<li>所有请求均为POST请求。</li>
<li>接口返回json格式数据。</li>
<li>接口返回code,0-表示请求成功。1-表示错误。</li>
<li>接口全部采用https协议</li>
</ul>
<h3>步骤说明</h3>
<pre><code> 1. 将业务参数(除sign本身外)的名称按照ASCII码从小到大排序(字典序)后拼接成URL键值 即 key1=value1&key2=value2 字符串形式
(1)生成sign参数时,不要进行URL 编码转换,中文字符以utf-8编码格式进行处理**。
(2)所有参数,无论是否必填,字符类型的,只要值不为空,则参与签名;数值类型的的参数,值为0有意义,则也需要参与签名
2. 在上一步生成的字符串末尾追加: &key
3. 对上述结果字符串进行MD5做摘要,结果转大写后作为sign参数的值</code></pre>
<h3>签名示范</h3>
<ul>
<li>
<p>step 1 准备数据
mchid: 11111
ordersn:xxx
key: afsd</p>
</li>
<li>
<p>step 2 将参数排序并拼接</p>
<p>mchid=11111&ordersn=xxx</p>
</li>
<li>
<p>step 3 拼接key</p>
<p>mchid=11111&ordersn=xxx&key=秘钥</p>
</li>
<li>
<p>step 4 计算MD5值并转为大写十六进制字符串</p>
<p>A4C12A15E86D8FC38C490B4661914498</p>
</li>
</ul>
<h4>php代码示例</h4>
<pre><code>public function appendSign(array $params, $keys)
{
// 排序
ksort($params);
$str = &#039;&#039;;
foreach ($params as $key =&gt; $value) {
// 空不参与签名
if (!empty($value)) {
if ($key != &#039;key&#039;) {
$str .= &quot;{$key}={$value}&amp;&quot;;
}
}
}
$appkey = &#039;key=&#039; . $keys;
$signText = &quot;{$str}{$appkey}&quot;;
return strtoupper(md5($signText));
}</code></pre>
<p>调用方法</p>
<pre><code>$r = $this-&gt;appendSign([
&#039;mchid&#039; =&gt; &#039;xxx&#039;,
&#039;ordersn&#039; =&gt; &#039;aaaa&#039;
], &#039;你的秘钥&#039;);</code></pre>