Authored by yyq

replace pay api

@@ -10,39 +10,78 @@ const config = global.yoho.config; @@ -10,39 +10,78 @@ const config = global.yoho.config;
10 const helpers = global.yoho.helpers; 10 const helpers = global.yoho.helpers;
11 const sign = require('./sign'); 11 const sign = require('./sign');
12 const md5 = require('yoho-md5'); 12 const md5 = require('yoho-md5');
13 -const moment = require('moment'); 13 +const _ = require('lodash');
  14 +
  15 +// const moment = require('moment');
14 const logger = global.yoho.logger; 16 const logger = global.yoho.logger;
15 const AlipayConfig = config.alipayConfig; 17 const AlipayConfig = config.alipayConfig;
16 18
17 -const Alipay = {  
18 19
19 - pay(user, order, param, protocol) {  
20 - let params = {  
21 - service: AlipayConfig.service,  
22 - partner: AlipayConfig.partner,  
23 - _input_charset: AlipayConfig.inputCharset,  
24 - notify_url: AlipayConfig.notifyUrl, 20 +class PaySign extends global.yoho.BaseModel {
  21 + constructor(ctx) {
  22 + super(ctx);
  23 + }
  24 + getPayData(order, param, protocol) {
  25 + let options = {
  26 + uid: _.get(this.ctx, 'req.user.uid'),
  27 + order_code: order.order_code,
  28 + payment_code: param.paymentCode,
25 return_url: protocol + ':' + helpers.urlFormat(AlipayConfig.returnUrl), 29 return_url: protocol + ':' + helpers.urlFormat(AlipayConfig.returnUrl),
26 - subject: '有货订单号:' + order.order_code,  
27 - out_trade_no: order.order_code,  
28 - it_b_pay: moment(order.pay_expire).format('YYYY-MM-DD HH:mm'),  
29 - total_fee: parseFloat(order.payment_amount),  
30 - seller_id: AlipayConfig.partner,  
31 - payment_type: '1',  
32 show_url: protocol + ':' + helpers.urlFormat('/home/orderdetail', { order_code: order.order_code }) 30 show_url: protocol + ':' + helpers.urlFormat('/home/orderdetail', { order_code: order.order_code })
33 }; 31 };
34 32
35 - // TODO 防钓鱼配置,参考php  
36 -  
37 - let signStr = md5(sign.raw(params) + AlipayConfig.alipayKey);  
38 - let body = sign.rawUncode(params) + '&sign=' + signStr + '&sign_type=MD5';  
39 - 33 + return this.post({
  34 + api: global.yoho.ServiceAPI,
  35 + url: '/payment/alipay_data',
  36 + data: options
  37 + }).then(result => {
  38 + if (result.code === 200) {
  39 + console.log(result);
40 return { 40 return {
41 code: 200, 41 code: 200,
42 data: { 42 data: {
43 - href: AlipayConfig.payUrl + '?' + body 43 + href: AlipayConfig.payUrl + '?' + _.get(result, 'data.payParams', '')
44 } 44 }
45 }; 45 };
  46 + }
  47 +
  48 + return result;
  49 + });
  50 + }
  51 +}
  52 +
  53 +const Alipay = {
  54 + // // 原node生成预支付订单
  55 + // _pay(user, order, param, protocol) {
  56 + // let params = {
  57 + // service: AlipayConfig.service,
  58 + // partner: AlipayConfig.partner,
  59 + // _input_charset: AlipayConfig.inputCharset,
  60 + // notify_url: AlipayConfig.notifyUrl,
  61 + // return_url: protocol + ':' + helpers.urlFormat(AlipayConfig.returnUrl),
  62 + // subject: '有货订单号:' + order.order_code,
  63 + // out_trade_no: order.order_code,
  64 + // it_b_pay: moment(order.pay_expire).format('YYYY-MM-DD HH:mm'),
  65 + // total_fee: parseFloat(order.payment_amount),
  66 + // seller_id: AlipayConfig.partner,
  67 + // payment_type: '1',
  68 + // show_url: protocol + ':' + helpers.urlFormat('/home/orderdetail', { order_code: order.order_code })
  69 + // };
  70 +
  71 + // // TODO 防钓鱼配置,参考php
  72 +
  73 + // let signStr = md5(sign.raw(params) + AlipayConfig.alipayKey);
  74 + // let body = sign.rawUncode(params) + '&sign=' + signStr + '&sign_type=MD5';
  75 +
  76 + // return {
  77 + // code: 200,
  78 + // data: {
  79 + // href: AlipayConfig.payUrl + '?' + body
  80 + // }
  81 + // };
  82 + // },
  83 + pay(ctx, order, param, protocol) {
  84 + return new PaySign(ctx).getPayData(order, param, protocol);
46 }, 85 },
47 notify(data, param) { 86 notify(data, param) {
48 let payParams = JSON.parse(param.payParams); 87 let payParams = JSON.parse(param.payParams);
@@ -18,6 +18,31 @@ const md5 = require('yoho-md5'); @@ -18,6 +18,31 @@ const md5 = require('yoho-md5');
18 const moment = require('moment'); 18 const moment = require('moment');
19 const common = require('./common'); 19 const common = require('./common');
20 20
  21 +
  22 +class PaySign extends global.yoho.BaseModel {
  23 + constructor(ctx) {
  24 + super(ctx);
  25 + }
  26 + getPayData({uid, orderCode, paymentCode, openId, ip}) {
  27 + let options = {
  28 + uid,
  29 + order_code: orderCode,
  30 + payment_code: paymentCode,
  31 + open_id: openId,
  32 + ip
  33 + };
  34 +
  35 + return this.post({
  36 + api: global.yoho.ServiceAPI,
  37 + url: '/payment/alipay_data',
  38 + data: options
  39 + }).then(result => {
  40 + return result && result.xml;
  41 + });
  42 + }
  43 +}
  44 +
  45 +
21 /** 46 /**
22 * 微信支付相关工具类 47 * 微信支付相关工具类
23 */ 48 */
@@ -164,14 +189,23 @@ const Wechat = { @@ -164,14 +189,23 @@ const Wechat = {
164 /** 189 /**
165 * 异步拉起微信支付相关处理 190 * 异步拉起微信支付相关处理
166 */ 191 */
167 - pay(user, order, openId, ip) { 192 + pay(ctx, order, extra) {
  193 + let {openId, ip, paymentCode} = extra || {};
168 194
169 return co(function* () { 195 return co(function* () {
170 - let unifiedOrderResult = yield tools.unifiedOrder({ 196 + // // 原node生成预支付订单
  197 + // let unifiedOrderResult = yield tools.unifiedOrder({
  198 + // orderCode: order.order_code,
  199 + // totalFee: parseFloat(order.payment_amount),
  200 + // openId: openId,
  201 + // ip: ip
  202 + // });
  203 + let unifiedOrderResult = yield new PaySign(ctx).getPayData({
  204 + uid: _.get(ctx, 'req.user.uid'),
171 orderCode: order.order_code, 205 orderCode: order.order_code,
172 - totalFee: parseFloat(order.payment_amount),  
173 - openId: openId,  
174 - ip: ip 206 + paymentCode,
  207 + openId,
  208 + ip
175 }); 209 });
176 210
177 if (unifiedOrderResult && unifiedOrderResult.appid && unifiedOrderResult.prepay_id) { 211 if (unifiedOrderResult && unifiedOrderResult.appid && unifiedOrderResult.prepay_id) {
@@ -54,7 +54,11 @@ class Payment extends global.yoho.BaseModel { @@ -54,7 +54,11 @@ class Payment extends global.yoho.BaseModel {
54 } 54 }
55 55
56 if (method === payProcess.PAYMENTS.WECHAT) { 56 if (method === payProcess.PAYMENTS.WECHAT) {
57 - result = yield Wechat.pay(user, order, reqParams.openId, reqParams.ip); 57 + result = yield Wechat.pay(self.ctx, order, {
  58 + openId: reqParams.openId,
  59 + ip: reqParams.ip,
  60 + paymentCode: method
  61 + });
58 } else { 62 } else {
59 payInfo = yield self.ctx.req.ctx(PayModel).getPaymentInfo(method); 63 payInfo = yield self.ctx.req.ctx(PayModel).getPaymentInfo(method);
60 64
@@ -64,7 +68,8 @@ class Payment extends global.yoho.BaseModel { @@ -64,7 +68,8 @@ class Payment extends global.yoho.BaseModel {
64 68
65 switch (payInfo.id) { 69 switch (payInfo.id) {
66 case payProcess.PAYMENTS.ALIPAY: 70 case payProcess.PAYMENTS.ALIPAY:
67 - result = Alipay.pay(user, order, payInfo, reqParams.protocol); 71 + payInfo.paymentCode = method;
  72 + result = yield Alipay.pay(self.ctx, order, payInfo, reqParams.protocol);
68 break; 73 break;
69 default: 74 default:
70 break; 75 break;