更新时间:2025-08-11 GMT+08:00
公共依赖
使用样例时需要引用以下依赖文件:
data.js
exports.data = {
//base_url(APP接入地址)、appid、secret,购买服务时下发,请替换为实际值
/* please replace the appId and secret, when you use the demo. */
click2call_appid: "*****",
click2call_secret: "*****",
callnotify_appid: "*****",
callnotify_secret: "*****",
callverify_appid: "*****",
callverify_secret: "*****",
t_transmit_appid: "*****",
t_transmit_secret: "*****",
/* please replace the IP and Port, when you use the demo. */
base_url: 'https://{domain}:{port}'
};
reqUtil.js
/*jshint esversion: 6 */
var data = require('./data.js');
var url = require('url');
/**
* Build the X-AKSK value.
* @param appKey
* @param appSecret
* @returns
*/
function buildAKSKHeader(appKey, appSecret){
var crypto = require('crypto');
var util = require('util');
var time = new Date(Date.now()).toISOString().replace(/.[0-9]+\Z/, 'Z'); //Created
var nonce = crypto.randomBytes(16).toString('hex'); //Nonce
var passwordDigestBase64Str = crypto.createHmac('sha256', appSecret).update(nonce + time).digest('base64'); //PasswordDigest
return util.format('UsernameToken Username="%s",PasswordDigest="%s",Nonce="%s",Created="%s"', appKey, passwordDigestBase64Str, nonce, time);
}
/**
* Build the options value.
* @param method
* @param uri
* @param queryParams
* @param xaksk
* @returns
*/
function createOptions(method, uri, queryParams, xaksk){
if(method === undefined || method === null){
return;
}
var path;
if(queryParams === undefined || queryParams === null){
path = uri;
} else {
path = uri + '?' + queryParams;
}
var headers = {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'AKSK realm="SDP",profile="UsernameToken",type="Appkey"',
'X-AKSK': xaksk
};
var urlobj = url.parse(data.data.base_url);
var options = {
host: urlobj.hostname,
port: urlobj.port,
path: path,
method: method,
headers: headers,
strictSSL: false,
rejectUnauthorized: false
};
return options;
}
module.exports = {
buildAKSKHeader,
createOptions
};
父主题: Node.js