Authored by 郭成尧

alipay-ok

... ... @@ -11,7 +11,7 @@ const payModel = require(`${mRoot}/pay`);
const headerModel = require('../../../doraemon/models/header'); // 头部model
const co = require('bluebird').coroutine;
const helpers = global.yoho.helpers;
const Alipay = require('../helpers/pay/alipay');
const Payment = require('../helpers/payment');
/**
* 支付中心
... ... @@ -100,7 +100,7 @@ const goAlipay = (req, res) => {
payment: paymentType
});
let payRequestPars = Alipay.pay(user, orderDetail, paymentType, req.protocol);
let payRequestPars = Payment.pay(user, orderDetail, paymentType, req.protocol);
if (!payRequestPars) {
return res.json({
... ...
/**
* 各种支付的入口
*
* @author: jiangfeng<jeff.jiang@yoho.cn>
* @date: 16/7/22
*/
'use strict';
const PayData = require('../models/pay');
const OrderData = require('../models/order');
const Alipay = require('./pay/alipay');
const Wechat = require('./pay/wechat');
const Promise = require('bluebird');
const common = require('./pay/common');
const co = Promise.coroutine;
const logger = global.yoho.logger;
const Payment = {
pay(user, order, payType, protocol) {
return co(function*() {
let result = {
code: 400,
message: '获取支付方式信息失败'
};
let paymentPars = payType.split('_');
let payInfo;
let bankCode = '';
if (paymentPars.length !== 2) {
return result;
}
if (!order.order_code) {
result.message = '没有找到该订单';
return result;
}
if (order.is_cancel && order.is_cancel === 'Y') {
result.message = '该订单已经取消';
return result;
}
if (order.pay_expire && common.getPayExpireMin(order.pay_expire) <= 0) {
result.message = '当前订单不可支付'; // 该订单已超过2个小时
return result;
}
let method = paymentPars[0] * 1;
if (method === PayData.payments.wechat) {
// 如果是微信支付,不需要调用获取支付方式详情接口
result = yield Wechat.pay(user, order, { id: PayData.payments.wechat });
} else {
payInfo = yield PayData.getPaymentInfo(method);
if (!payInfo.payParams) {
return result;
}
switch (payInfo.id) {
case PayData.payments.alipay:
result = Alipay.pay(user, order, payInfo, protocol);
break;
default:
break;
}
}
logger.info(`pay to url, params = ${JSON.stringify(result)}`);
if (result.code === 200) {
let updateInfo = yield Payment.beforePay(user, order, method, bankCode);
if (updateInfo && updateInfo.code !== 200) {
return updateInfo;
}
}
return result;
})();
},
beforePay(user, order, method, bankCode) {
return Promise.all([
OrderData.updateOrderPayment(order.order_code, method, user.uid),
PayData.getBankByOrder(order.order_code)
]).then(result => {
let paymentRecord = result[0];
let bankRecord = result[1];
if (!paymentRecord || paymentRecord.code !== 200) {
let message = paymentRecord && paymentRecord.message ? paymentRecord.message : '系统繁忙,请稍后再试';
return { code: 400, message: message };
}
if (bankRecord && bankRecord.bankCode) {
return PayData.updateOrderPayBank(order.order_code, method, bankCode);
} else {
return PayData.setOrderPayBank(order.order_code, method, bankCode);
}
}).catch(e => {
logger.error('update order pay info error.', e);
return Promise.resolve({
code: 400,
message: '更新订单支付信息失败'
});
});
},
afterPay(query, payId, user) {
return co(function*() {
let payInfo = yield PayData.getPaymentInfo(payId);
let payResult = {};
let payData = {};
let payName = '';
if (payId === PayData.payments.alipay) {
payResult = Alipay.notify(query, payInfo);
} else if (payId === PayData.payments.alibank) {
payResult = Alibank.notify(query, payInfo);
}
payResult.bankName = payName = payResult.bankName || payInfo.payName || '';
payResult.bankCode = payResult.bankCode || payInfo.pay_code || '';
//记录日志
logger.info(`\r\n\r\n pay back confirmreq = ${JSON.stringify({
query: query,
payId: payId,
user: user,
payResult: payResult
})}`);
if (payResult && payResult.payResult === 200) {
if (payResult.orderCode) {
logger.info('pay back confirm');
yield PayData.sendPayConfirm(payResult.orderCode, payId, user.uid);
}
payData = yield PayData.procOrderData(payResult, user.uid);
} else {
payData = {
code: 500,
message: '支付失败'
};
}
payData.payName = payName;
return payData;
})();
}
};
module.exports = Payment;
\ No newline at end of file
... ...