修改微信刷新access token的方法

This commit is contained in:
zhl 2021-06-15 13:08:57 +08:00
parent 56471b92b7
commit cc7a2926ef
4 changed files with 97 additions and 5 deletions

View File

@ -5,20 +5,26 @@ import { Game } from '../../models/content/Game'
import { generateQrFile } from '../../services/File'
import { getInviteeNum } from '../../services/JCFW'
import { UserItem } from '../../models/user/UserItem'
import { checkText } from '../../services/Baidu'
import { refreshToken } from '../../services/Wechat'
class GameController extends BaseController {
@role('anon')
@router('get /api/test')
@router('post /api/test')
async test(req) {
// let gameId = '60810dd156af0e8550832a44'
// let version = '608117912ff0238a3e607d33'
// let shop = 'sa6xtgbmj7'
// const { file, url } = await generateQrFile({ gameId, version, shop })
// return { file, url }
let accountId = '7101_8004_opBlx1vRs-UIGF6rZDkkSrSTJYAs'
let sessionId = '1622783517_1556611531_60838f020d9c51716f144bf7a71b2af5_e5818d3fc90f8491aa285246cb6d85ce'
let result = await getInviteeNum(accountId, sessionId, [1001])
return result
// let accountId = '7101_8004_opBlx1vRs-UIGF6rZDkkSrSTJYAs'
// let sessionId = '1622783517_1556611531_60838f020d9c51716f144bf7a71b2af5_e5818d3fc90f8491aa285246cb6d85ce'
// let result = await getInviteeNum(accountId, sessionId, [1001])
// return result
const { txt } = req.params
// const res = await checkText(txt)
const token = await refreshToken('wxf8c3da4e7dfe00a2', '8c0a1e88a6b43e4be80ed6a597c0b047')
return { token }
}
@permission(['game:read', 'shop:game_setting'])
@router('post /api/games')

36
src/services/Baidu.ts Normal file
View File

@ -0,0 +1,36 @@
import axios from 'axios'
let random = function (start, end) {
return (Math.random() * (end - start) + start) | 0
}
let getIp = function () {
return `${random(1, 254)}.${random(1, 254)}.${random(1, 254)}.${random(1, 254)}`
}
export async function checkText(txt: string) {
let qs = require('qs')
const url = 'https://ai.baidu.com/aidemo'
let data: string = qs.stringify({
content: txt,
type: 'textcensor',
apiType: 'censor',
})
const useragent = `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${
(70 + Math.random() * 10) | 0
}.0.4324.${(Math.random() * 100) | 0} Safari/537.36`
let reqConfig: any = {
method: 'post',
url,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
referer: 'https://ai.baidu.com/tech/textcensoring',
'User-Agent': useragent,
'X-Forwarded-For': getIp(),
},
responseType: 'json',
data: data,
}
const res = await axios(reqConfig)
return res
}

View File

@ -1,5 +1,6 @@
import axios, { AxiosRequestConfig } from 'axios'
import fs from 'fs'
import { WxTokenCache } from './WxTokenCache'
export async function generateQr({ appId, appSecret, scene, file }) {
const stream = fs.createWriteStream(file)
@ -27,11 +28,19 @@ export async function generateQr({ appId, appSecret, scene, file }) {
}
export async function refreshToken(appId: string, appSecret: string) {
const util = new WxTokenCache()
let token = util.getToken(appId)
if (token) {
return token
}
const link = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appId}&secret=${appSecret}`
const { data } = await axios.get(link)
if (!data.errcode) {
util.updateToken(appId, data.access_token, data.expires_in)
return data.access_token
} else {
throw new Error(data.errmsg)
}
}
export async function msgSecCheck(content: string) {}

View File

@ -0,0 +1,41 @@
import { singleton } from '../decorators/singleton'
export class WxTokenClass {
public token: string
public expire: number
constructor(token: string, expire: number) {
this.token = token
this.expire = expire
}
}
/**
*
*/
@singleton
export class WxTokenCache {
private _cache: Map<string, WxTokenClass> = new Map()
/**
* id获取分类名
* @param {string} appId
* @return {string}
*/
public getToken(appId: string): string | null {
if (!this._cache.has(appId)) {
return null
}
let data = this._cache.get(appId)
if (data.expire - Date.now() < 10000) {
return null
} else {
return data.token
}
}
public updateToken(appId: string, token: string, exptime: number) {
let expire = Date.now() + exptime * 1000
let data = new WxTokenClass(token, expire)
this._cache.set(appId, data)
}
}