104 lines
2.5 KiB
TypeScript
104 lines
2.5 KiB
TypeScript
import * as request from "request-promise";
|
|
import * as crypto from 'crypto'
|
|
import { BANTU_VID_ADDR, BANTU_VID_APP_KEY } from '../consts';
|
|
|
|
/**
|
|
* 在线报告
|
|
* @param userCode 账号
|
|
* @param packageName 包名
|
|
*/
|
|
export async function reportOnline ( userCode: string, packageName: string) {
|
|
if(!packageName || packageName==''){
|
|
packageName = 'com.bantu.nfsg'
|
|
}
|
|
|
|
let result = await vidHttpRequest(BANTU_VID_ADDR.REPORT_ONLINE, {
|
|
account: userCode,
|
|
package: packageName
|
|
});
|
|
if(result && result.code !== 1) {
|
|
console.error(result.msg);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* 实名认证
|
|
* @param name 真实姓名
|
|
* @param idNum 身份证号
|
|
* @param userCode 账号
|
|
* @param packageName 包名
|
|
*/
|
|
export async function authenticate (name: string, idNum: string, userCode: string, packageName: string) {
|
|
if(!packageName || packageName==''){
|
|
packageName = 'com.bantu.nfsg'
|
|
}
|
|
|
|
let result = await vidHttpRequest(BANTU_VID_ADDR.IDCARD, {
|
|
account: userCode,
|
|
cardno: idNum,
|
|
name,
|
|
appkey: BANTU_VID_APP_KEY,
|
|
package: packageName
|
|
});
|
|
if(result && result.code !== 1) {
|
|
console.error(result.msg);
|
|
}
|
|
|
|
return result && result.code == 1;
|
|
}
|
|
|
|
export async function vidHttpRequest(addr: string, body: any) {
|
|
body['sign'] = getObjSign(body);
|
|
console.log('body: ', JSON.stringify(body))
|
|
|
|
let options = {
|
|
url: BANTU_VID_ADDR.HOST + addr,
|
|
method: 'POST',
|
|
body:body,
|
|
json: true
|
|
}
|
|
|
|
try {
|
|
let res = await request(options);
|
|
let check = checkSign(res);
|
|
if(!check) return false;
|
|
// console.log('*****request result*****');
|
|
// console.log(JSON.stringify(res));
|
|
return res;
|
|
} catch(e) {
|
|
console.error(e);
|
|
return false
|
|
}
|
|
}
|
|
|
|
export function md5Vid (str: string) {
|
|
str = 'vId' + str;
|
|
return crypto.createHash('md5').update(str, 'utf8').digest("hex");
|
|
};
|
|
|
|
export function getObjSign (obj: any) {
|
|
const str = [];
|
|
Object.keys(obj).sort().forEach((key) => {
|
|
if (key == 'sign') {
|
|
|
|
} else {
|
|
str.push(key + '=' + obj[key]);
|
|
}
|
|
});
|
|
if (str.length == 0) {
|
|
console.error('check obj', obj);
|
|
}
|
|
var strs = str.join('');
|
|
return md5Vid(strs);
|
|
}
|
|
|
|
export async function checkSign (obj: any) {
|
|
if (getObjSign(obj) === obj.sign) {
|
|
return true;
|
|
}
|
|
console.warn('correct sign:', getObjSign(obj), obj.sign);
|
|
return false;
|
|
}
|