wechat_controller.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Ellisran
  6. * @date 2020/7/2
  7. * @version
  8. */
  9. const moment = require('moment');
  10. // const Controller = require('egg').Controller;
  11. const crypto = require('crypto');
  12. const maintainConst = require('../const/maintain');
  13. module.exports = app => {
  14. class WechatController extends app.BaseController {
  15. /**
  16. * 接入微信
  17. *
  18. * @param {Object} ctx - egg全局页面
  19. * @return {void}
  20. */
  21. async index(ctx) {
  22. try {
  23. const signature = ctx.query.signature;
  24. const timestamp = ctx.query.timestamp;
  25. const nonce = ctx.query.nonce;
  26. const echostr = ctx.query.echostr;
  27. const array = [ctx.app.config.wechatAll.token, timestamp, nonce];
  28. array.sort();
  29. const tempStr = array.join('');
  30. const hashCode = crypto.createHash('sha1');
  31. const resultCode = hashCode.update(tempStr, 'utf8').digest('hex');
  32. if (resultCode === signature) {
  33. ctx.body = echostr;
  34. // res.send(echostr);
  35. } else {
  36. throw '验证失败';
  37. }
  38. } catch (e) {
  39. console.log(e);
  40. }
  41. }
  42. /**
  43. * 微信登录验证
  44. *
  45. * @param {Object} ctx - egg全局页面
  46. * @return {void}
  47. */
  48. async oauth(ctx) {
  49. const url = await app.wechat.oauth.getAuthorizeURL('http://jluat.smartcost.com.cn/wx/bind', '', 'snsapi_userinfo');
  50. ctx.redirect(url);
  51. }
  52. /**
  53. * 绑定页面
  54. *
  55. * @param {Object} ctx - egg全局页面
  56. * @return {void}
  57. */
  58. async bind(ctx) {
  59. try {
  60. if (!ctx.session.wechatToken) {
  61. const token = await app.wechat.oauth.getAccessToken(ctx.query.code);
  62. ctx.session.wechatToken = token.data;
  63. }
  64. const user = await app.wechat.oauth.getUser(ctx.session.wechatToken.openid);
  65. const errorMessage = ctx.session.loginError;
  66. // 获取系统维护信息
  67. const maintainData = await ctx.service.maintain.getDataById(1);
  68. const renderData = {
  69. maintainData,
  70. maintainConst,
  71. errorMessage,
  72. user,
  73. };
  74. // ctx.body = renderData;
  75. await ctx.render('wechat/bind.ejs', renderData);
  76. } catch (e) {
  77. console.log(e);
  78. ctx.body = e;
  79. }
  80. }
  81. async bindwx(ctx) {
  82. try {
  83. const result = await ctx.service.projectAccount.accountCheck(ctx.request.body);
  84. if (!result) {
  85. throw '用户名或密码错误';
  86. }
  87. if (result === 2) {
  88. throw '该账号已被停用,请联系销售人员';
  89. }
  90. const accountData = result;
  91. if (accountData.wx_openid || ctx.session.wechatToken.openid === accountData.wx_openid) {
  92. throw '该账号已经绑定过微信';
  93. }
  94. const wxAccountData = await ctx.service.projectAccount.getDataByCondition({ wx_openid: ctx.session.wechatToken.openid });
  95. if (wxAccountData) {
  96. throw '该微信号已绑定过本项目账号';
  97. }
  98. const user = await app.wechat.oauth.getUser(ctx.session.wechatToken.openid);
  99. const result2 = await ctx.service.projectAccount.bindWx(accountData.id, ctx.session.wechatToken.openid, user.nickname);
  100. if (!result2) {
  101. throw '绑定失败';
  102. }
  103. ctx.body = '绑定成功';
  104. } catch (error) {
  105. this.log(error);
  106. ctx.session.loginError = error;
  107. ctx.redirect('/wx/bind');
  108. }
  109. }
  110. async oauthTxt(ctx) {
  111. ctx.body = 't3MkWAMqplVxPjmr';
  112. }
  113. }
  114. return WechatController;
  115. };