123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- 'use strict';
- /**
- *
- *
- * @author Ellisran
- * @date 2020/7/2
- * @version
- */
- const moment = require('moment');
- // const Controller = require('egg').Controller;
- const crypto = require('crypto');
- const maintainConst = require('../const/maintain');
- const wxConst = require('../const/wechat_template.js');
- const smsTypeConst = require('../const/sms_type');
- module.exports = app => {
- class WechatController extends app.BaseController {
- /**
- * 接入微信
- *
- * @param {Object} ctx - egg全局页面
- * @return {void}
- */
- async index(ctx) {
- try {
- const signature = ctx.query.signature;
- const timestamp = ctx.query.timestamp;
- const nonce = ctx.query.nonce;
- const echostr = ctx.query.echostr;
- const array = [ctx.app.config.wechatAll.token, timestamp, nonce];
- array.sort();
- const tempStr = array.join('');
- const hashCode = crypto.createHash('sha1');
- const resultCode = hashCode.update(tempStr, 'utf8').digest('hex');
- if (resultCode === signature) {
- ctx.body = echostr;
- // res.send(echostr);
- } else {
- throw '验证失败';
- }
- } catch (e) {
- console.log(e);
- }
- }
- /**
- * 微信登录验证
- *
- * @param {Object} ctx - egg全局页面
- * @return {void}
- */
- async oauth(ctx) {
- const redirect_uri = ctx.query.redirect_uri;
- const url = await app.wechat.oauth.getAuthorizeURL(redirect_uri, '', 'snsapi_userinfo');
- ctx.redirect(url);
- }
- /**
- * 绑定页面
- *
- * @param {Object} ctx - egg全局页面
- * @return {void}
- */
- async bind(ctx) {
- try {
- const user = await app.wechat.oauth.getUser(ctx.session.wechatToken.openid);
- const errorMessage = ctx.session.loginError;
- // 显示完删除
- ctx.session.loginError = null;
- // 获取系统维护信息
- const maintainData = await ctx.service.maintain.getDataById(1);
- const renderData = {
- maintainData,
- maintainConst,
- errorMessage,
- user,
- };
- // ctx.body = renderData;
- await ctx.render('wechat/bind.ejs', renderData);
- } catch (e) {
- console.log(e);
- ctx.body = e;
- }
- }
- async bindwx(ctx) {
- try {
- const result = await ctx.service.projectAccount.accountCheck(ctx.request.body);
- if (!result) {
- throw '用户名或密码错误';
- }
- if (result === 2) {
- throw '该账号已被停用,请联系销售人员';
- }
- const accountData = result;
- if (accountData.wx_openid || ctx.session.wechatToken.openid === accountData.wx_openid) {
- throw '该账号已经绑定过微信';
- }
- const wxAccountData = await ctx.service.projectAccount.getDataByCondition({ wx_openid: ctx.session.wechatToken.openid });
- if (wxAccountData) {
- throw '该微信号已绑定过本项目账号';
- }
- const user = await app.wechat.oauth.getUser(ctx.session.wechatToken.openid);
- const result2 = await ctx.service.projectAccount.bindWx(accountData.id, ctx.session.wechatToken.openid, user.nickname);
- if (!result2) {
- throw '绑定失败';
- }
- const projectData = await ctx.service.project.getDataById(accountData.project_id);
- // 绑定成功通知
- const templateId = 'ElT988uf7EV8ROPKSAX7z7tN9ZxZCDMaXK5ouc9N49E';
- const url = '';
- const msgData = {
- first: {
- value: '微信绑定成功',
- },
- keyword1: {
- value: accountData.account,
- },
- keyword2: {
- value: '项目编号' + projectData.code + ' 账号' + accountData.account + ' 绑定成功',
- },
- remark: {
- value: '欢迎使用纵横云计量,我们竭诚为您服务。',
- },
- };
- await app.wechat.api.sendTemplate(ctx.session.wechatToken.openid, templateId, url, '', msgData);
- ctx.body = '绑定成功';
- } catch (error) {
- this.log(error);
- ctx.session.loginError = error;
- ctx.redirect('/wx/bind');
- }
- }
- // 设置用户微信登录项目,跳转到对应wap页面
- async url2wap(ctx) {
- try {
- if (!ctx.query.project || !ctx.query.url) {
- throw '参数有误';
- }
- const code = ctx.query.project;
- // 查找项目数据
- const projectData = await ctx.service.project.getProjectByCode(code.toString().trim());
- if (projectData === null) {
- throw '不存在项目数据';
- }
- const pa = await ctx.service.projectAccount.getDataByCondition({ project_id: projectData.id, wx_openid: ctx.session.wechatToken.openid });
- if (!pa) {
- throw '该微信号未绑定此项目';
- }
- if (pa.enable !== 1) {
- throw '该账号已被停用,请联系销售人员';
- }
- // 设置项目和用户session记录
- const result = await ctx.service.projectAccount.accountLogin({ project: projectData, accountData: pa }, 3);
- if (!result) {
- throw '登录出错';
- }
- ctx.redirect(ctx.query.url);
- } catch (error) {
- console.log(error);
- ctx.body = error;
- }
- }
- async oauthTxt(ctx) {
- ctx.body = 't3MkWAMqplVxPjmr';
- }
- async testwx(ctx) {
- try {
- const sck = 'https://scn.ink/';
- // 微信模板通知
- const tender = {
- data: {
- name: 'XXX标段',
- },
- info: {
- deal_info: {
- buildName: 'XX项目',
- },
- },
- };
- ctx.tender = tender;
- const stageInfo = await ctx.service.stage.getDataById(1704);
- const shenpiUrl = await ctx.helper.urlToShort(ctx.protocol + '://' + ctx.host + '/wap/tender/1998/stage/' + stageInfo.order);
- const wechatData = {
- wap_url: sck + shenpiUrl,
- qi: stageInfo.order,
- status: wxConst.status.success,
- tips: wxConst.tips.success,
- code: 'P1002',
- };
- // ctx.body = { tender, wechatData };
- await ctx.helper.sendWechat(133, smsTypeConst.const.JL, smsTypeConst.judge.result.toString(), wxConst.template.stage, wechatData);
- ctx.body = 'success';
- } catch (error) {
- console.log(error);
- ctx.body = error;
- }
- }
- }
- return WechatController;
- };
|