Commit ec228901 authored by 李尚科's avatar 李尚科
parents 15396eb1 0e9f4cf1
Pipeline #15275 passed with stage
in 36 seconds
'use strict';
const Controller = require('egg').Controller;
const crypto = require('crypto');
class WechatController extends Controller {
async test() {
const { ctx, service } = this;
await service.course.wechat.getAccessToken();
ctx.success();
}
async callbackAction() {
const { ctx, service } = this;
await service.course.wechat.callbackAction();
ctx.success('success');
}
async check() {
const { ctx } = this;
const params = ctx.request.query;
const {
signature,
timestamp,
nonce,
echostr,
} = params;
const array = [ '51gjj', timestamp, nonce ];
array.sort();
// 3.将三个参数字符串拼接成一个字符串进行sha1加密
const tempStr = array.join('');
const hashCode = crypto.createHash('sha1'); // 创建加密类型
const resultCode = hashCode.update(tempStr, 'utf8').digest('hex');
console.log(resultCode);
// 4.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
if (resultCode === signature) {
ctx.success(echostr);
} else {
ctx.success();
}
}
}
module.exports = WechatController;
...@@ -13,6 +13,7 @@ const OLDUSERID = Symbol('Context#oldUserId'); ...@@ -13,6 +13,7 @@ const OLDUSERID = Symbol('Context#oldUserId');
const USERID = Symbol('Context#userId'); const USERID = Symbol('Context#userId');
const OLDCOOKIE = Symbol('Context#oldCookie'); const OLDCOOKIE = Symbol('Context#oldCookie');
const USERUUID = Symbol('Context#userUuid'); const USERUUID = Symbol('Context#userUuid');
const OPENID = Symbol('Context#openId');
module.exports = { module.exports = {
failed(message) { failed(message) {
...@@ -177,6 +178,10 @@ module.exports = { ...@@ -177,6 +178,10 @@ module.exports = {
return this[USERUUID]; return this[USERUUID];
}, },
get openId() {
return this[OPENID];
},
setAppUserId(app_user_id) { setAppUserId(app_user_id) {
this[APPUSERID] = app_user_id; this[APPUSERID] = app_user_id;
}, },
...@@ -212,4 +217,8 @@ module.exports = { ...@@ -212,4 +217,8 @@ module.exports = {
setUserUuid(user_uuid) { setUserUuid(user_uuid) {
this[USERUUID] = user_uuid; this[USERUUID] = user_uuid;
}, },
setOpenId(openId) {
this[OPENID] = openId;
},
}; };
...@@ -2,26 +2,27 @@ ...@@ -2,26 +2,27 @@
module.exports = (options, app) => { module.exports = (options, app) => {
return async function (ctx, next) { return async function(ctx, next) {
const uuid = ctx.headers.uuid; const uuid = ctx.headers.uuid;
const key = 'course_user_session_' + uuid; const key = 'course_user_session_' + uuid;
const auth_info = await ctx.app.memcache.get(key); const auth_info = await ctx.app.memcache.get(key);
if (!auth_info) { if (!auth_info) {
// await next(); // await next();
// return; // return;
ctx.failed('login auth error'); ctx.failed('login auth error');
} }
const openid = auth_info.openid; const openid = auth_info.openid;
const user_uuid = auth_info.user_uuid; const user_uuid = auth_info.user_uuid;
const auth_token = ctx.headers.auth_token; const auth_token = ctx.headers.auth_token;
if (ctx.helper.md5(openid + uuid + 'jbwl') != auth_token) { if (ctx.helper.md5(openid + uuid + 'jbwl') != auth_token) {
ctx.failed('login auth error'); ctx.failed('login auth error');
} }
// console.info('11111111111111111111111111111111'); // console.info('11111111111111111111111111111111');
// console.info(auth_info); // console.info(auth_info);
ctx.setUserUuid(user_uuid); ctx.setUserUuid(user_uuid);
ctx.setOpenId(openid);
await next(); await next();
}; };
}; };
'use strict'; 'use strict';
module.exports = app => { module.exports = app => {
const router = app.router.namespace(app.config.projectRootPath + '/course'); const router = app.router.namespace(app.config.projectRootPath + '/course');
const loginAuth = app.middleware.loginAuth({ type: 'new' });//登录中间件 const loginAuth = app.middleware.loginAuth({ type: 'new' });// 登录中间件
const miniAuth = app.middleware.miniAuth();//因为不跟现有的用户中心系统,所以使用单独的登录中间件 const miniAuth = app.middleware.miniAuth();// 因为不跟现有的用户中心系统,所以使用单独的登录中间件
router.get('third', '/options', 'course.option.getOptions');//筛选项 router.get('third', '/options', 'course.option.getOptions');// 筛选项
router.post('third', '/address', miniAuth, 'course.location.getAddress');//根据经纬度或ip获取地理位置信息 router.post('third', '/address', miniAuth, 'course.location.getAddress');// 根据经纬度或ip获取地理位置信息
router.post('third', '/institutions', miniAuth, 'course.institution.institutionList');//机构列表 router.post('third', '/institutions', miniAuth, 'course.institution.institutionList');// 机构列表
router.get('third', '/institutions', miniAuth, 'course.institution.institutionList');//机构列表 router.get('third', '/institutions', miniAuth, 'course.institution.institutionList');// 机构列表
router.get('third', '/institution/:institution_id/:area_id', miniAuth, 'course.institution.institutionInfo');//机构详情 router.get('third', '/institution/:institution_id/:area_id', miniAuth, 'course.institution.institutionInfo');// 机构详情
router.post('third', '/classes', miniAuth, 'course.institution.classList');//课程列表 router.post('third', '/classes', miniAuth, 'course.institution.classList');// 课程列表
router.get('third', '/classes', miniAuth, 'course.institution.classList');//课程列表 router.get('third', '/classes', miniAuth, 'course.institution.classList');// 课程列表
router.get('third', '/class/:class_id', miniAuth, 'course.institution.classInfo');//课程详情 router.get('third', '/class/:class_id', miniAuth, 'course.institution.classInfo');// 课程详情
router.post('third', '/teachers', miniAuth, 'course.institution.teacherList');//老师列表 router.post('third', '/teachers', miniAuth, 'course.institution.teacherList');// 老师列表
router.get('third', '/teachers', miniAuth, 'course.institution.teacherList');//老师详情 router.get('third', '/teachers', miniAuth, 'course.institution.teacherList');// 老师详情
router.get('third', '/teacher/:teacher_id', miniAuth, 'course.institution.teacherInfo');//老师详情 router.get('third', '/teacher/:teacher_id', miniAuth, 'course.institution.teacherInfo');// 老师详情
router.post('third', '/user/auth', 'course.user.auth');//微信授权登录 router.post('third', '/user/auth', 'course.user.auth');// 微信授权登录
router.post('third', '/user/register_user', miniAuth, 'course.user.registerUserInfo');//授权后注册用户 router.post('third', '/user/register_user', miniAuth, 'course.user.registerUserInfo');// 授权后注册用户
router.get('third', '/user/baby', miniAuth, 'course.user.getBabyInfo');//获取baby信息 router.get('third', '/user/baby', miniAuth, 'course.user.getBabyInfo');// 获取baby信息
router.post('third', '/user/baby', miniAuth, 'course.user.saveBabyInfo');//保存baby信息 router.post('third', '/user/baby', miniAuth, 'course.user.saveBabyInfo');// 保存baby信息
router.delete('third', '/user/baby', miniAuth, 'course.user.delBabyInfo');//删除baby信息 router.delete('third', '/user/baby', miniAuth, 'course.user.delBabyInfo');// 删除baby信息
router.get('third', '/user/collection/institution', miniAuth, 'course.user.getCollectInstitutions');//收藏的机构列表 router.get('third', '/user/collection/institution', miniAuth, 'course.user.getCollectInstitutions');// 收藏的机构列表
router.post('third', '/user/collection/institution', miniAuth, 'course.user.collectInstitution');//收藏机构 router.post('third', '/user/collection/institution', miniAuth, 'course.user.collectInstitution');// 收藏机构
router.delete('third', '/user/collection/institution', miniAuth, 'course.user.delCollectInstitution');//取消收藏机构 router.delete('third', '/user/collection/institution', miniAuth, 'course.user.delCollectInstitution');// 取消收藏机构
router.get('third', '/wechat/callbackAction', 'course.wechat.check');
router.post('third', '/wechat/callbackAction', 'course.wechat.callbackAction');
}; };
...@@ -56,10 +56,8 @@ class InstitutionService extends Service { ...@@ -56,10 +56,8 @@ class InstitutionService extends Service {
// const area_lbs = await this.computeDistance(institution_area_list, { lat, lng });// 计算距离信息 // const area_lbs = await this.computeDistance(institution_area_list, { lat, lng });// 计算距离信息
const area_distance_list = await this.calcDistance(institution_area_list, { lat, lng }, page, distance); const area_distance_list = await this.calcDistance(institution_area_list, { lat, lng }, page, distance);
const area_distance = area_distance_list.rows; const area_distance = area_distance_list.rows;
console.log(area_distance); console.log(area_distance_list);
console.log(distance);
const institution_areas = await this.computeDistance(area_distance, { lat, lng }); const institution_areas = await this.computeDistance(area_distance, { lat, lng });
console.log(institution_areas.length);
for (const i in institution_areas) { for (const i in institution_areas) {
area_distance[i].distance = Number(institution_areas[i].distance) === 0 ? 999999999.0 : parseFloat(institution_areas[i].distance); area_distance[i].distance = Number(institution_areas[i].distance) === 0 ? 999999999.0 : parseFloat(institution_areas[i].distance);
area_distance[i].duration = institution_areas[i].duration; area_distance[i].duration = institution_areas[i].duration;
...@@ -425,7 +423,7 @@ class InstitutionService extends Service { ...@@ -425,7 +423,7 @@ class InstitutionService extends Service {
ctx.failed(error); ctx.failed(error);
}); });
const ret = []; let ret = [];
for (const i in result) { for (const i in result) {
const tmp = lbs_array[i]; const tmp = lbs_array[i];
tmp.distance = result[i]; tmp.distance = result[i];
...@@ -438,6 +436,8 @@ class InstitutionService extends Service { ...@@ -438,6 +436,8 @@ class InstitutionService extends Service {
return a.distance - b.distance; return a.distance - b.distance;
}; };
ret = R.sort(sort)(ret);
const institutions = []; const institutions = [];
for (const v of ret) { for (const v of ret) {
if (!institutions[v.id] && !ctx.isEmpty(v)) { if (!institutions[v.id] && !ctx.isEmpty(v)) {
......
'use strict';
const Service = require('egg').Service;
const APPID = 'wx4769ebba9b91f8ec';
const SECRET = '680440637b4e38c9b66529cfd5dc590e';
class WechatService extends Service {
async getAccessToken() {
const { ctx } = this;
const url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + APPID + '&secret=' + SECRET;
// 先从redis中取
let token = await this.app.memcache.get('wechat_course_accessToken');
if (ctx.isEmpty(token)) {
const resp = await ctx.helper.send_request(url, {}, { method: 'GET' });
if (resp.status === 200 && !ctx.isEmpty(resp.data) && !ctx.isEmpty(resp.data.access_token)) {
token = resp.data.access_token;
await this.app.memcache.set('wechat_course_accessToken', token, resp.data.expires_in);
}
}
return token;
}
async callbackAction() {
const { ctx } = this;
ctx.logger.info('course_wechat_receive: ' + JSON.stringify(ctx.request.body));
await this.sendMsg(ctx.request.body);
}
async sendMsg(data) {
const { ctx } = this;
if (ctx.isEmpty(data)) {
return;
}
//只有MsgType为miniprogrampage才发送
if (ctx.isEmpty(data.MsgType) || ctx.isEmpty(data.Title) || data.MsgType !== 'miniprogrampage' || data.Title !== '趣选课') {
return;
}
const token = await this.getAccessToken();
const url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=' + token;
const params = {
access_token: token,
touser: data.FromUserName,
msgtype: 'text',
text: { content: 'hello world' },
};
const resp = await ctx.helper.send_request(url, params, { method: 'POST' });
ctx.logger.info('course_wechat_resp: ' + JSON.stringify(resp));
return;
}
}
module.exports = WechatService;
...@@ -194,8 +194,8 @@ class NewHouseService extends Service { ...@@ -194,8 +194,8 @@ class NewHouseService extends Service {
description: data.description || '',//描述 description: data.description || '',//描述
tags: data.tags ? eval(data.tags) : [],//项目特色 tags: data.tags ? eval(data.tags) : [],//项目特色
favourable_info: data.favourable_info || '',//优惠 favourable_info: data.favourable_info || '',//优惠
reference_avg_price: data.reference_avg_price === 0 ? '--' : Number(data.reference_avg_price),//均价 reference_avg_price: Number(data.reference_avg_price) === 0 ? '--' : Number(data.reference_avg_price),//均价
reference_total_price: data.reference_total_price === 0 ? '--' : Number(data.reference_total_price),//总价 reference_total_price: Number(data.reference_total_price) === 0 ? '--' : Number(data.reference_total_price),//总价
property_type: data.house_type.split(',').slice(0, 2),//物业类型 property_type: data.house_type.split(',').slice(0, 2),//物业类型
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment