invite.js 6.98 KB
/**
 * 邀请好友赢福利
 * <xiaoxiao.hao@yoho.cn>
 * 2016/07/13
 */
'use strict';
const inviteModel = require('../models/invite');
const inviteTitle = {
    vipDay: '有货会员日 赢更多福利',
    normal: '有货 邀请好友赢福利'
};
const _ = require('lodash');
const md5 = require('yoho-md5');
const secretKey = '5466ee572bcbc75830d044e66ab429bc';// 秘钥


/*
    判断邀请 好友 类型
 */
exports.checkType = function(req, res, next) {
    req.ctx(inviteModel).checkType()
        .then(function(result) {
            if (result.code === 200 && result.data) {
                res.locals.isVipDay = true;
                res.locals.title = inviteTitle.vipDay;
            } else {
                res.locals.isVipDay = false;
                res.locals.title = inviteTitle.normal;
            }

            return next();
        })
        .catch(next);
};


// 简介、好友领取列表页面
exports.index = (req, res, next) => {
    let actId = req.query.act_id * 1 || 0;
    let uid = req.user.uid || req.query.uid || 0;
    let renderPage = 'invite/list';

    req.ctx(inviteModel).index({
        uid: uid,
        activityId: actId
    }).then((result) => {

        // 非法参数跳到首页
        if (result.isGo) {
            res.redirect('/');
            return false;
        }

        if (result.isNil) {
            renderPage = 'invite/intro';
        }

        res.render(renderPage, {
            module: 'activity',
            page: 'invite',
            width750: true,
            result: result
        });
    }).catch(next);
};

// 微信好友获取红包方法(即分享出去的地址)页面
exports.share = (req, res, next) => {

    let shareUid = req.params[0];
    let actId = req.params[1];
    let nums = req.params[2];
    let shareUrl = req.ctx(inviteModel).createShareUrl(shareUid, actId, nums);
    let callback = 'http://m.yohobuy.com/activity/invite/getwxinfo?url=' + shareUrl;
    let url = req.ctx(inviteModel).getWxOauthUrl(callback);
    let wxUserInfo = req.cookies.wxUserInfo || {};

    if (_.isEmpty(wxUserInfo) || _.isEmpty(wxUserInfo.unionid)) {
        res.redirect(url);
        return false;
    }

    req.ctx(inviteModel).shareModel({
        uid: shareUid,
        activityId: actId,
        nums: nums,
        openId: wxUserInfo.unionid,
        nickName: wxUserInfo.nickname,
        headImgUrl: wxUserInfo.headimgurl
    }).then(result => {

        if (result.code * 1 !== 200) {
            res.redirect('/');
            return false;
        }

        if (_.isEmpty(result.data.list)) {
            res.render('invite/myshare', {
                module: 'activity',
                page: 'invite',
                result: {
                    shareUid: shareUid,
                    nums: nums,
                    actId: actId,
                    openId: wxUserInfo.unionid
                }
            });
        } else {
            // 是自己分享的连接
            res.render('invite/list', {
                module: 'activity',
                page: 'invite',
                result: result.data.list
            });
        }


    }).catch(next);
};

// 发送短信验证码API
exports.sendRegCodeToMobile = (req, res, next) => {
    let mobile = req.query.mobile || '';

    req.ctx(inviteModel).sendRegCodeToMobile({
        area: 86,
        mobile: mobile
    }).then((result) => {
        res.json(result);
    }).catch(next);
};

// 发送已注册用户参与活动的优惠券API
exports.checkOldUserCoupon = (req, res, next) => {
    let mobile = req.query.mobile || '';
    let actId = req.query.actId || '';

    req.ctx(inviteModel).checkOldUserCoupon({
        mobile: mobile,
        activityId: actId
    }).then((result) => {
        res.json(result);
    }).catch(next);
};

// 验证手机验证码是否正确API
exports.validRegCode = (req, res, next) => {
    let mobile = req.query.mobile || '';
    let code = req.query.code || '';

    req.ctx(inviteModel).validRegCode({
        area: 86,
        mobile: mobile,
        code: code
    }).then((result) => {
        res.json(result);
    }).catch(next);
};

// 手机注册账号API
exports.register = (req, res, next) => {
    let mobile = req.query.mobile || '';
    let activityName = req.query.activityName || 'invite';

    req.ctx(inviteModel).register({
        mobile: mobile,
        activityName: activityName
    }).then((result) => {
        res.json(result);
    }).catch(next);
};

// 领福利-领取优惠券API
exports.receiveCoupons = (req, res, next) => {
    let uid = req.user.uid || req.query.uid;
    let actId = req.query.actId;
    let nums = req.query.nums;
    let shareUid = req.query.shareUid;
    let openId = req.query.openId;

    req.ctx(inviteModel).receiveCoupons({
        uid: uid,
        activityId: actId,
        nums: nums,
        shareUid: shareUid,
        openId: openId
    }).then((result) => {
        if (result.code === 200) {
            result.data.goUrl = result.data.goUrl +
            '?amount=' + result.data.couponAmount +
            '&sign=' + md5(result.data.couponAmount + secretKey);
        }
        res.json(result);
    }).catch(next);
};

// 好友领取优惠券成功页面
exports.myCoupons = (req, res, next) => {
    let shareUid = req.params[0];
    let amount = req.params[1];
    let actId = req.params[2];
    let nums = req.params[3];
    let sign = req.query.sign;
    let uid = req.user.uid || req.query.uid || req.cookies.inviteUid || '';

    // 这个只是过滤一下非法的参数
    if (md5(amount + secretKey) !== sign || _.isEmpty(uid)) {
        res.redirect('/');
        return false;
    }

    req.ctx(inviteModel).myCoupons({
        uid: uid,
        shareUid: shareUid,
        nums: nums,
        amount: amount,
        activityId: actId
    }).then((result) => {
        // 非法参数跳到首页
        if (result[0].isGo || result[0].isEmpty) {
            res.redirect('/');
            return false;
        }

        res.render('invite/mycoupons', {
            module: 'activity',
            page: 'invite',
            result: result[0],
            userInfo: result[1],
            amount: amount
        });
    }).catch(next);
};

// 好友领取完页面
exports.shareover = (req, res) => {
    let amount = req.query.amount * 1 || 5;

    res.render('invite/shareover', {
        module: 'activity',
        page: 'invite',
        result: {
            amount: amount
        }
    });
};

// 接收微信返回后的信息
exports.getwxinfo = (req, res, next) => {
    let url = req.query.url;
    let code = req.query.code;

    req.ctx(inviteModel).getWxUserInfo({
        code: code
    }).then((result) => {
        if (result === false) {
            res.redirect('/');
        } else {
            res.cookie('wxUserInfo', result, {
                domain: 'yohobuy.com'
            });
            res.redirect(url);
        }
    }).catch(next);
};

// 活动结束页面
exports.over = (req, res) => {
    res.render('invite/over', {
        module: 'activity',
        page: 'invite',
        result: []
    });
};