Authored by 陈轩

秒杀结算

@@ -8,11 +8,13 @@ const seckillModel = require('../models/seckill'); @@ -8,11 +8,13 @@ const seckillModel = require('../models/seckill');
8 const headerModel = require('../../../doraemon/models/header'); // 头部model 8 const headerModel = require('../../../doraemon/models/header'); // 头部model
9 9
10 const BAD_REQUEST = '非法请求'; 10 const BAD_REQUEST = '非法请求';
  11 +const SLAT = 'yohobuyseckill98';
11 12
12 exports.ensure = (req, res, next) => { 13 exports.ensure = (req, res, next) => {
13 const sku = Number.parseInt(req.query.sku, 10); 14 const sku = Number.parseInt(req.query.sku, 10);
14 const skn = Number.parseInt(req.query.skn, 10); 15 const skn = Number.parseInt(req.query.skn, 10);
15 const uid = req.user.uid; 16 const uid = req.user.uid;
  17 + let activityId;
16 18
17 let orderInfo = req.cookies['order-info']; 19 let orderInfo = req.cookies['order-info'];
18 20
@@ -24,7 +26,7 @@ exports.ensure = (req, res, next) => { @@ -24,7 +26,7 @@ exports.ensure = (req, res, next) => {
24 26
25 // require skn, sku; 27 // require skn, sku;
26 if (!(sku && skn)) { 28 if (!(sku && skn)) {
27 - return next('error'); 29 + return next();
28 } 30 }
29 31
30 co(function*() { 32 co(function*() {
@@ -38,14 +40,20 @@ exports.ensure = (req, res, next) => { @@ -38,14 +40,20 @@ exports.ensure = (req, res, next) => {
38 let skillData = yield seckillModel.skillData(skn); // 根据skn查活动信息 40 let skillData = yield seckillModel.skillData(skn); // 根据skn查活动信息
39 41
40 skillData = skillData.data; 42 skillData = skillData.data;
  43 +
  44 + // 不在秒杀中
  45 + if (skillData && (skillData.status !== 2)) {
  46 + return res.redirect('/product/seckill');
  47 + }
  48 +
41 if (!( 49 if (!(
42 skillData && 50 skillData &&
43 - skillData.status &&  
44 skillData.secKillSku.some(obj => obj.productSku === sku) // skn has sku; 51 skillData.secKillSku.some(obj => obj.productSku === sku) // skn has sku;
45 )) { 52 )) {
46 return Promise.reject('活动不存在'); 53 return Promise.reject('活动不存在');
47 } 54 }
48 - paymentOption.activity_id = skillData.activityId; 55 +
  56 + paymentOption.activity_id = activityId = skillData.activityId;
49 57
50 // 获取结算 数据 58 // 获取结算 数据
51 let paymentInfo = yield seckillModel.payment(paymentOption, orderInfo); 59 let paymentInfo = yield seckillModel.payment(paymentOption, orderInfo);
@@ -74,7 +82,8 @@ exports.ensure = (req, res, next) => { @@ -74,7 +82,8 @@ exports.ensure = (req, res, next) => {
74 res.render('order-ensure', Object.assign({ 82 res.render('order-ensure', Object.assign({
75 pageHeader: headerModel.setNav({ 83 pageHeader: headerModel.setNav({
76 navTitle: '确认订单' 84 navTitle: '确认订单'
77 - }) 85 + }),
  86 + cartToken: crypto.encryption(SLAT, [sku, activityId].join(''))
78 }, view)); 87 }, view));
79 })().catch(next); 88 })().catch(next);
80 }; 89 };
@@ -123,12 +132,19 @@ exports.submit = (req, res, next) => { @@ -123,12 +132,19 @@ exports.submit = (req, res, next) => {
123 deliveryTime = Number.parseInt(req.body.deliveryTime, 10), 132 deliveryTime = Number.parseInt(req.body.deliveryTime, 10),
124 deliveryWay = Number.parseInt(req.body.deliveryWay, 10), 133 deliveryWay = Number.parseInt(req.body.deliveryWay, 10),
125 paymentId = Number.parseInt(req.body.paymentId, 10), 134 paymentId = Number.parseInt(req.body.paymentId, 10),
126 - paymentType = Number.parseInt(req.body.paymentType, 10); 135 + paymentType = Number.parseInt(req.body.paymentType, 10),
  136 + token = req.body.cartToken;
127 137
128 let addressId = req.body.addressId || ''; 138 let addressId = req.body.addressId || '';
129 139
130 if (!req.xhr) { 140 if (!req.xhr) {
131 - return next(404); 141 + return next();
  142 + }
  143 +
  144 + let compareToken = crypto.encryption(SLAT, [sku, activityId].join(''));
  145 +
  146 + if (token !== compareToken) {
  147 + return next();
132 } 148 }
133 149
134 if (!addressId) { 150 if (!addressId) {
1 <div class="order-ensure-page yoho-page"> 1 <div class="order-ensure-page yoho-page">
  2 + <input id="cart-token" type="hidden" name="token" value="{{cartToken}}">
2 {{#if orderEnsure}} 3 {{#if orderEnsure}}
3 {{#if addressInfo}} 4 {{#if addressInfo}}
4 <div class="address block address-wrap {{#if pageHeader.boys}} boys{{/if}}{{#if pageHeader.girls}} girls{{/if}}{{#if pageHeader.kids}} kids{{/if}}{{#if pageHeader.lifeStyle}} life-style{{/if}}" data-id ="{{addressId}}"> 5 <div class="address block address-wrap {{#if pageHeader.boys}} boys{{/if}}{{#if pageHeader.girls}} girls{{/if}}{{#if pageHeader.kids}} kids{{/if}}{{#if pageHeader.lifeStyle}} life-style{{/if}}" data-id ="{{addressId}}">
@@ -269,7 +269,8 @@ function submitOrder() { @@ -269,7 +269,8 @@ function submitOrder() {
269 remark: msg, 269 remark: msg,
270 paymentId: orderInfo('paymentTypeId'), 270 paymentId: orderInfo('paymentTypeId'),
271 paymentType: orderInfo('paymentType'), // 支付方式 271 paymentType: orderInfo('paymentType'), // 支付方式
272 - useYohoCoin: orderInfo('yohoCoin') 272 + useYohoCoin: orderInfo('yohoCoin'),
  273 + cartToken: $('#cart-token').val()
273 } 274 }
274 }).then(function(res) { 275 }).then(function(res) {
275 var url; 276 var url;