Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 设置回调URL以接收信息_Php_Laravel_Laravel 5.8 - Fatal编程技术网

Php 设置回调URL以接收信息

Php 设置回调URL以接收信息,php,laravel,laravel-5.8,Php,Laravel,Laravel 5.8,我试图弄清楚如何设置一个回调url来从支付网关接收支付状态信息 下面是整个设置的摘要。有一个使用Laravel 5.8构建的后端(API端点),将由react应用程序和移动应用程序使用。这两款应用都将使用支付网关的web和移动SDK启动支付交易 然后,支付网关应该通过调用我需要设置的回调api来响应支付状态 这是我第一次尝试做这样的事情,所以请原谅我,如果我的方式,但这里是我写的 回调端点 Route::post('order/payment/status', 'PaymentControlle

我试图弄清楚如何设置一个回调url来从支付网关接收支付状态信息

下面是整个设置的摘要。有一个使用Laravel 5.8构建的后端(API端点),将由react应用程序和移动应用程序使用。这两款应用都将使用支付网关的web和移动SDK启动支付交易

然后,支付网关应该通过调用我需要设置的回调api来响应支付状态

这是我第一次尝试做这样的事情,所以请原谅我,如果我的方式,但这里是我写的

回调端点

Route::post('order/payment/status', 'PaymentController@getStatus'); // receives payment status
PaymentController
getstatus()
方法

public function getStatus(Request $request)
    {
        $paymentMethod          = $request->paymentMethod;
        $amount                 = $request->amount;
        $providerCode           = $request->provider;
        $customerName           = $request->customerName;
        $customerEmail          = $request->customerEmail;
        $paymentDescription     = $request->paymentDescription;
        $paymentStatus          = $request->paaymentStatus;
        $transactionReference   = $request->transactionReference;

        // update my record based on the paymentStatus
    }
这是正确的方法吗?我觉得这应该是一个
get
请求,而不是
post
。请帮忙。

你走的路是对的。 我会给你一些建议和建议,我希望我当时知道

1) 在
auth
中间件组之外定义路由,并禁用其url的CSRF保护,这可以在
App\Http\middleware\VerifyCsrfToken
中间件中实现

2)
get、post或any
post
是推荐的。但是,也许这不是你可以选择的。绝大多数网关都会向您的后端发送post请求,但是,一旦我使用了发送get请求的网关,如果您是这样的话,请定义一个
any
路由

3) 获取、发布或任何,始终使用支付网关验证收到的请求的签名。这是一个安全必须,它将丢弃不是从支付网关发送的请求。每个支付网关都必须有这个,请在文档中找到它

4) 将每个请求有效负载(
$request->all()
)记录到文件或数据库中,然后再记录到控制器中的任何内容,或者如果您愿意,将您的系统与错误跟踪服务(例如Sentry)集成(这是一种简洁的方法)。如果错误停止脚本执行,这将为您节省很多麻烦

5) 加快开发过程的最简单方法是在本地测试代码(无需每次签出),为此,从支付网关(可能是json)获取请求负载,节省邮递员费用,并使用它发送本地后端帖子,模拟来自支付网关的请求(当然,在测试时绕过签名验证)

6) 不要适合支付网关模型,而是让它们适合你的模型。含义:如果不将原始数据转换为逻辑识别的模式,就不要在数据库中保存有意义的原始数据。这是一个最佳实践,可以避免您在将来遇到麻烦(以防您需要更改支付网关)

理解的肮脏实例:

开关($request->paymentStatus){
成功案例:
$status='success';
打破
案例“由用户取消”:
案例“被反欺诈者取消”:
$status='已取消';
打破
违约:
$status='unknown';
打破
}

7)在上面提到的<强>最佳实践中,如果您需要在PHP中编码签出,请考虑使用例如已知的支付处理库。这是一种全新的学习,但是,这种学习对于生活来说已经足够了

8) 记录在管理员中采取的每个用户操作(充电按钮、状态创建按钮、通知发送按钮等)。你永远不知道什么时候会接到那个电话


就这样。希望它有帮助

它必须是支付网关指定的HTTP方法。当然,你所做的没有错。如果它不是
GET
请求,请确保在
csrf
中间件的
$except
数组中添加uri@Rwd谢谢,我会这样做。@Rwd要添加到
csrf
中间件的uri将是支付网关的uri,对吗?
order/payment/status
。回叫的路线。@Rwd好吧。我将与支付网关支持团队一起测试。