Showing
2 changed files
with
161 additions
and
2 deletions
@@ -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({ |
apps/cart/helpers/payment.js
0 → 100644
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 confirm,req = ${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; |
-
Please register or login to post a comment