协议规则
## 调用API必须遵循以下规则
|||
|-|-|
|传输方式|为保证安全性,采用HTTPS传输|
|提交方式|采用POST方法提交|
|数据格式|提交和返回数据都为JSON格式|
|字符编码|统一采用UTF-8字符编码|
|签名算法|MD5、SHA1、SHA256,后续会兼容HMAC等|
|签名要求|请求和接收数据均需要对核心参数进行校验签名,详细方法请参考[安全规范-签名算法](doc:gG9qrNct)|
核心参数:
| 参数名 | 类型 | 必填 | 参与签名 | 说明 |
| ------------ | ------------ | ------------ | ------------ | ------------ |
| appId | String | 是 | 是 | 平台分配给合作方的appid,联系平台商务获取 |
| userId | String | 否 | 是 | 开票助手用户ID |
| userNo | String | 否 | 是 | 第三方平台的用户唯一标识 |
| accessKey |String | 否 | 是 |额外认证参数|
| accessSecret |String | 否 | 是 |额外认证秘钥(accessKey和accessSecret必须同时存在)|
| nonceStr | String | 是 | 是 | 随机字符串,每次请求都不一样 |
| timestamp | String | 是 |是 | 时间戳(单位:毫秒值,如果是Unix timestamp需要✖️1000) |
| signType | String | 是 | 是 | 签名类型:MD5、SHA1、SHA256,后续会兼容HMAC等 |
| sign | String | 是 | 否 | 签名结果 |
>w 注意
◆ "userId"、"userNo"、"accessKey和accessSecret"三者选填其一即可
◆ 接口参数与userId(userNo、accessKey和accessSecret)不参与生成签名
◆ 需要将核心参数与接口参数一起传过来,如下
userId
```
{
接口参数,
"appId":"",
"userId":"",
"nonceStr":"",
"timestamp":"",
"signType":"",
"sign":""
}
```
userNo
```
{
接口参数,
"appId":"",
"userNo":"",
"nonceStr":"",
"timestamp":"",
"signType":"",
"sign":""
}
```
accessKey和accessSecret
```
{
接口参数,
"appId":"",
"accessKey":"",
"accessSecret":"",
"nonceStr":"",
"timestamp":"",
"signType":"",
"sign":""
}
```