Commit 36871cc8 by 朱继来

防止部分表单重复提交接口

parent aa1960a7
...@@ -814,7 +814,7 @@ Class OrderController extends Controller ...@@ -814,7 +814,7 @@ Class OrderController extends Controller
$order_id = $request->input('order_id', ''); $order_id = $request->input('order_id', '');
if (!$order_id) return array('errcode'=>Error::E_PARAM, 'errmsg'=>'订单参数有误!'); if (!$order_id) return array('errcode'=>Error::E_PARAM, 'errmsg'=>'订单参数有误!');
dump('xxxx');
if (!$request->input('pay_time_limit')) { if (!$request->input('pay_time_limit')) {
$payTime = $request->input('payTime', ''); $payTime = $request->input('payTime', '');
$payTimeOther = $request->input('payTimeOther', ''); $payTimeOther = $request->input('payTimeOther', '');
...@@ -823,43 +823,43 @@ dump('xxxx'); ...@@ -823,43 +823,43 @@ dump('xxxx');
} else { } else {
$pay_time_limit = $request->input('pay_time_limit'); $pay_time_limit = $request->input('pay_time_limit');
} }
return ['err_code'=>1, 'err_msg'=>'xxx'];
// $url = Config('website.api_domain').'order/changeOrder'; $url = Config('website.api_domain').'order/changeOrder';
// $check['k1'] = time(); $check['k1'] = time();
// $check['k2'] = md5(md5($check['k1']).'fh6y5t4rr351d2c3bryi'); $check['k2'] = md5(md5($check['k1']).'fh6y5t4rr351d2c3bryi');
// $client_source = $request->input('client_source') == 1 ? $request->input('input-other-source') : $request->input('client_source'); $client_source = $request->input('client_source') == 1 ? $request->input('input-other-source') : $request->input('client_source');
// $resData = [ $resData = [
// "user_id" => $request->input('user_id', ''), "user_id" => $request->input('user_id', ''),
// "cancel_reason" => $request->input('cancel_reason', ''), "cancel_reason" => $request->input('cancel_reason', ''),
// "sale_id" => $request->input('sale_id', ''), "sale_id" => $request->input('sale_id', ''),
// "order_pay_type" => $request->input('order_pay_type', '') ? $request->input('order_pay_type') : 1, "order_pay_type" => $request->input('order_pay_type', '') ? $request->input('order_pay_type') : 1,
// "status" => $request->input('order_status', '') ? $request->input('order_status') : 2, "status" => $request->input('order_status', '') ? $request->input('order_status') : 2,
// "deposit_amount" => $request->input('deposit_amount', ''), "deposit_amount" => $request->input('deposit_amount', ''),
// "goods_amount" => $request->input('goods_amount', ''), "goods_amount" => $request->input('goods_amount', ''),
// "order_amount" => $request->input('order_amount', ''), "order_amount" => $request->input('order_amount', ''),
// "extra_fee" => $request->input('extra_fee', ''), "extra_fee" => $request->input('extra_fee', ''),
// "change_info" => $request->input('change_info', ''), "change_info" => $request->input('change_info', ''),
// "pay_time_limit" => $pay_time_limit, "pay_time_limit" => $pay_time_limit,
// "check_failed" => $request->input('check_failed', ''), "check_failed" => $request->input('check_failed', ''),
// "check_failed_info" => $request->input('check_failed_info', ''), "check_failed_info" => $request->input('check_failed_info', ''),
// "change_pay_type" => $request->input('change_pay_type', ''), "change_pay_type" => $request->input('change_pay_type', ''),
// "order_id" => $order_id, "order_id" => $order_id,
// 'operator_id' => $request->user->userId, 'operator_id' => $request->user->userId,
// "pf" => 1, "pf" => 1,
// "k1" => $check['k1'], "k1" => $check['k1'],
// "k2" => $check['k2'], "k2" => $check['k2'],
// "client_source" => $client_source, "client_source" => $client_source,
// "change_extend_fee" => $request->input('change_extend_fee', ''), "change_extend_fee" => $request->input('change_extend_fee', ''),
// "kefu_remark" => $request->input('kefu_remark', ''), // 客服备注 "kefu_remark" => $request->input('kefu_remark', ''), // 客服备注
// "freight_fee" => $request->input('freight_fee', ''), // 运费 "freight_fee" => $request->input('freight_fee', ''), // 运费
// ]; ];
// // dd(curlApi($url, $resData, "POST")); // dd(curlApi($url, $resData, "POST"));
// $temp = json_decode(curlApi($url, $resData, "POST"), true); $temp = json_decode(curlApi($url, $resData, "POST"), true);
// return array('errcode'=>$temp['err_code'],'errmsg'=>$temp['err_msg']); return array('errcode'=>$temp['err_code'],'errmsg'=>$temp['err_msg']);
} }
} }
......
...@@ -28,7 +28,6 @@ class Kernel extends HttpKernel ...@@ -28,7 +28,6 @@ class Kernel extends HttpKernel
\App\Http\Middleware\CheckLogin::class, \App\Http\Middleware\CheckLogin::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class, \Illuminate\Session\Middleware\StartSession::class,
\App\Http\Middleware\Check::class,
\App\Http\Middleware\CheckRequest::class, \App\Http\Middleware\CheckRequest::class,
], ],
......
<?php
namespace App\Http\Middleware;
use Closure;
use Session;
class Check
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
Session::put('pid', uniqid('order_', true));
// if ($request->ajax() && $request->isMethod('post')) {
// }
return $next($request);
}
}
...@@ -4,13 +4,9 @@ namespace App\Http\Middleware; ...@@ -4,13 +4,9 @@ namespace App\Http\Middleware;
use Closure; use Closure;
use Illuminate\Support\Facades\Redis; use Illuminate\Support\Facades\Redis;
use Cookie;
use Session;
class CheckRequest class CheckRequest
{ {
static public $redis;
/** /**
* Handle an incoming request. * Handle an incoming request.
* *
...@@ -20,56 +16,37 @@ class CheckRequest ...@@ -20,56 +16,37 @@ class CheckRequest
*/ */
public function handle($request, Closure $next) public function handle($request, Closure $next)
{ {
// 对AJAX POST请求添加Redis锁,防止重复提交 $action = $request->route()->getAction(); // 获取路由信息
if ($request->ajax() && $request->isMethod('post')) { $routeActionName = '';
$key = $this->getFormKey($request);
// if (!self::$redis) self::$redis = new Redis; if (isset($action['controller'])) {
$controller = class_basename($action['controller']);
Redis::incr($key); // 计数器 list($routeControllerName, $routeActionName) = explode('@', $controller);
$count = Redis::get($key); }
$pid = Session::get('pid');
dump($count);
if ($count > 1) return abort(501, '请勿重新提交!'); // 501服务器不支持当前请求
// $lock = Redis::setnx('lock'.Cookie::get('uuid'), 1); $prevent_resubmit = Config('config.prevent_resubmit_api'); // 防止重复提交接口
// $count = Redis::setnx(Cookie::get('uuid'),1);
// if(!$count) return abort(501, '请勿重新提交!');
// $lock = Redis::set('lock'.Cookie::get('uuid'), 1, "nx", "ex", 300);
// Redis::sadd("kkkkkk",'lock'.Cookie::get('uuid'));
// dump($lock);
// if (!$lock ) {
// Redis::del('lock'.Cookie::get('uuid'));
// return abort(501, '请勿重新提交!');
// }
$response = $next($request);
// Redis::del('lock'.Cookie::get('uuid')); // 对AJAX POST请求添加Redis锁,防止重复提交
// Redis::del($key); if (in_array($routeActionName, $prevent_resubmit) && $request->ajax() && $request->isMethod('post')) {
$referer = $_SERVER['HTTP_REFERER']; // 来源页面
$sale_id = $request->user->userId; // 操作人ID
$key = $routeActionName.'_'.md5($referer.'/'.$sale_id); // 设置表单页面key
// Redis::incr($key); // 计数器
// $count = Redis::get($key);
return $response; // if ($count > 1) return abort(501, '请勿重新提交!'); // 501服务器不支持当前请求
}
return $next($request); $lock = Redis::set($key, 1, "nx", "ex", 5); // 5秒内重复点击提交按钮无效
}
public function getFormKey($request) if (!$lock) return abort(501, '请勿重新提交!');
{
$action = $request->route()->getAction(); // 获取路由信息
$controller = '@';
if (isset($action['controller'])) { $response = $next($request);
$controller = class_basename($action['controller']);
}
list($routeControllerName, $routeActionName) = explode('@', $controller);
$referer = $_SERVER['HTTP_REFERER']; // 来源页面 return $response;
$sale_id = $request->user->userId; // 操作人ID }
$key = $routeActionName.'_'.md5($referer.'/'.$sale_id);
return $key; return $next($request);
} }
} }
<?php
return [
// 接口防重复提交
'prevent_resubmit_api' => [
'ajaxSaveChange', // 审单
'changeShipping', // 修改物流地址
'changeInvoice', // 修改发票
'express_set', // 设置快递费用
'addCart', // 添加到购物车
'changeNum', // 修改数量
'create', // 生成订单
'addGoods', // 新增商品
'orderReturn', // 订单退货
'orderReturnEdit', // 订单退货编辑
],
];
...@@ -1966,7 +1966,7 @@ ...@@ -1966,7 +1966,7 @@
} }
}) })
// layer.msg('审核提交中...', {icon: 16, time: 0, shade: 0.3}); // 阻止重复提交 layer.msg('审核提交中...', {icon: 16, time: 0, shade: 0.3}); // 阻止重复提交
}, },
btn2: function(index, layero){ btn2: function(index, layero){
layer.close(index); layer.close(index);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment