## 接口规范
* 数据传输必需使用`POST`方式提交`JSON`格式
* `API`通过签名进行验证,具体签名方法进入下面的`签名规则`
* 参数中的`data`必需是一维数组,也可以传空数组
* 数据提交标准数据格式 如下:
```JSON
{
"code": "商户标识",
"sign": "32位签名",
"data": {
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
}
```
* 接口数据返回标准格式 如下:
```JSON
{
"msg": "返回提示消息内容",
"code": "状态代码",
"sign": "32位数据签名",
"type": "JSON",
"data": {
"key1":"value1",
"key2":"value2",
"key3":"value3"
}
}
```
## 数据签名规则
第一步,设所有发送或者接收到的数据为集合`M`,将集合M内非空参数值的参数按照参数名`ASCII`码从小到大排序(字典序),将所有值拼接成字符串`stringA`(即value1value2value3...)【仅字符串类型的参数参与签名】
#### 特别注意以下重要规则:
* 参数名`ASCII`码从小到大排序(字典序);
* 参数名不区分大小写;
* 验证调用返回或主动通知签名时,传送的参数仅`data`参与签名,将生成的签名与该`sign`值作校验。
* 接口可能增加字段,验证签名时必须支持增加的扩展字段
* 下面使用到的`ApiKey`需要在平台获取
第二步,在`stringA`最后拼接上`ApiKey`得到`stringSignTemp`字符串(stringSignTempApiKey),并对`stringSignTemp`进行MD5运算,再将得到的字符串所有字符转换为大写,得到`sign`值`signValue`
#### PHP生成签名DEMO
```php
/**
* 接口数据签名
* @param array $data 需要传输的数据
* @param string $apikey 接口ApiKey
* @return string
*/
function signData(&$data, $apikey = '', $prefix = '') {
$data['_SIGNSTR_'] = strtoupper(isset($data['_SIGNSTR_']) ? $data['_SIGNSTR_'] : substr(md5(uniqid()),22));
ksort($data);
foreach (array_values($data) as $string) {
is_array($string) || ($prefix .= "{$string}");
}
return strtoupper(md5($prefix . $apikey . $data['_SIGNSTR_']));
}
```
## API请求示例
具体参考会在接口处说明
~~~[api]
post:http://315.cuci.cc/code/api/test.html
*code=默认值#商户编号,需要在平台获取
*sign=签名值#数据签名,需要使用签名规则进行签名
*array:data=数据对象#需要提交数据(一维数组)
<<<
接口成功
{
"msg": "提交成功",
"code": "SUCCESS",
"sign": "32位数据签名",
"type": "JSON",
"data": {
"key1":"value1",
"key2":"value2",
"key3":"value3"
}
}
<<<
商户异常
{
"msg": "商户不存在, 请传入正确的商户!",
"code": "ERROR",
"sign": "32位数据签名",
"type": "JSON",
"data": []
}
<<<
签名异常
{
"msg": "签名错误, 请检查数据内容是否正确!",
"code": "ERROR",
"sign": "32位数据签名",
"type": "JSON",
"data": []
}
<<<
验证异常
{
"msg": "签名数据与商户ApiKey不匹配!",
"code": "ERROR",
"sign": "32位数据签名",
"type": "JSON",
"data": []
}
<<<
数据异常
{
"msg": "数据格式错误!",
"code": "ERROR",
"sign": "32位数据签名",
"type": "JSON",
"data": []
}
~~~