|
|
/**
|
|
|
* 支付成功页
|
|
|
* 支付
|
|
|
* @author: jing.li<jing.li@yoho.cn>
|
|
|
* @date: 2016/10/25
|
|
|
*/
|
...
|
...
|
@@ -10,7 +10,18 @@ const api = global.yoho.API; |
|
|
const serviceAPI = global.yoho.ServiceAPI;
|
|
|
const utils = '../../../utils';
|
|
|
const productProcess = require(`${utils}/product-process`);
|
|
|
const payApi = require('./pay-api');
|
|
|
const helpers = global.yoho.helpers;
|
|
|
const _ = require('lodash');
|
|
|
const co = require('bluebird').coroutine;
|
|
|
const logger = global.yoho.logger;
|
|
|
|
|
|
// 支付方式
|
|
|
const payments = {
|
|
|
alipay: 33,
|
|
|
wechat: 36,
|
|
|
alibank: 42
|
|
|
};
|
|
|
|
|
|
// 资源位
|
|
|
const _getBanner = (param) => {
|
...
|
...
|
@@ -51,7 +62,8 @@ const _getOtherDetail = (param) => { |
|
|
return api.get('', {
|
|
|
method: 'app.SpaceOrders.detail',
|
|
|
uid: param.uid,
|
|
|
order_code: param.orderCode
|
|
|
order_code: param.orderCode,
|
|
|
session_key: param.sessionKey
|
|
|
}, {
|
|
|
code: 200
|
|
|
}).then((result) => {
|
...
|
...
|
@@ -73,7 +85,7 @@ const _getOthersBuy = (param) => { |
|
|
goodSkn = result[0].data.order_goods[0].product_skn;
|
|
|
}
|
|
|
|
|
|
return _getOthersBuy2(Object.assign(param, {skn: goodSkn}));
|
|
|
return _getOthersBuy2(Object.assign(param, { skn: goodSkn }));
|
|
|
|
|
|
}).then((result) => {
|
|
|
|
...
|
...
|
@@ -82,29 +94,224 @@ const _getOthersBuy = (param) => { |
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 支付中心
|
|
|
* @param params
|
|
|
* 获取订单支付银行信息
|
|
|
* @param id
|
|
|
*/
|
|
|
const payCenter = (params) => {
|
|
|
return Promise.resolve({
|
|
|
payList: [
|
|
|
{
|
|
|
const getBankByOrder = (id) => {
|
|
|
return co(function*() {
|
|
|
let result = yield payApi.getBankByOrder(id);
|
|
|
|
|
|
if (result && result.code === 200 && result.data) {
|
|
|
return result.data;
|
|
|
}
|
|
|
return {};
|
|
|
})();
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 设置订单支付银行
|
|
|
* @param code
|
|
|
* @param payment
|
|
|
* @param bankCode
|
|
|
*/
|
|
|
const setOrderPayBank = (code, payment, bankCode) => {
|
|
|
return co(function*() {
|
|
|
let data = yield payApi.setOrderPayBank(code, payment, bankCode);
|
|
|
|
|
|
return data;
|
|
|
})();
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 获取支付方式的相关参数, (密钥等信息)
|
|
|
* @param id
|
|
|
*/
|
|
|
const getPaymentInfo = (id) => {
|
|
|
return co(function*() {
|
|
|
let result = yield payApi.getPaymentInfo(id);
|
|
|
|
|
|
if (result && result.code === 200 && result.data) {
|
|
|
return result.data;
|
|
|
}
|
|
|
return {};
|
|
|
})();
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 支付确认
|
|
|
* @param code
|
|
|
* @param payment
|
|
|
* @param uid
|
|
|
*/
|
|
|
const sendPayConfirm = (code, payment, uid) => {
|
|
|
return co(function*() {
|
|
|
let data = yield payApi.sendPayConfirm(code, payment, uid);
|
|
|
|
|
|
return data;
|
|
|
})();
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 更新订单支付方式
|
|
|
* @param code
|
|
|
* @param payment
|
|
|
* @param uid
|
|
|
* @returns {*}
|
|
|
*/
|
|
|
const updateOrderPayment = (code, payment, uid) => {
|
|
|
return api.get('', {
|
|
|
method: 'app.SpaceOrders.updateOrdersPaymentByCode',
|
|
|
order_code: code,
|
|
|
payment: payment,
|
|
|
uid: uid
|
|
|
});
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 更新订单支付银行
|
|
|
* @param code
|
|
|
* @param payment
|
|
|
* @param bankCode
|
|
|
*/
|
|
|
const updateOrderPayBank = (code, payment, bankCode) => {
|
|
|
return co(function*() {
|
|
|
let data = yield payApi.updateOrderPayBank(code, payment, bankCode);
|
|
|
|
|
|
return data;
|
|
|
})();
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 支付成功,前端回调时,处理订单信息
|
|
|
* @param payResult
|
|
|
* @param uid
|
|
|
* @param sessionKey
|
|
|
*/
|
|
|
const procOrderData = (payResult, uid, sessionKey) => {
|
|
|
return co(function*() {
|
|
|
let orderCode = payResult.orderCode;
|
|
|
let result = { code: 400, message: '' };
|
|
|
|
|
|
if (!orderCode) {
|
|
|
result.message = '未查到订单信息,订单状态更新失败!';
|
|
|
return result;
|
|
|
} else {
|
|
|
let orderInfo = yield _getOtherDetail({
|
|
|
uid: uid,
|
|
|
orderCode: orderCode,
|
|
|
sessionKey: sessionKey
|
|
|
});
|
|
|
|
|
|
if (orderInfo && orderInfo.data) {
|
|
|
let order = orderInfo.data;
|
|
|
let amount = order.payment_amount;
|
|
|
|
|
|
if (order.is_cancel === 'Y') {
|
|
|
logger.warn('front pay success but order is cancel.', { payResult: payResult, order: order });
|
|
|
|
|
|
payApi.sendMessage(order.mobile, 'error_sms', '支付成功,但订单已取消,订单号为' + orderCode);
|
|
|
return { code: 417, message: '支付成功,但订单已取消,需联系客服!' };
|
|
|
}
|
|
|
|
|
|
if (order.payment_status === 'N') {
|
|
|
logger.warn('front pay success but may be notify fail');
|
|
|
}
|
|
|
|
|
|
if (_.round(parseFloat(amount), 2) !== _.round(parseFloat(payResult.totalFee), 2)) {
|
|
|
logger.warn('front pay success but the amount is not same.', { payResult: payResult, order: order });
|
|
|
return {
|
|
|
code: 415,
|
|
|
message: '支付金额与订单金额不一致,订单状态更新失败!'
|
|
|
};
|
|
|
}
|
|
|
|
|
|
return {
|
|
|
code: 200,
|
|
|
message: '支付成功,请等待发货',
|
|
|
data: {
|
|
|
order: order
|
|
|
}
|
|
|
};
|
|
|
|
|
|
} else {
|
|
|
result.message = '未查到订单信息,订单状态更新失败!';
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
})();
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 支付相关的数据处理函数
|
|
|
*/
|
|
|
const payTool = {
|
|
|
|
|
|
/**
|
|
|
* 支持的支付方式列表
|
|
|
* @returns {[*,*]}
|
|
|
*/
|
|
|
payAppInfo(orderCode) {
|
|
|
return [{
|
|
|
appIcon: '',
|
|
|
payLink: helpers.urlFormat('/shopping/pay/index'),
|
|
|
payLink: helpers.urlFormat('/cart/index/new/pay/goalipay', {
|
|
|
payment: payments.alipay + '_platform',
|
|
|
order_code: orderCode
|
|
|
}),
|
|
|
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(params.orderCode),
|
|
|
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
|
|
|
};
|
|
|
});
|
|
|
};
|
|
|
|
...
|
...
|
@@ -181,6 +388,15 @@ const getPayAli = (param) => { |
|
|
};
|
|
|
|
|
|
module.exports = {
|
|
|
payments,
|
|
|
getOtherDetail: _getOtherDetail,
|
|
|
updateOrderPayment,
|
|
|
updateOrderPayBank,
|
|
|
getBankByOrder,
|
|
|
getPaymentInfo,
|
|
|
setOrderPayBank,
|
|
|
sendPayConfirm,
|
|
|
procOrderData,
|
|
|
payCenter,
|
|
|
getPayCod,
|
|
|
getPayAli
|
...
|
...
|
|