| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 | 
							- '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,
 
-                 };
 
-                 await ctx.render('wechat/bind.ejs', renderData);
 
-             } catch (e) {
 
-                 const renderData = {
 
-                     status: 1,
 
-                     msg: e,
 
-                 };
 
-                 await ctx.render('wechat/tips.ejs', renderData);
 
-             }
 
-         }
 
-         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({ project_id: accountData.project_id, wx_openid: ctx.session.wechatToken.openid });
 
-                 if (wxAccountData) {
 
-                     throw '该微信号已绑定过本项目账号';
 
-                 }
 
-                 const user = await app.wechat.api.getUser(ctx.session.wechatToken.openid);
 
-                 if (user.subscribe === 0) {
 
-                     throw '先关注公众号才能绑定项目';
 
-                 }
 
-                 const result2 = await ctx.service.projectAccount.bindWx(accountData.id, ctx.session.wechatToken.openid, user.nickname, user.unionid);
 
-                 if (!result2) {
 
-                     throw '绑定失败';
 
-                 }
 
-                 const projectData = await ctx.service.project.getDataById(accountData.project_id);
 
-                 // 绑定成功通知
 
-                 const templateId = 'JGJeWU2FT4syWKUE5haEf3iiqaRJ1XrsxY1PKixqLpw';
 
-                 const url = '';
 
-                 const msgData = {
 
-                     first: {
 
-                         value: '您好,纵横云计量与微信绑定成功。',
 
-                     },
 
-                     keyword1: {
 
-                         value: projectData.code,
 
-                     },
 
-                     keyword2: {
 
-                         value: accountData.account,
 
-                     },
 
-                     keyword3: {
 
-                         value: moment(new Date()).format('YYYY-MM-DD'),
 
-                     },
 
-                     remark: {
 
-                         value: '感谢您的使用。',
 
-                     },
 
-                 };
 
-                 await app.wechat.api.sendTemplate(ctx.session.wechatToken.openid, templateId, url, '', msgData);
 
-                 const renderData = {
 
-                     status: 0,
 
-                     msg: '绑定成功',
 
-                 };
 
-                 await ctx.render('wechat/tips.ejs', renderData);
 
-             } 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) {
 
-                 const renderData = {
 
-                     status: 1,
 
-                     msg: error,
 
-                 };
 
-                 await ctx.render('wechat/tips.ejs', renderData);
 
-             }
 
-         }
 
-         async project(ctx) {
 
-             try {
 
-                 // const user = await app.wechat.oauth.getUser(ctx.session.wechatToken.openid);
 
-                 const openid = ctx.session.wechatToken.openid;
 
-                 // const openid = 'fasdfklahsdklf';
 
-                 const paList = await ctx.service.projectAccount.getAllDataByCondition({ where: { wx_openid: openid } });
 
-                 const pidList = ctx.app._.uniq(ctx.app._.map(paList, 'project_id'));
 
-                 const pList = [];
 
-                 const redirect_url = ctx.protocol + '://' + ctx.host + '/wap/dashboard';
 
-                 for (const p of pidList) {
 
-                     const pro = await ctx.service.project.getDataById(p);
 
-                     pList.push(pro);
 
-                 }
 
-                 if (pList.length === 0) {
 
-                     throw '该微信号未绑定任何项目';
 
-                 }
 
-                 // 获取系统维护信息
 
-                 const maintainData = await ctx.service.maintain.getDataById(1);
 
-                 const renderData = {
 
-                     maintainData,
 
-                     maintainConst,
 
-                     // user,
 
-                     pList,
 
-                     redirect_url,
 
-                 };
 
-                 // ctx.body = renderData;
 
-                 await ctx.render('wechat/project.ejs', renderData);
 
-             } catch (e) {
 
-                 const renderData = {
 
-                     status: 1,
 
-                     msg: e,
 
-                 };
 
-                 await ctx.render('wechat/tips.ejs', renderData);
 
-             }
 
-         }
 
-         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;
 
- };
 
 
  |