@qiniu/miku-delivery-mp-ks
Version:
Kuaishou Mini Program SDK for Miku Delivery
33 lines (32 loc) • 1.33 kB
JavaScript
//@ts-ignore
import HmacSHA1 from '../crypto-js/hmac-sha1';
//@ts-ignore
import Base64 from '../crypto-js/enc-base64';
import { Polyfilled_URL } from './url';
export function setSigningStr(config) {
let signingStr = config.query
? `${config.path}?${config.query}\n`
: `${config.path}\n`;
config.body && (signingStr += config.body);
return signingStr;
}
export function getAccessToken(config) {
let pathname;
try {
pathname = new Polyfilled_URL(config.path).pathname;
}
catch (e) {
pathname = config.path;
}
let str = setSigningStr(Object.assign(Object.assign({}, config), { path: pathname }));
const sign = HmacSHA1(str, config.appSalt);
// 注意这里不能直接使用 crypto-js/enc-base64url 提供的 `Base64url`,
// crypto-js/enc-base64url 提供的 `Base64url` 会省略结果中作为 padding 的 `=`,
// 而我们服务端采用的实现(golang `base64.URLEncoding`)要求不省略作为 padding 的 `=`
const encodedSign = sign.toString(Base64);
const urlSafeEncodedSign = encodedSign.replace(/\+/g, '-').replace(/\//g, '_');
let accessToken = `QApp ${config.appID}:${urlSafeEncodedSign}`;
accessToken = accessToken.replace(/\//g, '_');
accessToken = accessToken.replace(/\+/g, '-');
return accessToken;
}