## 文档说明
本文档使用前,需线下申请**appId、appSecret、privateKey**以及**publicKey**和接口
提供方的**publicKey(公钥)**
请求参数详见请求示例, 加密通用规则
**加密:通过从线下拿到的私钥进行 RSA 加密**
## 签名生成通用规则
**签名原文组装说明:**
无论是请求还是响应,签名原文组装规则如下:
#### 1\. 除 sign 字段外,所有参数按照字段名的 ASCII 字码从小到大排序。排序完成之后,再把所有键值对以“&”字符连接起来(如 key1=value1&key2=value2)。
#### 2\. 如果参数值是一个子 JSON Object,则先将子 JSON 按照字段名的 ASCII 字码从小到大排序,把子 JSON 中的所有键值对以“&”字符连接起来,以此作为该参数的值,再进行拼接。
#### 3\. 所有参数是指实际出现的所有非空参数,即使是没有事先描述的非空字段,也需要参与签名组串。
#### 4\. 签名原始串中,各字段和字段值都采用原始值,不进行 URLEncoder。
#### 5\. 参数名区分大小写。
## 签名(sign)生成通用步骤:
对上述拼接好的 data\_to\_sign 使用商户的私钥进行 RSA 签名
示例如下:
**假设传递的 json 串如下:**
~~~
{
"area":"郑州",
"email":"1234567@qq.com",
"frimname":"张三",
"idNumber":"320206198611222555",
"name":"赵六",
"phone":"17839949869"
}
~~~
# 1、拼接的待签原文(data\_to\_sign):
`email=[1234567@qq.com](mailto:1234567@qq.com)&frimname =张三&idNumber=320206198611222555&name=赵六&phone=17839949869`
## 2、使用线下拿到的私钥进行签名,sign = sign(data\_to\_sign, 私钥);
## 3、执行成功后,会得到一个 sign,是由接口返回的签名,再用 data\_to\_sign 和服务商的公钥验证签名,保证数据没被篡改。