pay.js 4.57 KB
/**
 * 支付
 * @author: jing.li<jing.li@yoho.cn>
 * @date: 2016/10/25
 */

'use strict';

const mRoot = '../models';
const payModel = require(`${mRoot}/pay`);
const headerModel = require('../../../doraemon/models/header'); // 头部model
const co = require('bluebird').coroutine;
const helpers = global.yoho.helpers;
const Payment = require('../helpers/payment');

/**
 * 支付中心
 * @param req
 * @param res
 * @param next
 */
const payCenter = (req, res, next) => {
    let orderCode = req.query.order_code;
    let uid = req.user.uid;
    let sessionKey = req.session.TOKEN;

    if (!orderCode || !uid) {
        res.redirect('/');
    }

    if (sessionKey) {
        sessionKey = sessionKey.substr(0, sessionKey.length - 8);
    }

    let headerData = headerModel.setNav({
        navTitle: '支付中心'
    });

    let responseData = {
        pageHeader: headerData,
        module: 'cart',
        page: 'pay',
        title: '支付中心 | Yoho!Buy有货 | 潮流购物逛不停'
    };

    payModel.payCenter({
        orderCode: orderCode,
        uid: uid,
        sessionKey: sessionKey
    }).then(result => {
        res.render('pay/pay-center', Object.assign(responseData, result, {
            isOldUser: Boolean(req.cookies._isOldUser && req.cookies._isOldUser === '4'),
        }));
    }).catch(next);


};

/**
 * 支付宝跳转页
 * @param req
 * @param res
 */
const goAlipay = (req, res, next) => {
    let orderCode = req.query.order_code;
    let user = req.user;
    let uid = req.user.uid;
    let sessionKey = req.session.TOKEN;
    let payment = req.query.payment;

    if (!orderCode || !uid || !sessionKey) {
        res.redirect('/');
    }

    co(function*() {
        let orderDetail = yield payModel.getOtherDetail({
            uid: uid,
            orderCode: orderCode,
            sessionKey: sessionKey
        });

        if (!orderDetail || !orderDetail.data) {
            return res.json({
                code: 400,
                msg: '没有找到该订单!'
            });
        }

        if (orderDetail.data.is_cancel === 'Y') {
            let url = helpers.urlFormat('/home/orders/detail', { order_code: orderCode });

            return res.json({
                code: 400,
                msg: '订单已经取消'
            }).redirect(url);
        }

        Payment.pay(user, orderDetail.data, payment, req.protocol).then(result => {
            if (result && result.data && result.data.href) {
                res.redirect(result.data.href);
            } else {
                res.redirect('/');
            }
        }).catch(next);
    })();
};

// 货到付款
const payCod = (req, res, next) => {
    let headerData = headerModel.setNav({
        navTitle: '支付完成'
    });

    let responseData = {
        pageHeader: headerData,
        module: 'cart',
        page: 'pay',
        title: '支付中心 | Yoho!Buy有货 | 潮流购物逛不停'
    };

    let sessionKey = req.session.TOKEN;


    let param = {
        uid: req.user.uid,
        udid: req.sessionID || require('md5')(req.ip) || 'yoho',
        orderCode: req.query.order_code,
        contentCode: '05afedf76886d732573f10f7451a1703',
        client_id: req.cookies._yasvd || '',
        sessionKey: sessionKey && sessionKey.substr(0, sessionKey.length - 8) || ''
    };

    // 如果没有uid,跳转到首页
    if (!param.uid) {
        res.redirect('/');
        return;
    }

    payModel.getPayCod(param).then(result => {
        if (result.match === true) {
            res.render('pay/pay-cod', Object.assign(responseData, result));
        } else {
            res.redirect('/');
        }

    }).catch(next);
};

// 支付宝支付结果页
const payAli = (req, res, next) => {
    let headerData = headerModel.setNav({
        navTitle: '支付完成'
    });

    let responseData = {
        pageHeader: headerData,
        module: 'cart',
        page: 'pay',
        title: '支付中心 | Yoho!Buy有货 | 潮流购物逛不停'
    };

    let param = {
        uid: req.user.uid,
        udid: req.sessionID || require('md5')(req.ip) || 'yoho',
        orderCode: req.query.out_trade_no,
        contentCode: '05afedf76886d732573f10f7451a1703'
    };

    // 如果没有uid,跳转到首页
    if (!param.uid) {
        res.redirect('/');
        return;
    }

    payModel.getPayAli(param).then(result => {
        if (result.match === true) {
            res.render('pay/pay-ali', Object.assign(responseData, result));
        } else {
            res.redirect('/');
        }

    }).catch(next);
};

module.exports = {
    payCenter,
    goAlipay,
    payCod,
    payAli
};