某项目某接口
简要描述
- 某项目某接口说明
接口版本
版本号 | 制定人 | 制定日期 | 修订日期 |
---|---|---|---|
1.0.0 | 某某 | 2021-08-25 |
接口列表
接口名称 | 说明 |
---|---|
自检 | 验证签名密钥 |
连接地址
- 通过http/https协议发送json格式报文
- 内网测试地址
http://172.16.129.207:12345
- 公网测试地址
http://test.cardsv.com:12345
- 公网生产地址
https://hpay.cardsv.com.cn:12346
请求方式
- 通过http/https协议通过post提交json格式报文,Content-Type: application/json
数据格式
- 指令格式
JSON格式字符串- 字符编码
统一采用UTF-8字符编码
安全规范
数字签名
- 为了保证数据传输过程中的数据真实性和完整性,我们需要对数据进行数字签名,在接收签名数据之后进行签名校验。数字签名有两个步骤,先按一定规则拼接要签名的原始串,再选择具体的算法和密钥计算出签名结果。一般失败的结果不签名。
签名原始串
无论是请求还是应答,签名原始串按以下方式组装成字符串:
- 除sign字段外,所有参数按照字段名的ascii码从小到大排序后使用QueryString的格式(即key1=value1&key2=value2…)拼接而成,空值不传递,不参与签名组串。
- 签名原始串中,字段名和字段值都采用原始值,不进行URL Encode。
- 平台返回的应答或通知消息可能会由于升级增加参数,请验证应答签名时注意允许这种情况。
签名算法
目前暂只支持MD5签名
- MD5签名
MD5 是一种摘要生成算法,通过在签名原始串后加上商户通信密钥的内容,进行MD5运算,形成的摘要字符串即为签名结果。为了方便比较,签名结果统一转换为大写字符。
注意:签名时将字符串转化成字节流时指定的编码字符集应与参数charset一致。
MD5签名计算公式:
sign=Md5(原字符串&key=密钥).toUpperCase
php实例
/**
* 加签实例 function
* @param array $data 待加签报文
* @param string $key 密钥
* @return string $sign 签名
*/
function getsign($data, $key)
{
ksort($data);
$tmpstr = '';
foreach ($data as $k => $v) {
if (' ' != $v && 'sign' != $k) {
$tmpstr = $tmpstr . $k . '=' . $v . '&';
}
}
$tmpstr = $tmpstr . 'key=' . $key;
$sign = strtoupper(md5($tmpstr));
return $sign;
}
报文主体
参数名 | 是否必须 | 类型 | 值 | 说明 |
---|---|---|---|---|
instcode | 是 | string | 机构代码 | |
instorder | 是 | string | 机构订单号(不允许重复) | |
timestamp | 是 | string | 时间戮(格式:年月日时分秒-yyyymmddhhmmss) | |
noncestr | 是 | string | 随机字串(长度:16) | |
… | 是 | 报文内容见各接口说明 | ||
note | 否 | string | 摘要 | |
signtype | 是 | string | md5 | 签名类型 |
sign | 是 | string | 签名 |
报文内容
自检
请求报文:
参数名 | 是否必须 | 类型 | 值 | 说明 |
---|---|---|---|---|
apptype | 是 | string | 0200 | 报文类型 |
process | 是 | string | 000000 | 处理码 |
返回报文:
参数名 | 类型 | 值 | 说明 |
---|---|---|---|
apptype | string | 0210 | 报文类型 |
process | string | 000000 | 处理码 |
retcode | string | 响应代码(00-成功) | |
retmsg | string | 响应说明 |
备注:可验证签名密钥或签名算法是否正确。
请求示例
{
"apptype": "0200",
"process": "000000",
"instcode": "00000001",
"instorder": "210825061616471018225",
"timestamp": "20210819141810",
"noncestr": "620deaf3bb5e5c60",
"signtype": "md5",
"sign": "3711214FA8428C30EB7FA53B27CD59BF",
}
返回示例
正确时返回:
{
"apptype": "0210",
"process": "000000",
"instcode": "00000001",
"instorder": "210825061616471018225",
"timestamp": "20210819141812",
"noncestr": "7f86256dc53e7c33",
"retcode": "00",
"retmsg": "success",
"signtype": "md5",
"sign": "B54AD41EE9BC6975AF03454ED9E12A86",
}
错误时返回:
{
"apptype": "0210",
"process": "000000",
"instcode": "00000001",
"instorder": "210825061616471018225",
"timestamp": "20210819141811",
"noncestr": "00ce0937df2478b1",
"retcode": "xx",
"retmsg": "fail"
}
备注:更多返回错误代码请看错误代码描述。
备注
- 无
业务流程
文档更新时间: 2021-11-03 09:41 作者:黄佳