1. 接口信息
REQUEST TYPE : post
REQUEST PARAM :
Param name:key\name\idcard
Param type :
string
RESPONSE PARAM :
Param name:code\message\data\seqNo
RESPONSE PARAM data :
Param name:result
SUCCESS RESPONSE :
{
"code": "10000",
"message": "成功",
"data": {
"result": "1"
},
"seqNo": "------------------"
}
ERROR CODE :
Code value:10000 -
10020
2. 全系统错误码
Code value:SYSTEM_900 \
SYSTEM_999 \
SYSTEM_000 --
SYSTEM_048
3. 接口对接示例代码
3.1 sample code
import
org.apache.http.HttpResponse
;
import
org.apache.http.NameValuePair
;
import
org.apache.http.client.config.RequestConfig
;
import
org.apache.http.client.entity.UrlEncodedFormEntity
;
import
org.apache.http.client.methods.HttpPost
;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.impl.client.HttpClients
;
import
org.apache.http.message.BasicNameValuePair
;
import
org.apache.http.util.EntityUtils
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
public class
HttpUtil {
public static void
main
(String[] args) {
//接口地址
String url =
"xxxxxxxxxx"
;
//请求参数
Map, Object> params = new HashMap<>();
//输入 key
params.put(
"key"
,
""
)
;
//输入局被查询账号
params.put(
"mobile"
,
""
)
;
String result =
null;
try
{
result = post(url
,
params)
;
}
catch
(Exception e) {
e.printStackTrace()
;
}
System.
out
.println(
"result:
\n
"
+ result)
;
}
public static
String
post
(String url
,
Map, Object> params) throws Exception
{
ArrayList pairs = covertParams2NVPS(params)
;
return
PostHttpRequest
(url
,
pairs)
;
}
public static
String
PostHttpRequest
(String Url
,
List params)
throws
Exception {
CloseableHttpClient client = HttpClients.createDefault()
;
//超时时间
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(
300000
)
.setConnectTimeout(
300000
)
.build()
;
String result =
null;
try
{
HttpPost request =
new
HttpPost(Url)
;
request.setConfig(requestConfig)
;
request.setEntity(
new
UrlEncodedFormEntity(params
,
"UTF-8"
))
;
HttpResponse respones = client.execute(request)
;
if
(respones.getStatusLine().getStatusCode() ==
200
) {
result = EntityUtils.toString(respones.getEntity()
,
"UTF-8"
)
;
}
}
catch
(Exception e) {
e.printStackTrace()
;
}
finally
{
client.close()
;
}
return
result
;
}
private static
ArrayList
covertParams2NVPS
(Map, Object>
params) {
ArrayList pairs =
new
ArrayList<>()
;
if
(params ==
null
|| params.size() ==
0
) {
return
pairs
;
}
for
(Map.Entry, Object> param : params.entrySet()) {
Object value = param.getValue()
;
if
(value
instanceof
String[]) {
String[] values = (String[]) value
;
for
(String v : values) {
pairs.add(
new
BasicNameValuePair(param.getKey()
,
v))
;
}
}
else
{
if
(value
instanceof
Integer) {
value = Integer.toString((Integer) value)
;
}
else if
(value
instanceof
Long) {
value = Long.toString((Long) value)
;
}
pairs.add(
new
BasicNameValuePair(param.getKey()
,
(String) value))
;
}
}
return
pairs
;
}
}
4. 加密对接说明
我们的加密方式使用
MD5
进行
sign
签名验证,以此来杜绝信息篡改的发生,同时
针对入参和出参内容进行对称加密(
base64
编码)。以下具体讲解对接方式。
例:
secretKey:lgJKiiakuplMXy4s
接口的入参和出参参数名无需使用 base64 编码,只是针对入参值和出参值使用密
码加解密。案例如下:
Url : http://api.chinadatapay.com/communication/personal/1896
RequestWay : Post
SecretKey : lgJKiiakuplMXy4s
Request Param:
name:
key、name、idcard、mobile
e.g
key=key 值
name=张三&idcard=34262319980123456&mobile=15058571234×tamp=12345678901
处理:
第一步、BASE64AES 加密入参 :
备注:key 字段不参与加密
name=a69V/TNqx/9cPTSjWq26QQ==&idcard=GxQ8ooj8Vhn7X3qDHNe2DxfSKoIMhpeszFLfoi3Sgek=&mobil
e=P5U2chrL933LhMIxuVg5Aw==
timestamp=lD5VSE5xkjgH88Sjl3FQSw==
第二步、sign 令牌获取 :
规则为入参按照 ACS 码排序,结果如下:
idcard=GxQ8ooj8Vhn7X3qDHNe2DxfSKoIMhpeszFLfoi3Sgek=&mobile=P5U2chrL933LhMIxuVg5Aw==&name
=a69V/TNqx/9cPTSjWq26QQ==×tamp=lD5VSE5xkjgH88Sjl3FQSw==
备注:key 字段不参与签名
sign=new BASE64Encoder().encode(md5(入参按照 ACS 码排序结果)) 获得入参
sign= 7c20PORFWywW6lZ6oYwAXQ==
第三步、开始发送请求 :
url:xxxxxxxxxx
requestWay:post
Request:
key=您购买的 API 的 key 值
name=a69V/TNqx/9cPTSjWq26QQ==&idcard=GxQ8ooj8Vhn7X3qDHNe2DxfSKoIMhpeszFLfoi3Sgek=&mobil
e= P5U2chrL933LhMIxuVg5Aw==×tamp=lD5VSE5xkjgH88Sjl3FQSw==
sign=7c20PORFWywW6lZ6oYwAXQ==
Response:
{
"code": "10000",
"message": "成功",
"data": "L58pwLVQ7L8ZarUV0gpCLA==",
"seqNo": "C03SX59Z1709071444"
}
data 值秘钥进行 BASE64AES 解密,解密结果如下:
{"state": "1"}
9