laravel 防止在电子商务中下订单后返回

laravel prevent go back after order placed in ecommerce

如何防止 Laravel 页面在下订单后返回以避免重复付款。我有很多相关的答案,但 none 对我有用。

我尝试制作中间件 class 并调用 header 代码

并从路由文件中调用它


return $response->header('Cache-Control','no-store, nocache, no-store, max-age=0, must-revalidate')
->header('Pragma','no-cache')
->header('Expires','Sun, 02 Jan 1990 00:00:00 GMT')
->header('Cache-Control',' post-check=0, pre-check=0, false');

然后我在这样的路线中调用了 class:

Route::group(['middleware' => 'prevent-order-back'],function(){
        Auth::routes();
        //Route::get('/home', 'HomeController@index');
        Route::post('/place_order', 'OrdersController@place_order');
    });

我正在使用 Laravel 5.5

在 OrdersController 的 place_order 函数中的代码后添加以下内容可能会解决您的问题:
return redirect(view('<path to order placed page or index>'))。 使用来自控制器的重定向可防止浏览器再次发送数据。 有关如何实施重定向的更多信息,请参阅 Laravel documentation

我做了更多搜索(条纹 api),发现您可以使用调用幂等请求的东西来解决双重支付问题。我发现 a laravel library 通过中间件处理这个问题。

它基本上是发送一个(用户)唯一密钥并将响应存储在缓存中,如果在接下来的 24 小时内使用相同的(用户)唯一密钥,浏览器将发送缓存的响应。