Authored by yyq

replace pay api

... ... @@ -10,39 +10,78 @@ const config = global.yoho.config;
const helpers = global.yoho.helpers;
const sign = require('./sign');
const md5 = require('yoho-md5');
const moment = require('moment');
const _ = require('lodash');
// const moment = require('moment');
const logger = global.yoho.logger;
const AlipayConfig = config.alipayConfig;
const Alipay = {
pay(user, order, param, protocol) {
let params = {
service: AlipayConfig.service,
partner: AlipayConfig.partner,
_input_charset: AlipayConfig.inputCharset,
notify_url: AlipayConfig.notifyUrl,
class PaySign extends global.yoho.BaseModel {
constructor(ctx) {
super(ctx);
}
getPayData(order, param, protocol) {
let options = {
uid: _.get(this.ctx, 'req.user.uid'),
order_code: order.order_code,
payment_code: param.paymentCode,
return_url: protocol + ':' + helpers.urlFormat(AlipayConfig.returnUrl),
subject: '有货订单号:' + order.order_code,
out_trade_no: order.order_code,
it_b_pay: moment(order.pay_expire).format('YYYY-MM-DD HH:mm'),
total_fee: parseFloat(order.payment_amount),
seller_id: AlipayConfig.partner,
payment_type: '1',
show_url: protocol + ':' + helpers.urlFormat('/home/orderdetail', { order_code: order.order_code })
};
// TODO 防钓鱼配置,参考php
return this.post({
api: global.yoho.ServiceAPI,
url: '/payment/alipay_data',
data: options
}).then(result => {
if (result.code === 200) {
console.log(result);
return {
code: 200,
data: {
href: AlipayConfig.payUrl + '?' + _.get(result, 'data.payParams', '')
}
};
}
let signStr = md5(sign.raw(params) + AlipayConfig.alipayKey);
let body = sign.rawUncode(params) + '&sign=' + signStr + '&sign_type=MD5';
return result;
});
}
}
return {
code: 200,
data: {
href: AlipayConfig.payUrl + '?' + body
}
};
const Alipay = {
// // 原node生成预支付订单
// _pay(user, order, param, protocol) {
// let params = {
// service: AlipayConfig.service,
// partner: AlipayConfig.partner,
// _input_charset: AlipayConfig.inputCharset,
// notify_url: AlipayConfig.notifyUrl,
// return_url: protocol + ':' + helpers.urlFormat(AlipayConfig.returnUrl),
// subject: '有货订单号:' + order.order_code,
// out_trade_no: order.order_code,
// it_b_pay: moment(order.pay_expire).format('YYYY-MM-DD HH:mm'),
// total_fee: parseFloat(order.payment_amount),
// seller_id: AlipayConfig.partner,
// payment_type: '1',
// show_url: protocol + ':' + helpers.urlFormat('/home/orderdetail', { order_code: order.order_code })
// };
// // TODO 防钓鱼配置,参考php
// let signStr = md5(sign.raw(params) + AlipayConfig.alipayKey);
// let body = sign.rawUncode(params) + '&sign=' + signStr + '&sign_type=MD5';
// return {
// code: 200,
// data: {
// href: AlipayConfig.payUrl + '?' + body
// }
// };
// },
pay(ctx, order, param, protocol) {
return new PaySign(ctx).getPayData(order, param, protocol);
},
notify(data, param) {
let payParams = JSON.parse(param.payParams);
... ...
... ... @@ -18,6 +18,31 @@ const md5 = require('yoho-md5');
const moment = require('moment');
const common = require('./common');
class PaySign extends global.yoho.BaseModel {
constructor(ctx) {
super(ctx);
}
getPayData({uid, orderCode, paymentCode, openId, ip}) {
let options = {
uid,
order_code: orderCode,
payment_code: paymentCode,
open_id: openId,
ip
};
return this.post({
api: global.yoho.ServiceAPI,
url: '/payment/alipay_data',
data: options
}).then(result => {
return result && result.xml;
});
}
}
/**
* 微信支付相关工具类
*/
... ... @@ -164,14 +189,23 @@ const Wechat = {
/**
* 异步拉起微信支付相关处理
*/
pay(user, order, openId, ip) {
pay(ctx, order, extra) {
let {openId, ip, paymentCode} = extra || {};
return co(function* () {
let unifiedOrderResult = yield tools.unifiedOrder({
// // 原node生成预支付订单
// let unifiedOrderResult = yield tools.unifiedOrder({
// orderCode: order.order_code,
// totalFee: parseFloat(order.payment_amount),
// openId: openId,
// ip: ip
// });
let unifiedOrderResult = yield new PaySign(ctx).getPayData({
uid: _.get(ctx, 'req.user.uid'),
orderCode: order.order_code,
totalFee: parseFloat(order.payment_amount),
openId: openId,
ip: ip
paymentCode,
openId,
ip
});
if (unifiedOrderResult && unifiedOrderResult.appid && unifiedOrderResult.prepay_id) {
... ...
... ... @@ -54,7 +54,11 @@ class Payment extends global.yoho.BaseModel {
}
if (method === payProcess.PAYMENTS.WECHAT) {
result = yield Wechat.pay(user, order, reqParams.openId, reqParams.ip);
result = yield Wechat.pay(self.ctx, order, {
openId: reqParams.openId,
ip: reqParams.ip,
paymentCode: method
});
} else {
payInfo = yield self.ctx.req.ctx(PayModel).getPaymentInfo(method);
... ... @@ -64,7 +68,8 @@ class Payment extends global.yoho.BaseModel {
switch (payInfo.id) {
case payProcess.PAYMENTS.ALIPAY:
result = Alipay.pay(user, order, payInfo, reqParams.protocol);
payInfo.paymentCode = method;
result = yield Alipay.pay(self.ctx, order, payInfo, reqParams.protocol);
break;
default:
break;
... ...