先吐槽
这个文档,绝对不是人看的,稀烂
然后给代码吧,复制下面代码就可以跑接口了
注意:
- 下面为正式环境代码,测试环境下需要在请求链接后面拼接测试码
- 测试环境下,只支持原文档中提供的「预置数据」“某一一”等进行测试,不要用真实身份证和姓名测试
- 测试环境可以没有content-Type,正式环境需要有
- 注意行为上报里面的参数,要匹配对应的测试接口
- 需要每个接口都测试到,才能跑正式环境
check接口
const urllib = require('urllib');
var crypto = require("crypto");
const request = require("request");
let SHA256 = require("crypto-js/sha256");
const fcmconfig = require("./config");
ai = "xd_user_" + Date.now();
console.log("请保留参数 ai: " + ai);
//Request
var contentType = 'application/json; charset=utf-8';
var headers = {
//'Content-Type': contentType,
'appId': config.appid,
'bizId': bid,
'timestamps': Date.now()
}
var body = {
idNum: idNum,
name: name,
ai: ai
}
var encbody = aesGcmEncrypt(JSON.stringify(body), config.key);
var encbodystr = '{"data":"' + encbody + '"}';
headers['sign'] = create_sign(headers, '', encbodystr, config.key);
var reqData = {
method: "POST",
headers: headers,
data: encbodystr
}
urllib.request("https://api.wlc.nppa.gov.cn/idcard/authentication/check", reqData,
(err, data, response) => {
console.log("返回数据:" + data.toString());
});
function aesGcmEncrypt(message, key) {
console.log("请求参数:" + message);
// AES 128 GCM Mode
let iv = crypto.randomBytes(12);
const cipher = crypto.createCipheriv('aes-128-gcm', Buffer.from(key, "hex"), iv);
cipher.setAutoPadding(true);
// encrypt the given text
const encrypted = Buffer.concat([cipher.update(message, 'utf8'), cipher.final()]);
// extract the auth tag
const tag = cipher.getAuthTag();
// generate output
return Buffer.concat([iv, encrypted, tag]).toString('base64');
}
function sortObjectToString(data) {
let sdic = Object.keys(data).sort();
let str = '';
for (let ki in sdic) {
let k = sdic[ki];
str += k + data[k];
}
return str;
}
function create_sign(headers, query, body, key) {
let data = Object.assign(headers, query);
return SHA256(key + sortObjectToString(data, true) + body).toString();
}
需要其他接口的话,留言邮箱啊,我回复邮件,私聊无法发代码文件