Showing
6 changed files
with
136 additions
and
41 deletions
@@ -14,7 +14,7 @@ const payHelpersBank = require('../bank'); | @@ -14,7 +14,7 @@ const payHelpersBank = require('../bank'); | ||
14 | const md5 = require('md5'); | 14 | const md5 = require('md5'); |
15 | const logger = global.yoho.logger; | 15 | const logger = global.yoho.logger; |
16 | 16 | ||
17 | -const PAY_URL = 'https://mapi.alipay.com/gateway.do'; | 17 | +const PAY_URL = 'https://mapi.alipay.com/gateway.do?'; |
18 | 18 | ||
19 | const Alibank = { | 19 | const Alibank = { |
20 | 20 | ||
@@ -49,7 +49,7 @@ const Alibank = { | @@ -49,7 +49,7 @@ const Alibank = { | ||
49 | return { | 49 | return { |
50 | code: 200, | 50 | code: 200, |
51 | data: { | 51 | data: { |
52 | - href: PAY_URL + '?' + body | 52 | + href: PAY_URL + body |
53 | } | 53 | } |
54 | }; | 54 | }; |
55 | }, | 55 | }, |
@@ -13,7 +13,7 @@ const sign = require('./sign'); | @@ -13,7 +13,7 @@ const sign = require('./sign'); | ||
13 | const md5 = require('md5'); | 13 | const md5 = require('md5'); |
14 | const logger = global.yoho.logger; | 14 | const logger = global.yoho.logger; |
15 | 15 | ||
16 | -const PAY_URL = 'https://mapi.alipay.com/gateway.do'; | 16 | +const PAY_URL = 'https://mapi.alipay.com/gateway.do?'; |
17 | 17 | ||
18 | const Alipay = { | 18 | const Alipay = { |
19 | 19 | ||
@@ -46,7 +46,7 @@ const Alipay = { | @@ -46,7 +46,7 @@ const Alipay = { | ||
46 | return { | 46 | return { |
47 | code: 200, | 47 | code: 200, |
48 | data: { | 48 | data: { |
49 | - href: PAY_URL + '?' + body | 49 | + href: PAY_URL + body |
50 | } | 50 | } |
51 | }; | 51 | }; |
52 | }, | 52 | }, |
apps/shopping/helpers/pay/tenpay.js
0 → 100644
1 | +/** | ||
2 | + * | ||
3 | + * @author: xiaoxiao.hao<xiaoxiao.hao> | ||
4 | + * @date: 2017/3/24 | ||
5 | + */ | ||
6 | + | ||
7 | +'use strict'; | ||
8 | + | ||
9 | +const helpers = global.yoho.helpers; | ||
10 | +const moment = require('moment'); | ||
11 | +const sign = require('./sign'); | ||
12 | +const md5 = require('md5'); | ||
13 | +const logger = global.yoho.logger; | ||
14 | +const PAY_URL = 'https://gw.tenpay.com/gateway/pay.htm?'; | ||
15 | + | ||
16 | +const Tenpay = { | ||
17 | + | ||
18 | + pay(user, order, param, protocol) { | ||
19 | + let payParams = JSON.parse(param.payParams); | ||
20 | + let extraParam = JSON.stringify({ | ||
21 | + sign_id_ext: user.uid, | ||
22 | + defaultbank: param.bankCode || '' | ||
23 | + }); | ||
24 | + let params = { | ||
25 | + partner: payParams.merchant_id, // 商户号 | ||
26 | + out_trade_no: order.order_code, // 商户订单号 | ||
27 | + total_fee: order.payment_amount * 100, // 总金额 以分为单位 | ||
28 | + return_url: protocol + ':' + helpers.urlFormat('/shopping/pay/callback/tenpay'), // 同步地址 | ||
29 | + notify_url: protocol + ':' + helpers.urlFormat('/shopping/pay/notify/tenpay'), // 异步通知地址 | ||
30 | + body: '有货订单号:' + order.order_code, // 商品描述 | ||
31 | + bank_type: 'DEFAULT', // 银行类型,默认为财付通 | ||
32 | + spbill_create_ip: '127.0.0.1', // 客户端IP | ||
33 | + fee_type: '1', // 币种 | ||
34 | + subject: '有货订单号:' + order.order_code, // 商品名称,(中介交易时必填) | ||
35 | + sign_type: 'MD5', | ||
36 | + service_version: '1.0', // 接口版本号 | ||
37 | + input_charset: 'UTF-8', // 字符集 | ||
38 | + sign_key_index: '1', // 密钥序号 | ||
39 | + time_start: moment(order.create_time * 1000).format('YYYYMMDDHHmmss'), // 订单生成时间-yyyymmddhhmmss | ||
40 | + time_expire: moment(order.pay_expire).format('YYYYMMDDHHmmss'), // 订单失效时间--yyyymmddhhmmss | ||
41 | + attach: extraParam // 附加数据,原样返回 | ||
42 | + }; | ||
43 | + | ||
44 | + let signStr = md5(sign.raw(params) + '&key=' + payParams.merchant_key).toLowerCase(); | ||
45 | + let body = sign.rawUncode(params) + '&sign=' + signStr; | ||
46 | + | ||
47 | + return { | ||
48 | + code: 200, | ||
49 | + data: { | ||
50 | + href: PAY_URL + body | ||
51 | + } | ||
52 | + }; | ||
53 | + }, | ||
54 | + notify(data, param) { | ||
55 | + let payParams = JSON.parse(param.payParams); | ||
56 | + let orderCode = parseInt(data.out_trade_no, 10); | ||
57 | + | ||
58 | + logger.info(`Alipay notify, params = ${JSON.stringify(data)}`); | ||
59 | + | ||
60 | + if (!this.checkNotify(data, payParams)) { | ||
61 | + return {payResult: -1}; | ||
62 | + } | ||
63 | + | ||
64 | + return { | ||
65 | + bankName: '', | ||
66 | + orderCode: orderCode, | ||
67 | + payResult: data.trade_status === 'TRADE_SUCCESS' ? 200 : 400, | ||
68 | + totalFee: data.total_fee, | ||
69 | + resultMsg: data.notify_type, | ||
70 | + payOrderCode: orderCode, | ||
71 | + tradeNo: data.trade_no, | ||
72 | + bankBillNo: '' | ||
73 | + }; | ||
74 | + }, | ||
75 | + | ||
76 | + checkNotify(data, payParams) { | ||
77 | + let signValue = data.sign; | ||
78 | + | ||
79 | + delete data.sign; | ||
80 | + delete data.sign_type; | ||
81 | + delete data.code; | ||
82 | + | ||
83 | + let signStr = md5(sign.raw(data) + payParams.merchant_key); | ||
84 | + | ||
85 | + return signValue === signStr; | ||
86 | + } | ||
87 | +}; | ||
88 | + | ||
89 | +module.exports = Tenpay; |
@@ -7,7 +7,7 @@ | @@ -7,7 +7,7 @@ | ||
7 | const ServiceAPI = global.yoho.ServiceAPI; | 7 | const ServiceAPI = global.yoho.ServiceAPI; |
8 | const helpers = global.yoho.helpers; | 8 | const helpers = global.yoho.helpers; |
9 | const sign = require('./sign'); | 9 | const sign = require('./sign'); |
10 | -const PAY_URL = 'https://gateway.95516.com/gateway/api/frontTransReq.do'; | 10 | +const PAY_URL = 'https://gateway.95516.com/gateway/api/frontTransReq.do?'; |
11 | 11 | ||
12 | const unionpay = { | 12 | const unionpay = { |
13 | pay(user, order, info) { | 13 | pay(user, order, info) { |
@@ -21,7 +21,7 @@ const unionpay = { | @@ -21,7 +21,7 @@ const unionpay = { | ||
21 | return { | 21 | return { |
22 | code: 200, | 22 | code: 200, |
23 | data: { | 23 | data: { |
24 | - href: `${PAY_URL}?${sign.raw(result.data)}` | 24 | + href: `${PAY_URL}${sign.raw(result.data)}` |
25 | } | 25 | } |
26 | }; | 26 | }; |
27 | } | 27 | } |
@@ -11,6 +11,7 @@ const PayData = require('../models/pay'); | @@ -11,6 +11,7 @@ const PayData = require('../models/pay'); | ||
11 | const Alipay = require('./pay/alipay'); | 11 | const Alipay = require('./pay/alipay'); |
12 | const Alibank = require('./pay/alibank'); | 12 | const Alibank = require('./pay/alibank'); |
13 | const Wechat = require('./pay/wechat'); | 13 | const Wechat = require('./pay/wechat'); |
14 | +const Tenpay = require('./pay/tenpay'); | ||
14 | const Unionpay = require('./pay/unionpay'); | 15 | const Unionpay = require('./pay/unionpay'); |
15 | const Promise = require('bluebird'); | 16 | const Promise = require('bluebird'); |
16 | const common = require('./pay/common'); | 17 | const common = require('./pay/common'); |
@@ -70,6 +71,9 @@ const Payment = { | @@ -70,6 +71,9 @@ const Payment = { | ||
70 | case PayData.payments.alipay: | 71 | case PayData.payments.alipay: |
71 | result = Alipay.pay(user, order, payInfo, protocol); | 72 | result = Alipay.pay(user, order, payInfo, protocol); |
72 | break; | 73 | break; |
74 | + case PayData.payments.tenpay: | ||
75 | + result = Tenpay.pay(user, order, payInfo, protocol); | ||
76 | + break; | ||
73 | case PayData.payments.alibank: | 77 | case PayData.payments.alibank: |
74 | bankCode = paymentPars[1]; | 78 | bankCode = paymentPars[1]; |
75 | payInfo.bankCode = bankCode;// 设置默认银行 | 79 | payInfo.bankCode = bankCode;// 设置默认银行 |
@@ -151,44 +151,46 @@ const getPayInfo = (uid, code) => { | @@ -151,44 +151,46 @@ const getPayInfo = (uid, code) => { | ||
151 | payDefault = payment[0][0].children[findIndex]; | 151 | payDefault = payment[0][0].children[findIndex]; |
152 | } | 152 | } |
153 | 153 | ||
154 | - // 订单处理 | ||
155 | - if (orderInfo.attribute === 3) { | ||
156 | - orderInfo.deliveryTimes = '自动发货 - 在您支付成功后,系统将立即为您发放二维码,您可以在您的订单中查看。'; | ||
157 | - } else { | ||
158 | - orderInfo.deliveryTimes = orderInfo.delivery_time || ''; | ||
159 | - } | 154 | + if (orderInfo.order_code) { |
155 | + // 订单处理 | ||
156 | + if (orderInfo.attribute === 3) { | ||
157 | + orderInfo.deliveryTimes = '自动发货 - 在您支付成功后,系统将立即为您发放二维码,您可以在您的订单中查看。'; | ||
158 | + } else { | ||
159 | + orderInfo.deliveryTimes = orderInfo.delivery_time || ''; | ||
160 | + } | ||
160 | 161 | ||
161 | - // 用于订单统计 | ||
162 | - orderInfo.uid = uid; | ||
163 | - orderInfo.orderCount = 0; | ||
164 | - if (payment[3].code === 200 && payment[3].data) { | ||
165 | - orderInfo.orderCount = payment[3].data.count || 0; | ||
166 | - } | ||
167 | - orderInfo.isOldUser = orderInfo.orderCount > 1; | ||
168 | - orderInfo.ordersGoodsNums = orderInfo.order_goods.length; | ||
169 | - let sknList = []; | ||
170 | - let skuList = []; | ||
171 | - let goodsData = []; | ||
172 | - let pinyouGoodsArr = []; | ||
173 | - | ||
174 | - _.each(orderInfo.order_goods, function(el) { | ||
175 | - sknList.push(el.product_skn); | ||
176 | - skuList.push(el.product_sku); | ||
177 | - goodsData.push({ | ||
178 | - goods_name: el.product_name, | ||
179 | - product_sku: el.product_sku, | ||
180 | - price: el.goods_price, | ||
181 | - number: el.buy_number | 162 | + // 用于订单统计 |
163 | + orderInfo.uid = uid; | ||
164 | + orderInfo.orderCount = 0; | ||
165 | + if (payment[3].code === 200 && payment[3].data) { | ||
166 | + orderInfo.orderCount = payment[3].data.count || 0; | ||
167 | + } | ||
168 | + orderInfo.isOldUser = orderInfo.orderCount > 1; | ||
169 | + orderInfo.ordersGoodsNums = orderInfo.order_goods.length; | ||
170 | + let sknList = []; | ||
171 | + let skuList = []; | ||
172 | + let goodsData = []; | ||
173 | + let pinyouGoodsArr = []; | ||
174 | + | ||
175 | + _.each(orderInfo.order_goods, function(el) { | ||
176 | + sknList.push(el.product_skn); | ||
177 | + skuList.push(el.product_sku); | ||
178 | + goodsData.push({ | ||
179 | + goods_name: el.product_name, | ||
180 | + product_sku: el.product_sku, | ||
181 | + price: el.goods_price, | ||
182 | + number: el.buy_number | ||
183 | + }); | ||
184 | + pinyouGoodsArr.push(`${el.product_skn},${el.buy_number}`); | ||
182 | }); | 185 | }); |
183 | - pinyouGoodsArr.push(`${el.product_skn},${el.buy_number}`); | ||
184 | - }); | ||
185 | - orderInfo.sknList = sknList; | ||
186 | - orderInfo.skuList = skuList; | ||
187 | - orderInfo.goodsData = goodsData; | ||
188 | - orderInfo.goodsDatas = JSON.stringify(goodsData); | 186 | + orderInfo.sknList = sknList; |
187 | + orderInfo.skuList = skuList; | ||
188 | + orderInfo.goodsData = goodsData; | ||
189 | + orderInfo.goodsDatas = JSON.stringify(goodsData); | ||
189 | 190 | ||
190 | - // 品友统计需要的商品数据 | ||
191 | - orderInfo.pinyouGoods = pinyouGoodsArr.join(';'); | 191 | + // 品友统计需要的商品数据 |
192 | + orderInfo.pinyouGoods = pinyouGoodsArr.join(';'); | ||
193 | + } | ||
192 | 194 | ||
193 | return { | 195 | return { |
194 | pay: payment[0], | 196 | pay: payment[0], |
-
Please register or login to post a comment