## 接口規范
* 數據傳輸必需使用`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": []
}
~~~