gpt4 book ai didi

php - 设置回调 url 来接收信息

转载 作者:行者123 更新时间:2023-12-03 08:53:39 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何设置回调网址以从支付网关接收支付状态信息。

这是整个设置的摘要。有一个使用 Laravel 5.8 构建的后端(API 端点),将由 React 应用程序和移动应用程序使用。这两个应用程序都将使用支付网关的网络和移动 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) 在 Controller 中的任何内容之前将每个请求有效负载 ($request->all()) 记录到文件或数据库,或者如果您愿意,可以将您的系统与 Sentry 等错误跟踪服务集成,例如(这是一种简洁的方式)。如果错误导致脚本执行停止,这将为您省去很多麻烦。

5) 加快开发过程的最简单方法是在本地测试代码(无需每次都进行结帐),为此,请获取请求负载从支付网关(json,可能),保存在 Postman 上并使用它发送本地后端帖子,模拟来自支付网关的请求(当然,在测试时绕过签名验证)。

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

用于理解的肮脏实用示例:

switch ($request->paymentStatus) {
case 'SUCCESS':
$status = 'success';
break;

case 'CANCELLED_BY_USER':
case 'CANCELLED_BY_ANTIFRAUD':
$status = 'canceled';
break;

default:
$status = 'unknown';
break;
}

7) 继续上面提到的最佳实践,如果您需要在 PHP 中编写结帐代码,请考虑使用已知的支付处理库,例如 Omnipay , 例如。这是一种全新的学习,但是,学习就足够了。

8) 记录在管理员中执行的每个用户操作(收费按钮、状态创建按钮、通知发送按钮,一切...)。你永远不知道什么时候会接到电话。

就是这样。希望对您有帮助

关于php - 设置回调 url 来接收信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57316866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com