Php Symfony-httpclient发布到外部api

Php Symfony-httpclient发布到外部api,php,symfony,Php,Symfony,我正在尝试将支付解决方案集成到我的电子商务网站中。 支付解决方案提供商(saferpay)的官方文档要求我将一些数据发布到他们的API中 由于我是Symfony的初学者,我查阅了官方文档,找到了如何发布到外部API,并找到了HTTPCLIENT服务。(我使用的是Symfony 4.4.20) 我是如何尝试实现它的: /** * @Route("/checkout", name="app_checkout") */ pub

我正在尝试将支付解决方案集成到我的电子商务网站中。 支付解决方案提供商(saferpay)的官方文档要求我将一些数据发布到他们的API中

由于我是Symfony的初学者,我查阅了官方文档,找到了如何发布到外部API,并找到了HTTPCLIENT服务。(我使用的是Symfony 4.4.20)

我是如何尝试实现它的:

    /**
     * @Route("/checkout", name="app_checkout")
     */
    public function initializePayment()
    {
        $payload = array(
            "RequestHeader" => array(
                "SpecVersion" => "1.7",
                "CustomerId" => "307998",
                "RequestId" => "0a71fa0241d68c49387f8aee8f982a7b",
                "RetryIndicator" => 0
            ),
            "TerminalId" => "17735964",
            "Payment" => array(
                "Amount" => array(
                    "Value" => "100",
                    "CurrencyCode" => "EUR"
                ),
                "OrderId" => "123test",
                "Description" => "Test_Order_123test"
            ),
            "ReturnUrls" => array(
                "Success" => "localhost:8000",
                "Fail" =>  "localhost:8000"
            )
        );

        $request = $this->client->request(
            'POST',
            'https://test.saferpay.com/api/Payment/v1/PaymentPage/Initialize',
            [
                'headers' => [
                    'Content-Type' => 'application/json; charset=utf-8',
                    'Accept' => 'application/json'
                ],
                'auth_basic' => ['API_258086_74490074', 'THE PASSWORD'],
                'body' => json_encode($payload)
            ]
        );
    }
但我仍然面临同样的错误:“HTTP/1.1 401未经授权返回用于”https://test.saferpay.com/api/Payment/v1/PaymentPage/Initialize“

我已经联系了我的支付解决方案提供商,他们告诉我,我试图发送的数据似乎没有问题。 看来问题出在Symfony身上。(或者更确切地说是我实现HTTPClient请求的方式…)

有人知道这个错误是从哪里来的吗

谢谢你的帮助


(对不起,我的英语不太好…)

您面临的错误似乎是由于授权错误造成的。如果您愿意,您将看到:

“生成401响应的服务器必须发送WWW身份验证 标题字段1至少包含一个适用于 目标资源。[…]如果请求包括身份验证 凭证,则401响应指示授权已被删除 因为这些证书而被拒绝”


您是否根据标头请求发送凭据?或者您的凭证是正确的凭证?如果没有拼写错误或其他问题?

您将获得401,这意味着您的API希望您识别您是谁,但您没有这样做。

我的最佳猜测是,用于身份验证的某些头丢失,或者它们的值无效,例如
'auth\u basic'=>['API\u 258086\u 74490074','密码',


调试的简单方法是通过
$httpLogs=$request->getInfo('debug')输出原始HTTP请求。对于原始请求,您可以通过询问API支持来查看缺少的内容。

您不想发布到控制器中的API,因为这是web访问者。而是使用php发出一个curl请求,将所需的任何内容发送到外部端点。根据返回的内容,然后使用PHP读取响应并更新用户视图。这不是一个Symfony的东西,而是一个php的东西。把邮递员当作助手。它有导出代码工具,您可以轻松地将其放入Symfony控制器中,以处理所需的任何内容。