设置回调网址以接收信息

时间:2019-08-01 20:56:20

标签: php laravel laravel-5.8

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

以下是整个设置的摘要。 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 个答案:

答案 0 :(得分:1)

您在正确的道路上。

我会给您一些提示,并建议我希望我那时知道。

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

2)get, post or any:推荐使用post。但是,也许这不是您可以选择的东西。绝大多数网关都会向您的后端发送一个发布请求,但是,一旦我使用了发送get请求的网关,那么在这种情况下,请定义一个any路由。

3)获取,发布或以任何方式始终验证付款网关收到的请求的签名。这是安全的前提,它将丢弃未从支付网关发送的请求。每个付款网关都必须具有此功能,请在文档中找到它。

4)将每个请求有效负载($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)记录管理员中执行的每个用户操作(收费按钮,状态创建按钮,通知发送按钮等等)。你永远都不知道什么时候接到那个电话。

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