Authored by 毕凯

Merge branch 'feature/payEnd' into 'release/5.4'

支付宝支付结果校验



See merge request !134
... ... @@ -73,8 +73,10 @@ const payAli = (req, res, next) => {
return;
}
// 支付失败
if (req.query.trade_status !== 'TRADE_SUCCESS') {
let verifyResult = payModel.alipayResultVerify(req.query);
// 支付宝支付校验
if (!verifyResult.payResult) {
return res.render('pay/pay-ali', responseData);
}
... ...
... ... @@ -11,15 +11,15 @@ const serviceAPI = global.yoho.ServiceAPI;
const utils = '../../../utils';
const productProcess = require(`${utils}/product-process`);
const _ = require('lodash');
const ApipayConfig = global.yoho.config.alipayConfig;
const md5 = require('md5');
// 资源位
const _getBanner = (param) => {
return serviceAPI.get('operations/api/v5/resource/get', {
content_code: param.contentCode,
platform: 'iphone'
}, {
code: 200
}).then((result) => {
}, { code: 200 }).then((result) => {
result = result.data;
... ... @@ -36,9 +36,7 @@ const _getOthersBuy2 = (param) => {
rec_pos: '100005',
limit: 2,
client_id: param.client_id
}, {
code: 200
}).then((result) => {
}, { code: 200 }).then((result) => {
if (result && result.data && result.data.product_list) {
return productProcess.processProductList(result.data.product_list);
... ... @@ -53,9 +51,7 @@ const _getOtherDetail = (param) => {
method: 'app.SpaceOrders.detail',
uid: param.uid,
order_code: param.orderCode
}, {
code: 200
}).then((result) => {
}, { code: 20 }).then((result) => {
return result;
... ... @@ -74,7 +70,7 @@ const _getOthersBuy = (param) => {
goodSkn = result[0].data.order_goods[0].product_skn;
}
return _getOthersBuy2(Object.assign(param, {skn: goodSkn}));
return _getOthersBuy2(Object.assign(param, { skn: goodSkn }));
}).then((result) => {
... ... @@ -125,6 +121,69 @@ const getPayCod = (param) => {
});
};
const _raw = (args) => {
let keys = Object.keys(args);
keys = keys.filter(k => {
let keyValueCheck =
k === 'sign' ||
k === 'sign_type' ||
k === 'code' ||
args[k] === '' ||
args[k] === 'undefined';
return !keyValueCheck;
}).sort();
return keys.map(k => {
return k + '=' + decodeURI(args[k]);
}).join('&');
};
/**
* 验证返回结果的正确性
*/
const _checkResponse = (params) => {
if (!params.sign) {
return false;
}
let rawResult = _raw(params);
let sign = rawResult + ApipayConfig.alipayKey;
let md5Result = md5(sign);
return md5Result === params.sign;
};
/**
* 支付宝支付结果校验
*/
const alipayResultVerify = (params) => {
let checkResult = {};
if (params.q) {
delete params.q;
}
if (!_checkResponse(params)) {
checkResult.payResult = false;
} else {
_.assign(checkResult, {
bankName: '',
orderCode: params.out_trade_no,
payResult: params.trade_status === 'TRADE_SUCCESS',
payTime: params.gmt_payment || '',
totalFee: params.total_fee,
resultMsg: params.notify_type,
payOrderCode: params.out_trade_no,
tradeNo: params.trade_no,
bankBillNo: ''
});
}
return checkResult;
};
// 支付宝支付
const getPayAli = (param) => {
return api.all([
... ... @@ -176,5 +235,6 @@ const getPayAli = (param) => {
module.exports = {
getPayCod,
getPayAli
getPayAli,
alipayResultVerify
};
... ...
... ... @@ -87,7 +87,10 @@ module.exports = {
appSecret: 'ce21ae4a3f93852279175a167e54509b'
}
},
zookeeperServer: '192.168.102.168:2188'
zookeeperServer: '192.168.102.168:2188',
alipayConfig: {
alipayKey: 'kcxawi9bb07mzh0aq2wcirsf9znusobw'
}
};
if (isProduction) {
... ...