pay.js 2.26 KB
/**
 * 订单支付
 * @author: jiangfeng<jeff.jiang@yoho.cn>
 * @date: 2016/07/18
 */

'use strict';

const PayData = require('../models/pay');
const OrderData = require('../models/order');
const PayHelpers = require('../helpers/payment');
const camelCase = global.yoho.camelCase;
const helpers = global.yoho.helpers;


/**
 * 支付页
 * @param req
 * @param res
 * @param next
 */
const online = (req, res, next) => {
    let orderCode = req.query.code;
    let uid = req.user.uid;

    PayData.getPayInfo(uid, orderCode).then(result => {
        res.display('pay', Object.assign({
            defaultHeader: false,
            module: 'shopping',
            page: 'pay',
            title: '支付页面',
            username: req.user.username
        }, result));
    }).catch(next);

};

/**
 * 获取第三方支付跳转url
 * @param req
 * @param res
 * @param next
 */
const toPay = (req, res, next) => {
    let orderCode = req.body.code;
    let method = req.body.method;
    let uid = req.user.uid;
    let user = req.user;

    method = parseInt(method, 10);

    OrderData.orderDetail(uid, orderCode).then(result => {
        if (result && result.data) {
            let order = camelCase(result.data);

            return PayHelpers.pay(user, order, method);
        } else {
            return {
                code: 400,
                message: '获取订单失败'
            };
        }
    }).then(result => {
        res.json(result);
    }).catch(next);
};

/**
 * 支付成功回调
 * @param req
 * @param res
 */
const callback = (req, res) => {
    let type = req.params.type;
    let payId = PayData.payments[type];
    let query = req.query;

    PayHelpers.afterPay(query, payId, req.user).then(result => {
        if (result.code === 200) {
            let data = result.data;

            res.display('pay-success', {
                defaultHeader: false,
                content: {
                    cost: data.pay,
                    orderNum: data.orderCode,
                    onlineCost: data.pay,
                    orderHref: helpers.urlFormat('/me/order/detail', {code: data.orderCode}),
                    walkHref: helpers.urlFormat('/')
                }
            });
        }
    });

};


module.exports = {
    online,
    callback,
    toPay
};