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