【问题标题】:Is it there a way to use one URI for multiple routes?有没有办法将一个 URI 用于多个路由?
【发布时间】:2021-04-19 13:15:57
【问题描述】:

如果支付成功,我正在使用 paystack 支付网关在我的控制器中使用回调函数接收响应,我有两种方式在网站上进行支付,一种是通过网站的商店/商店,另一种是通过捐赠,使用单个路由 URI 名称(即 /paystack/callback)可以正常工作,问题是当尝试使用相同的 URI 名称来接收捐赠支付响应时它不起作用,并且当我检查路由列表时只有一个 URI名称 paystack/callback 已列出。

这是我的路线

// 支付处理和退货响应

Route::post('/pay', 'CheckOutController@redirectToGateway')->name('payment');
Route::get('/payment/callback', 'CheckOutController@handleGatewayCallback');



// DONATION PAYMENT PROCESSING AND RETURN RESPONSE

Route::get('/donation', function () {  return view('donation'); })->name('donation');
Route::post('/donation', 'DonationController@redirectToGateway')->name('donate');
Route::get('/payment/callback', 'DonationController@store');

所以我的问题是,有没有办法将该 URI 名称用于两个支付响应,因为这是我在仪表板的支付网关网站上使用的 URI

【问题讨论】:

  • 你必须有 1 条路由并且你必须区分这两种不同类型的请求进入

标签: laravel callback routes payment gateway


【解决方案1】:

是的,您可以使用中间件来获取它。通过这种方式,您可以根据从支付平台收到的响应类型(捐赠或付款,我想收到的值不同)将请求定向到一个或另一个控制器。

  1. 在 app/Http/middleware 中创建一个中间件,结构如下:
<?php namespace App\Http\Middleware;
        
        use Closure;
        use Illuminate\Http\RedirectResponse;
        
        class PaymentDonation{
        
            public function handle($request, Closure $next)
            {
                //Any variable contained in the response of your 
                //gateway that indicates if it is payment.
                if ($request->xxxxx) 
                {
                    return $next($request);
                }
                //Else if response indicates donation...
                return new RedirectResponse(url('/payment/callbackDonation'));
            }
        
        }
  1. 在 app/Kernel.php 中声明你的中间件
protected $routeMiddleware = [
        // some other middlewares
        'paymentdonation' => 'App\Http\Middleware\PaymentDonation',
    ];
  1. 两条路线:
    Route::middleware('paymentdonation')->get('/payment/callback', 'CheckOutController@handleGatewayCallback');
    Route::get('/payment/callbackDonation', 'DonationController@store');

我的代码未经测试,但可以作为近似值。

【讨论】:

  • 感谢您的回答,但不幸的是,收到的价值是相同的,从响应中的变量来区分购买付款和捐赠。
  • 我什至在表单的元数据中添加了一些信息,希望用它来区分捐赠和付款,请求正文仅包含标头、服务器信息等...
  • 我不知道api是如何工作的,但是如果两个响应码没有区别,你将无法为每种操作建立不同的动作机制,除非在发送付款之前请求您可以保存一个您事先知道将包含在响应中的操作标识符,然后将其关联起来。
  • 谢谢,问题解决了,我使用了一个控制器,然后使用条件来检查我在提交付款时添加的唯一变量,如果它等于捐赠或购买,并在此基础上执行所需行动。
猜你喜欢
  • 2023-01-24
  • 1970-01-01
  • 1970-01-01
  • 2020-01-03
  • 2014-10-05
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多