接入指南
接入准备流程
庆鱼开发指南
统一参数说明
撞库接口
客户接入接口
省市地区编码
错误码
UUID生成方法
星级回传接口
接口调用流程
8位撞库接口
本文档使用 MrDoc 发布
-
+
首页
庆鱼开发指南
## 介绍 该文档是庆鱼开放接口接入说明。在接入开放接口前,务必认真阅读此文档。 ## 规则 - API的统一访问地址为:[https://king.cdsxlc.cn/](https://king.cdsxlc.cn/) - 统一采用HTTP POST请求 - 数据传输编码为UTF-8(charset:UTF-8) - 所有数据均为JSON格式(Content-Type:application/json) ## 频次限制 每个接口单独限制频次和单日总次数 ## 鉴权方式 - accessKey 唯一身份标识 - publicKey 公钥 用于RSA对参数加密,是一个长期有效的密钥,请妥善保存,不要泄漏,不在请求中传输 - sign 签名 每行数据使用md5验证参数完整性(md5的值也需要RSA加密) ## 准备工作 1. 获取accessKey和publicKey 登录系统后,在接入管理模块新建接入时生成与接入唯一对应的accessKey和publicKey。 2. 获取参数列表 在上一步新增好的接入数据后面,点击“编辑模板”查看参数,并点“确定”按钮保存 ## 签名规则 ### 撞库接口不需要签名和加密 ### 先签名 然后对每个参数(包含sign签名)RSA加密! 每次接口请求前,将当前行有参数的数据按照key升序排列后,按照key1value1key2vlaue2拼接后进行MD5运算,得到32位大写的签名sign,将签名参数sign(参数名为sign)放入当前行的集合中,对data中所有参数进行RSA加密,将访问接口所需的请求参数(JSON格式) 放入HTTP Body。 <span style="color:red">注意:排序是按字符串顺序 比如 t10应该在t2之前t1之后</span> 如请求参数: ```json { "accessKey":"abc", "data":[ {"t1":"value1","t3":"value2","t2":"value3"} ], "requestId":"218e5121-81e1-20e6-28dc-9ccf216793e1" } ``` 1. 取出data[0]的集合: ```json { "t1":"value1", "t3":"value2", "t2":"value3" } ``` 2. 根据key进行升序排列: ```json { "t1":"value1", "t2":"value3", "t3":"value2" } ``` 3. 拼接成字符串:(值为null的字段不作为签名计算的一部分) <span style="color:red">注意 t10在t2t3前面 例如</span> t1value1<span style="color:red">t10</span>value10t2value2t3value3t4value4t5value5t6value6t7value7t8value8t9value9 ```json t1value1t2value3t3value2 ``` 4. md5计算32位大写sign: ```json FCD110936A35382F90397FCE52C10C43 ``` 5. 放回原集合 ```json { "t1":"value1", "t3":"value2", "t2":"value3", "sign":"FCD110936A35382F90397FCE52C10C43" } ``` 6. 使用RSA对所有参数加密(填充模式为PKCS1, 过长的文字需要进行多段加密) ```json { "t1":"BcHegb9gcFpVVgOgfs/FIwAZnvLeRfKq53pjH6K8zBCCKStEKUXzLooQv+GEimnZBJupARsZyoJK8KFdMHOUTu9UVG7ONiPoLtArwAnB6AuhtgsopwKugtQCVWevfVG6h0hRelZh0dRVurtRLrlYZz5Hpj2FIphaKnPBW9yGo4E=", "t3":"a8cwN6N6wH1ynLpEM3DTQ/nuFytdqBnC8cs7qhEXIMigzdnYGVhf2hORADJI58ogRT7OQlowccwUc3Ag62wGg0VzO2sj6c683+5caAnAaOTkJQ7xURtiUvt5tOVjbptCb96ciDUtmhOjOqWr40GXRWCqZTTUOjRuMVNPO6Ll4P0=", "t2":"JHWdBveeMhKv2ghLxWj/8Ul0gi2yiIgQM30G6gcn9TfdQAcOuT8vpeZ9EcgZOMbUXdyRbgqtFRFmNSJnzAOTMZ8C17h576v0rePadYNWJ6+9LTx3jiFAZbhs4797m2E66FJn9nVb2OWqPw900zXPJzXs2CTSp4EoNdVJtpkfS7U=", "sign":"NgkzCXPpqQgPe9MTcK4nSRtbNCHY2rlsbuY+6VtJxto8CJD2M24rRKxXrdG1QzFz3EHdrYCVNAkx0/IOuxtM+cZK+TLEPtCdf+zbzsklUZBCNrCoW6AM0RfKss3hBEBO4w+sFBjazpks+r1frc2dmSwdf+6nnB1mkjDKnHl1ATg=" } ``` 7. 最终请求的参数示例: ```json { "accessKey":"abc", "data":[ { "t1":"BcHegb9gcFpVVgOgfs/FIwAZnvLeRfKq53pjH6K8zBCCKStEKUXzLooQv+GEimnZBJupARsZyoJK8KFdMHOUTu9UVG7ONiPoLtArwAnB6AuhtgsopwKugtQCVWevfVG6h0hRelZh0dRVurtRLrlYZz5Hpj2FIphaKnPBW9yGo4E=", "t3":"a8cwN6N6wH1ynLpEM3DTQ/nuFytdqBnC8cs7qhEXIMigzdnYGVhf2hORADJI58ogRT7OQlowccwUc3Ag62wGg0VzO2sj6c683+5caAnAaOTkJQ7xURtiUvt5tOVjbptCb96ciDUtmhOjOqWr40GXRWCqZTTUOjRuMVNPO6Ll4P0=", "t2":"JHWdBveeMhKv2ghLxWj/8Ul0gi2yiIgQM30G6gcn9TfdQAcOuT8vpeZ9EcgZOMbUXdyRbgqtFRFmNSJnzAOTMZ8C17h576v0rePadYNWJ6+9LTx3jiFAZbhs4797m2E66FJn9nVb2OWqPw900zXPJzXs2CTSp4EoNdVJtpkfS7U=", "sign":"NgkzCXPpqQgPe9MTcK4nSRtbNCHY2rlsbuY+6VtJxto8CJD2M24rRKxXrdG1QzFz3EHdrYCVNAkx0/IOuxtM+cZK+TLEPtCdf+zbzsklUZBCNrCoW6AM0RfKss3hBEBO4w+sFBjazpks+r1frc2dmSwdf+6nnB1mkjDKnHl1ATg=" } ], "requestId":"218e5121-81e1-20e6-28dc-9ccf216793e1" } ``` ## RSA加密算法示例 java版 1. 引入hutool-crypto的jar包 ```java <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-crypto</artifactId> <version>5.7.14</version> </dependency> ``` 2. 使用publicKey创建RSA ```java RSA rsa = new RSA(null, "{你的publicKey}"); ``` 3. 使用rsa加密 ```java String 密文 = rsa.encryptBase64("{你的参数原文}", KeyType.PublicKey); ``` ## RSA加密算法示例 php版本 ```php //$data 待加密数据; function rsa($data){ $publcKeyStr = '{你的公钥字符串(长度216位)}'; $crypted = '{接收加密后数据的变量}'; $public_key = "-----BEGIN PUBLIC KEY-----\n" . wordwrap($publcKeyStr, 64, "\n", true) . "\n-----END PUBLIC KEY-----"; $isvalid = openssl_public_encrypt($data, $crypted , $public_key ,OPENSSL_PKCS1_PADDING); //echo "加密后 : ".base64_encode($crypted); return base64_encode($crypted); } ``` ## MD5签名示例 ```java JSONObject jsonObject = new JSONObject(); jsonObject.put("t2","张三"); jsonObject.put("t1","12345678901"); jsonObject.put("t3","1"); List<String> keys = jsonObject.keySet().stream().sorted(Comparator.naturalOrder()).collect(Collectors.toList()); StringBuffer sb = new StringBuffer(); for (String key : keys) { String value = jsonObject.getString(key); if(StringUtils.isNotBlank(value)) { sb.append(key).append(value); } } String md5 = MD5.create().digestHex(sb.toString(), Charset.forName("UTF-8")).toUpperCase(); return md5; ```
admin
2023年9月7日 10:28
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码