wx-gzh
Version:
67 lines (57 loc) • 1.43 kB
text/typescript
/*
* @Description: 微信网页版 sdk 开发
* @Author: chtao
* @Email: victoryct@163.com
* @Github: https://github.com/LadyYang
* @Date: 2020-06-05 15:58:35
* @LastEditors: chtao
* @LastEditTime: 2020-08-02 09:07:01
* @FilePath: \wx-gzh\lib\sdk.ts
*/
import crypto from 'crypto';
import WeChat from '..';
function sha1(str: string) {
return crypto.createHash('sha1').update(str, 'utf8').digest('hex');
}
/**
* 生成签名的时间戳
*/
function createTimestamp() {
return Math.floor(new Date().getTime() / 1000);
}
/**
* 生成签名的随机串
*/
function createNonceStr() {
return Math.random().toString(36).substr(2, 15);
}
/**
* 对参数对象进行字典排序
*/
function raw(args: any) {
const keys = Object.keys(args).sort();
const newArgs: any = {};
keys.forEach(function (key) {
newArgs[key.toLowerCase()] = args[key];
});
let string = '';
for (const k in newArgs) {
string += '&' + k + '=' + newArgs[k];
}
string = string.substr(1);
return string;
}
/**
* JS-SDK使用权限签名算法 获取 signature
*/
export default function getSignature(this: WeChat, href: string) {
var ret: any = {
jsapi_ticket: this.ticket,
nonceStr: createNonceStr(),
timestamp: createTimestamp(),
url: href,
};
ret.signature = sha1(raw(ret));
ret.appId = this.appID;
return ret;
}