Authored by 郭成尧

alipay-ok

@@ -11,7 +11,7 @@ const payModel = require(`${mRoot}/pay`); @@ -11,7 +11,7 @@ const payModel = require(`${mRoot}/pay`);
11 const headerModel = require('../../../doraemon/models/header'); // 头部model 11 const headerModel = require('../../../doraemon/models/header'); // 头部model
12 const co = require('bluebird').coroutine; 12 const co = require('bluebird').coroutine;
13 const helpers = global.yoho.helpers; 13 const helpers = global.yoho.helpers;
14 -const Alipay = require('../helpers/pay/alipay'); 14 +const Payment = require('../helpers/payment');
15 15
16 /** 16 /**
17 * 支付中心 17 * 支付中心
@@ -100,7 +100,7 @@ const goAlipay = (req, res) => { @@ -100,7 +100,7 @@ const goAlipay = (req, res) => {
100 payment: paymentType 100 payment: paymentType
101 }); 101 });
102 102
103 - let payRequestPars = Alipay.pay(user, orderDetail, paymentType, req.protocol); 103 + let payRequestPars = Payment.pay(user, orderDetail, paymentType, req.protocol);
104 104
105 if (!payRequestPars) { 105 if (!payRequestPars) {
106 return res.json({ 106 return res.json({
  1 +/**
  2 + * 各种支付的入口
  3 + *
  4 + * @author: jiangfeng<jeff.jiang@yoho.cn>
  5 + * @date: 16/7/22
  6 + */
  7 +
  8 +'use strict';
  9 +
  10 +const PayData = require('../models/pay');
  11 +const OrderData = require('../models/order');
  12 +const Alipay = require('./pay/alipay');
  13 +const Wechat = require('./pay/wechat');
  14 +const Promise = require('bluebird');
  15 +const common = require('./pay/common');
  16 +const co = Promise.coroutine;
  17 +const logger = global.yoho.logger;
  18 +
  19 +const Payment = {
  20 + pay(user, order, payType, protocol) {
  21 + return co(function*() {
  22 + let result = {
  23 + code: 400,
  24 + message: '获取支付方式信息失败'
  25 + };
  26 + let paymentPars = payType.split('_');
  27 + let payInfo;
  28 + let bankCode = '';
  29 +
  30 + if (paymentPars.length !== 2) {
  31 + return result;
  32 + }
  33 +
  34 + if (!order.order_code) {
  35 + result.message = '没有找到该订单';
  36 + return result;
  37 + }
  38 +
  39 + if (order.is_cancel && order.is_cancel === 'Y') {
  40 + result.message = '该订单已经取消';
  41 + return result;
  42 + }
  43 +
  44 + if (order.pay_expire && common.getPayExpireMin(order.pay_expire) <= 0) {
  45 + result.message = '当前订单不可支付'; // 该订单已超过2个小时
  46 + return result;
  47 + }
  48 +
  49 + let method = paymentPars[0] * 1;
  50 +
  51 + if (method === PayData.payments.wechat) {
  52 + // 如果是微信支付,不需要调用获取支付方式详情接口
  53 + result = yield Wechat.pay(user, order, { id: PayData.payments.wechat });
  54 + } else {
  55 + payInfo = yield PayData.getPaymentInfo(method);
  56 +
  57 + if (!payInfo.payParams) {
  58 + return result;
  59 + }
  60 +
  61 + switch (payInfo.id) {
  62 + case PayData.payments.alipay:
  63 + result = Alipay.pay(user, order, payInfo, protocol);
  64 + break;
  65 + default:
  66 + break;
  67 + }
  68 + }
  69 +
  70 + logger.info(`pay to url, params = ${JSON.stringify(result)}`);
  71 +
  72 + if (result.code === 200) {
  73 + let updateInfo = yield Payment.beforePay(user, order, method, bankCode);
  74 +
  75 + if (updateInfo && updateInfo.code !== 200) {
  76 + return updateInfo;
  77 + }
  78 + }
  79 +
  80 + return result;
  81 + })();
  82 + },
  83 +
  84 + beforePay(user, order, method, bankCode) {
  85 + return Promise.all([
  86 + OrderData.updateOrderPayment(order.order_code, method, user.uid),
  87 + PayData.getBankByOrder(order.order_code)
  88 + ]).then(result => {
  89 + let paymentRecord = result[0];
  90 + let bankRecord = result[1];
  91 +
  92 + if (!paymentRecord || paymentRecord.code !== 200) {
  93 + let message = paymentRecord && paymentRecord.message ? paymentRecord.message : '系统繁忙,请稍后再试';
  94 +
  95 + return { code: 400, message: message };
  96 + }
  97 +
  98 + if (bankRecord && bankRecord.bankCode) {
  99 + return PayData.updateOrderPayBank(order.order_code, method, bankCode);
  100 + } else {
  101 + return PayData.setOrderPayBank(order.order_code, method, bankCode);
  102 + }
  103 +
  104 + }).catch(e => {
  105 + logger.error('update order pay info error.', e);
  106 +
  107 + return Promise.resolve({
  108 + code: 400,
  109 + message: '更新订单支付信息失败'
  110 + });
  111 + });
  112 + },
  113 +
  114 + afterPay(query, payId, user) {
  115 + return co(function*() {
  116 + let payInfo = yield PayData.getPaymentInfo(payId);
  117 + let payResult = {};
  118 + let payData = {};
  119 + let payName = '';
  120 +
  121 + if (payId === PayData.payments.alipay) {
  122 + payResult = Alipay.notify(query, payInfo);
  123 + } else if (payId === PayData.payments.alibank) {
  124 + payResult = Alibank.notify(query, payInfo);
  125 + }
  126 +
  127 + payResult.bankName = payName = payResult.bankName || payInfo.payName || '';
  128 + payResult.bankCode = payResult.bankCode || payInfo.pay_code || '';
  129 +
  130 + //记录日志
  131 + logger.info(`\r\n\r\n pay back confirmreq = ${JSON.stringify({
  132 + query: query,
  133 + payId: payId,
  134 + user: user,
  135 + payResult: payResult
  136 + })}`);
  137 +
  138 + if (payResult && payResult.payResult === 200) {
  139 + if (payResult.orderCode) {
  140 + logger.info('pay back confirm');
  141 + yield PayData.sendPayConfirm(payResult.orderCode, payId, user.uid);
  142 + }
  143 +
  144 + payData = yield PayData.procOrderData(payResult, user.uid);
  145 + } else {
  146 + payData = {
  147 + code: 500,
  148 + message: '支付失败'
  149 + };
  150 + }
  151 +
  152 + payData.payName = payName;
  153 +
  154 + return payData;
  155 + })();
  156 + }
  157 +};
  158 +
  159 +module.exports = Payment;