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

'use strict';

const api = global.yoho.API;
const serviceAPI = global.yoho.ServiceAPI;
const utils = '../../../utils';
const productProcess = require(`${utils}/product-process`);
const helpers = global.yoho.helpers;
const _ = require('lodash');

// 资源位
const _getBanner = (param) => {
    return serviceAPI.get('operations/api/v5/resource/get', {
        content_code: param.contentCode
    }, {
        code: 200
    }).then((result) => {

        result = result.data;

        return result;
    });
};

// 购买此商品的用户也购买了
const _getOthersBuy2 = (param) => {
    return api.get('', {
        method: 'app.recommend.purchased',
        productSkn: param.skn,
        udid: param.uid,
        rec_pos: '100005',
        limit: 2,
        client_id: param.client_id
    }, {
        code: 200
    }).then((result) => {

        if (result && result.data && result.data.product_list) {
            return productProcess.processProductList(result.data.product_list);
        }

    });
};

// 订单信息
const _getOtherDetail = (param) => {
    return api.get('', {
        method: 'app.SpaceOrders.detail',
        uid: param.uid,
        order_code: param.orderCode,
        session_key: param.sessionKey
    }, {
        code: 200
    }).then((result) => {

        return result;

    });
};

// 购买此商品的用户也购买了,要先从订单详情获取商品skn
const _getOthersBuy = (param) => {
    return api.all([
        _getOtherDetail(param)
    ]).then((result) => {

        let goodSkn = '';

        if (result && result[0] && result[0].data && result[0].data.order_goods) {
            goodSkn = result[0].data.order_goods[0].product_skn;
        }

        return _getOthersBuy2(Object.assign(param, {skn: goodSkn}));

    }).then((result) => {

        return result;
    });
};

/**
 * 支付相关的数据处理函数
 */
const payTool = {

    /**
     * 支持的支付方式列表
     * @returns {[*,*]}
     */
    payAppInfo() {
        return [
            {
                appIcon: '',
                payLink: helpers.urlFormat('/shopping/pay/index'),
                appId: 'alipay',
                app: '支付宝支付',
                hint: '支付宝钱包支付',
                subHint: '推荐支付宝用户使用'
            },
            {
                appIcon: '',
                payLink: '',
                appId: 'weixin',
                app: '微信支付',
                hint: '推荐使用',
                subHint: ''
            }
        ];
    },

    /**
     * 计算购买商品总数量
     * @param goodsArray
     * @returns {number}
     * @private
     */
    calBuyNumCount(goodsArray) {
        let buyNumCount = 0;

        if (_.isArray(goodsArray)) {
            _.forEach(goodsArray, value => {
                buyNumCount = value.buy_number ? parseInt(value.buy_number, 10) : 0;
            });
        }

        return buyNumCount;
    }
};

/**
 * 支付中心
 * @param params
 */
const payCenter = (params) => {

    return _getOtherDetail({
        uid: params.uid,
        orderCode: params.orderCode
    }).then(result => {
        let resultData = _.get(result, 'data', {});

        return {
            payAppInfo: payTool.payAppInfo(),
            orderCode: params.orderCode,
            hasWxShare: true,
            orderTotal: resultData.payment_amount || 0,
            orderTotalFormat: parseInt(resultData.payment_amount, 10),
            orderCount: payTool.calBuyNumCount(resultData.order_goods),
            uid: params.uid
        };
    });
};

// 货到付款
const getPayCod = (param) => {
    return api.all([
        _getBanner(param),
        _getOthersBuy(param),
        _getOtherDetail(param)
    ]).then((result) => {

        let resu = {
            match: true,
            banner: [],
            othersBuy: []
        };

        if (result && result[0]) {
            resu.banner = result[0];
        }

        if (result && result[1]) {
            resu.othersBuy = result[1];
        }

        if (result && result[2] && result[2].data && result[2].data.payment_amount) {
            resu.payment = result[2].data.payment_amount;
        } else {
            resu.match = false;
        }

        resu.orderCode = param.orderCode;

        resu.orderUrl = '/home/orders/detail?order_code=' + param.orderCode;

        return resu;
    });
};

// 支付宝支付
const getPayAli = (param) => {
    return api.all([
        _getBanner(param),
        _getOthersBuy(param),
        _getOtherDetail(param)
    ]).then((result) => {

        let resu = {
            match: true,
            banner: [],
            othersBuy: []
        };

        if (result && result[0]) {
            resu.banner = result[0];
        }

        if (result && result[1]) {
            resu.othersBuy = result[1];
        }

        if (result && result[2] && result[2].data && result[2].data.payment_amount) {
            resu.payment = result[2].data.payment_amount;
        } else {
            resu.match = false;
        }

        resu.orderCode = param.orderCode;

        resu.orderUrl = '/home/orders/detail?order_code=' + param.orderCode;

        return resu;
    });
};

module.exports = {
    payCenter,
    getPayCod,
    getPayAli
};