mirror of
https://github.com/vastxie/99AI.git
synced 2025-11-10 18:53:46 +08:00
v4.1.0
This commit is contained in:
22
AIWebQuickDeploy/dist/modules/official/dto/getQrCode.dto.js
vendored
Normal file
22
AIWebQuickDeploy/dist/modules/official/dto/getQrCode.dto.js
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.GetQrCodeDto = void 0;
|
||||
const class_validator_1 = require("class-validator");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
class GetQrCodeDto {
|
||||
}
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 'dasdasg2441lk1o24bk', description: '1-64位的字符参数', required: true }),
|
||||
(0, class_validator_1.IsDefined)({ message: 'sceneStr是必传参数' }),
|
||||
__metadata("design:type", String)
|
||||
], GetQrCodeDto.prototype, "sceneStr", void 0);
|
||||
exports.GetQrCodeDto = GetQrCodeDto;
|
||||
201
AIWebQuickDeploy/dist/modules/official/official.controller.js
vendored
Normal file
201
AIWebQuickDeploy/dist/modules/official/official.controller.js
vendored
Normal file
@@ -0,0 +1,201 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
return function (target, key) { decorator(target, key, paramIndex); }
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.OfficialController = void 0;
|
||||
const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard");
|
||||
const utils_1 = require("../../common/utils");
|
||||
const common_1 = require("@nestjs/common");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
const getQrCode_dto_1 = require("./dto/getQrCode.dto");
|
||||
const official_service_1 = require("./official.service");
|
||||
let OfficialController = class OfficialController {
|
||||
constructor(officialService) {
|
||||
this.officialService = officialService;
|
||||
}
|
||||
async notify(req, query, body) {
|
||||
console.log('get 通知>>>', query, body);
|
||||
const result = await this.officialService.verify(query.signature, query.nonce, query.timestamp);
|
||||
return result ? query.echostr : '';
|
||||
}
|
||||
async notifyPost(req, query, xmlData, res) {
|
||||
const { xml } = xmlData;
|
||||
console.log('xml: ', xml);
|
||||
if (xml.msgtype[0] == 'event') {
|
||||
if (xml.event[0] == 'VIEW' || xml.event[0] == 'CLICK') {
|
||||
return res.status(200).send('');
|
||||
}
|
||||
if (xml.event[0] == 'SCAN') {
|
||||
console.log('扫码');
|
||||
const sceneStr = xml.eventkey[0];
|
||||
if (sceneStr.includes('/')) {
|
||||
this.officialService.scanBindWx(xml.fromusername[0], sceneStr);
|
||||
const xmlMsg = await this.officialService.genXmlMsgByConfig(xml, 'officialBindAccountText');
|
||||
return res.status(200).send(xmlMsg);
|
||||
}
|
||||
this.officialService.scan(xml.fromusername[0], sceneStr);
|
||||
const xmlMsg = await this.officialService.genXmlMsgByConfig(xml, 'officialScanLoginText');
|
||||
return res.status(200).send(xmlMsg);
|
||||
}
|
||||
if (xml.event[0] == 'subscribe') {
|
||||
console.log('订阅', xml.eventkey[0]);
|
||||
const sceneStr = xml.eventkey[0].split('qrscene_')[1];
|
||||
console.log('sceneStr: ', sceneStr);
|
||||
if (!sceneStr) {
|
||||
const xmlMsg = await this.officialService.genXmlMsgByConfig(xml, 'officialSubscribeText');
|
||||
return res.status(200).send(xmlMsg);
|
||||
}
|
||||
if (sceneStr.includes('/')) {
|
||||
this.officialService.scanBindWx(xml.fromusername[0], sceneStr);
|
||||
const xmlMsg = await this.officialService.genXmlMsgByConfig(xml, 'officialBindAccountText');
|
||||
return res.status(200).send(xmlMsg);
|
||||
}
|
||||
this.officialService.scan(xml.fromusername[0], sceneStr);
|
||||
const xmlMsg = await this.officialService.genXmlMsgByConfig(xml, 'officialSubscribeText');
|
||||
return res.status(200).send(xmlMsg);
|
||||
}
|
||||
if (xml.event[0] == 'unsubscribe') {
|
||||
return res.status(200).send('');
|
||||
}
|
||||
}
|
||||
if (xml.msgtype[0] == 'text') {
|
||||
const aotoPlayMsg = await this.officialService.aotoPlay(xml.content[0]);
|
||||
const xmlMsg = await this.officialService.genXmlMsg(xml, aotoPlayMsg);
|
||||
return res.status(200).send(xmlMsg);
|
||||
}
|
||||
return 'success';
|
||||
}
|
||||
async getQRSceneStr() {
|
||||
return this.officialService.getQRSceneStr();
|
||||
}
|
||||
async getQRSceneStrByBind(req) {
|
||||
return this.officialService.getQRSceneStrByBind(req);
|
||||
}
|
||||
async getQRCode(query) {
|
||||
if (process.env.ISDEV === 'TRUE')
|
||||
return '';
|
||||
const ticket = await this.officialService.getQRCodeTicket(query.sceneStr);
|
||||
const Url = (0, utils_1.formatUrl)(process.env.weChatMpUrl || 'https://mp.weixin.qq.com');
|
||||
return `${Url}/cgi-bin/showqrcode?ticket=${encodeURIComponent(ticket)}`;
|
||||
}
|
||||
async loginBySceneStr(req, body) {
|
||||
return this.officialService.loginBySceneStr(req, body);
|
||||
}
|
||||
async bindWxBySceneStr(req, body) {
|
||||
return this.officialService.bindWxBySceneStr(req, body.sceneStr);
|
||||
}
|
||||
async getRedirectUrl(body) {
|
||||
return this.officialService.getRedirectUrl(body.url);
|
||||
}
|
||||
async getJsapiTicket(body) {
|
||||
return this.officialService.getJsapiTicket(body.url);
|
||||
}
|
||||
async loginByCode(req, body) {
|
||||
return this.officialService.loginByCode(req, body.code);
|
||||
}
|
||||
};
|
||||
__decorate([
|
||||
(0, common_1.Get)('notify'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '公众号通知接口GET' }),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Query)()),
|
||||
__param(2, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, Object, Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], OfficialController.prototype, "notify", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('notify'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '公众号通知接口POST' }),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Query)()),
|
||||
__param(2, (0, common_1.Body)()),
|
||||
__param(3, (0, common_1.Res)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, Object, Object, Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], OfficialController.prototype, "notifyPost", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('getQRSceneStr'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '获取登录二维码sceneStr' }),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", []),
|
||||
__metadata("design:returntype", Promise)
|
||||
], OfficialController.prototype, "getQRSceneStr", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('getQRSceneStrByBind'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '获取绑定二维码的sceneStr' }),
|
||||
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], OfficialController.prototype, "getQRSceneStrByBind", null);
|
||||
__decorate([
|
||||
(0, common_1.Get)('getQRCode'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '获取二维码' }),
|
||||
__param(0, (0, common_1.Query)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [getQrCode_dto_1.GetQrCodeDto]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], OfficialController.prototype, "getQRCode", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('loginBySceneStr'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '扫码登录轮询查询' }),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], OfficialController.prototype, "loginBySceneStr", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('bindWxBySceneStr'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '扫码绑定轮询查询' }),
|
||||
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, getQrCode_dto_1.GetQrCodeDto]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], OfficialController.prototype, "bindWxBySceneStr", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('getRedirectUrl'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '获取登录跳转地址' }),
|
||||
__param(0, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], OfficialController.prototype, "getRedirectUrl", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('getJsapiTicket'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '获取注册配置' }),
|
||||
__param(0, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], OfficialController.prototype, "getJsapiTicket", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('loginByCode'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '公众号静默登录' }),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], OfficialController.prototype, "loginByCode", null);
|
||||
OfficialController = __decorate([
|
||||
(0, swagger_1.ApiTags)('official'),
|
||||
(0, common_1.Controller)('official'),
|
||||
__metadata("design:paramtypes", [official_service_1.OfficialService])
|
||||
], OfficialController);
|
||||
exports.OfficialController = OfficialController;
|
||||
23
AIWebQuickDeploy/dist/modules/official/official.module.js
vendored
Normal file
23
AIWebQuickDeploy/dist/modules/official/official.module.js
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.OfficialModule = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const official_controller_1 = require("./official.controller");
|
||||
const official_service_1 = require("./official.service");
|
||||
let OfficialModule = class OfficialModule {
|
||||
};
|
||||
OfficialModule = __decorate([
|
||||
(0, common_1.Global)(),
|
||||
(0, common_1.Module)({
|
||||
controllers: [official_controller_1.OfficialController],
|
||||
providers: [official_service_1.OfficialService],
|
||||
exports: [official_service_1.OfficialService],
|
||||
})
|
||||
], OfficialModule);
|
||||
exports.OfficialModule = OfficialModule;
|
||||
194
AIWebQuickDeploy/dist/modules/official/official.service.js
vendored
Normal file
194
AIWebQuickDeploy/dist/modules/official/official.service.js
vendored
Normal file
@@ -0,0 +1,194 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.OfficialService = void 0;
|
||||
const utils_1 = require("../../common/utils");
|
||||
const common_1 = require("@nestjs/common");
|
||||
const axios_1 = require("axios");
|
||||
const crypto = require("crypto");
|
||||
const chat_service_1 = require("../chat/chat.service");
|
||||
const auth_service_1 = require("./../auth/auth.service");
|
||||
const autoreply_service_1 = require("./../autoreply/autoreply.service");
|
||||
const globalConfig_service_1 = require("./../globalConfig/globalConfig.service");
|
||||
const user_service_1 = require("./../user/user.service");
|
||||
let OfficialService = class OfficialService {
|
||||
constructor(autoreplyService, userService, authService, globalConfigService, chatgptService) {
|
||||
this.autoreplyService = autoreplyService;
|
||||
this.userService = userService;
|
||||
this.authService = authService;
|
||||
this.globalConfigService = globalConfigService;
|
||||
this.chatgptService = chatgptService;
|
||||
this.sceneStrMap = {};
|
||||
this.scanedSceneStrMap = {};
|
||||
}
|
||||
async onModuleInit() {
|
||||
await this.globalConfigService.getWechatAccessToken(true);
|
||||
}
|
||||
async getQRSceneStr() {
|
||||
let sceneStr = (0, utils_1.createRandomNonceStr)(32);
|
||||
this.sceneStrMap[sceneStr] = true;
|
||||
return sceneStr;
|
||||
}
|
||||
async getQRSceneStrByBind(req) {
|
||||
const { id } = req.user;
|
||||
const sceneStr = `${(0, utils_1.createRandomNonceStr)(32)}/${id}`;
|
||||
this.sceneStrMap[sceneStr] = true;
|
||||
return sceneStr;
|
||||
}
|
||||
async getQRCodeTicket(sceneStr) {
|
||||
return this.fetchQRCodeTicket(sceneStr);
|
||||
}
|
||||
async getRedirectUrl(url) {
|
||||
const appId = await this.globalConfigService.getConfigs([
|
||||
'wechatOfficialAppId',
|
||||
]);
|
||||
const Url = (0, utils_1.formatUrl)(process.env.weChatOpenUrl || 'https://open.weixin.qq.com');
|
||||
const res = `${Url}/connect/oauth2/authorize?appid=${appId}&redirect_uri=${encodeURIComponent(url)}&response_type=code&scope=snsapi_base&state=weChatLogin#wechat_redirect`;
|
||||
console.log('回跳跳转地址: ', res);
|
||||
return res;
|
||||
}
|
||||
async getJsapiTicket(url) {
|
||||
const nonceStr = (0, utils_1.createRandomNonceStr)(32);
|
||||
const timestamp = (Date.now() / 1000).toFixed(0);
|
||||
const jsapiTicket = await this.globalConfigService.getConfigs([
|
||||
'wechatJsapiTicket',
|
||||
]);
|
||||
console.log('jsapiTicket: ', jsapiTicket);
|
||||
const appId = await this.globalConfigService.getConfigs([
|
||||
'wechatOfficialAppId',
|
||||
]);
|
||||
console.log('appId: ', appId);
|
||||
const str = `jsapi_ticket=${jsapiTicket}&noncestr=${nonceStr}×tamp=${timestamp}&url=${url}`;
|
||||
console.log('str: ', str);
|
||||
const signature = this.sha1(str);
|
||||
return { appId, nonceStr, timestamp, signature };
|
||||
}
|
||||
async fetchQRCodeTicket(sceneStr) {
|
||||
const accessToken = await this.globalConfigService.getConfigs([
|
||||
'wechatAccessToken',
|
||||
]);
|
||||
const Url = (0, utils_1.formatUrl)(process.env.weChatApiUrl || 'https://api.weixin.qq.com');
|
||||
const params = {
|
||||
action_name: 'QR_STR_SCENE',
|
||||
action_info: { scene: { scene_str: sceneStr } },
|
||||
};
|
||||
const res = await axios_1.default.post(`${Url}/cgi-bin/qrcode/create?access_token=${accessToken}`, params);
|
||||
const { data: { errmsg, ticket }, } = res;
|
||||
if (errmsg)
|
||||
throw new common_1.HttpException(errmsg, common_1.HttpStatus.BAD_REQUEST);
|
||||
return ticket;
|
||||
}
|
||||
async loginByCode(req, code) {
|
||||
const appId = await this.globalConfigService.getConfigs([
|
||||
'wechatOfficialAppId',
|
||||
]);
|
||||
const secret = await this.globalConfigService.getConfigs([
|
||||
'wechatOfficialAppSecret',
|
||||
]);
|
||||
const Url = (0, utils_1.formatUrl)(process.env.weChatApiUrl || 'https://api.weixin.qq.com');
|
||||
const res = await axios_1.default.get(`${Url}/sns/oauth2/access_token?appid=${appId}&secret=${secret}&code=${code}&grant_type=authorization_code`);
|
||||
const { data: { errmsg, openid }, } = res;
|
||||
if (errmsg)
|
||||
throw new common_1.HttpException(errmsg, common_1.HttpStatus.BAD_REQUEST);
|
||||
let user;
|
||||
user = await this.userService.getUserOpenId(openid);
|
||||
if (!user) {
|
||||
user = await this.userService.getUserFromOpenId(openid);
|
||||
}
|
||||
return this.authService.loginByOpenId(user, req);
|
||||
}
|
||||
async scan(openID, sceneStr) {
|
||||
try {
|
||||
common_1.Logger.log(`Scanning with openID: ${openID}, sceneStr: ${sceneStr}`, 'OfficialService');
|
||||
if (!this.sceneStrMap[sceneStr]) {
|
||||
common_1.Logger.error(`非法参数: 未找到的 sceneStr ${sceneStr}`);
|
||||
throw new common_1.HttpException('非法参数', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
const user = await this.userService.getUserFromOpenId(openID, sceneStr);
|
||||
common_1.Logger.log(`User found: ${user ? user.id : 'No user found'}`, 'OfficialService');
|
||||
this.scanedSceneStrMap[sceneStr] = user.id;
|
||||
}
|
||||
catch (error) {
|
||||
common_1.Logger.error('Error in scan method:', error.message);
|
||||
common_1.Logger.error('Stack trace:', error.stack);
|
||||
throw new common_1.HttpException('处理扫码事件时发生错误', common_1.HttpStatus.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
async loginBySceneStr(req, body) {
|
||||
const { sceneStr } = body;
|
||||
if (!this.sceneStrMap[sceneStr])
|
||||
return;
|
||||
const userId = this.scanedSceneStrMap[sceneStr];
|
||||
if (!userId)
|
||||
return '';
|
||||
const user = await this.userService.getUserById(userId);
|
||||
delete this.scanedSceneStrMap[sceneStr];
|
||||
return this.authService.loginByOpenId(user, req);
|
||||
}
|
||||
async scanBindWx(openId, sceneStr) {
|
||||
if (!this.sceneStrMap[sceneStr])
|
||||
throw new common_1.HttpException('非法参数', common_1.HttpStatus.BAD_REQUEST);
|
||||
const userId = sceneStr.split('/')[1];
|
||||
const bindRes = await this.userService.bindWx(openId, userId);
|
||||
this.scanedSceneStrMap[sceneStr] = bindRes;
|
||||
}
|
||||
async bindWxBySceneStr(req, sceneStr) {
|
||||
if (!this.sceneStrMap[sceneStr])
|
||||
throw new common_1.HttpException('非法参数', common_1.HttpStatus.BAD_REQUEST);
|
||||
const { id } = req.user;
|
||||
const res = this.scanedSceneStrMap[sceneStr];
|
||||
if (!res)
|
||||
return '';
|
||||
delete this.scanedSceneStrMap[sceneStr];
|
||||
return res;
|
||||
}
|
||||
async verify(signature, nonce, timestamp) {
|
||||
const token = (await this.globalConfigService.getConfigs(['wechatOfficialToken'])) ||
|
||||
'';
|
||||
return ((await this.sha1([token, nonce, timestamp].sort().join(''))) == signature);
|
||||
}
|
||||
sha1(data) {
|
||||
return crypto.createHash('sha1').update(data).digest('hex');
|
||||
}
|
||||
async genXmlMsgByConfig(xmlData, msgKey) {
|
||||
const msg = await this.globalConfigService.getConfigs([msgKey]);
|
||||
return this.genXmlMsg(xmlData, msg);
|
||||
}
|
||||
async genXmlMsg(xmlData, msg) {
|
||||
return `
|
||||
<xml>
|
||||
<ToUserName><![CDATA[${xmlData.fromusername[0]}]]></ToUserName>
|
||||
<FromUserName><![CDATA[${xmlData.tousername[0]}]]></FromUserName>
|
||||
<CreateTime>${new Date().getTime()}</CreateTime>
|
||||
<MsgType><![CDATA[text]]></MsgType>
|
||||
<Content><![CDATA[${msg}]]></Content>
|
||||
</xml>`;
|
||||
}
|
||||
async aotoPlay(msg) {
|
||||
const timeoutPromise = new Promise((resolve, reject) => {
|
||||
setTimeout(() => {
|
||||
reject(new Error('请求超时'));
|
||||
}, 4800);
|
||||
});
|
||||
let question = (await this.globalConfigService.getConfigs(['officialAutoReplyText'])) ||
|
||||
'由于公众号的回复限制、过长的问题我们可能无法回复、您可以前往我们的官方站点享受更加完善的服务、如果您有更多问题、欢迎像我提问!';
|
||||
return question;
|
||||
}
|
||||
};
|
||||
OfficialService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__metadata("design:paramtypes", [autoreply_service_1.AutoreplyService,
|
||||
user_service_1.UserService,
|
||||
auth_service_1.AuthService,
|
||||
globalConfig_service_1.GlobalConfigService,
|
||||
chat_service_1.ChatService])
|
||||
], OfficialService);
|
||||
exports.OfficialService = OfficialService;
|
||||
Reference in New Issue
Block a user