如何在Symfony 4控制器中调用带基础认证的Adyen API?
Symfony 4 HttpClient调用Adyen API(带基础认证)
你的原有代码存在两个问题:未传递基础认证凭据,且参数未以JSON格式发送(Symfony HttpClient默认会以form-data格式传递参数,不符合Adyen API要求)。以下是修正后的完整实现方案:
方法一:使用HttpClient内置auth选项(推荐)
Symfony HttpClient支持通过auth选项直接传递基础认证信息,它会自动生成符合要求的Authorization请求头:
// 构造请求参数数组 $params = [ "merchantAccount" => "exampleMerchantAccount", "shopperReference" => "exampleShopperReference" ]; // 发起POST请求 $result = $this->client->request( 'POST', 'https://pal-test.adyen.com/pal/servlet/Recurring/v68/disable', [ // 基础认证:传入用户名和密码 'auth' => ['ws@Company.login', 'Pa$$W0rd'], // 自动将数组编码为JSON并设置Content-Type头 'json' => $params ] ); // 解析响应为数组 $responseData = $result->toArray();
方法二:手动构造Authorization头
如果需要手动处理认证逻辑,可以自行对用户名密码进行Base64编码后添加请求头:
$params = [ "merchantAccount" => "exampleMerchantAccount", "shopperReference" => "exampleShopperReference" ]; // 生成基础认证的Base64编码字符串 $authToken = base64_encode('ws@Company.login:Pa$$W0rd'); $result = $this->client->request( 'POST', 'https://pal-test.adyen.com/pal/servlet/Recurring/v68/disable', [ 'headers' => [ 'Content-Type' => 'application/json', 'Authorization' => "Basic {$authToken}" ], // 手动将数组编码为JSON作为请求体 'body' => json_encode($params) ] ); $responseData = $result->toArray();
关键提示
- 使用
'json' => $params参数时,HttpClient会自动完成JSON编码并设置Content-Type: application/json头,无需手动处理,能避免格式错误。 auth选项会自动处理Base64编码和请求头生成,比手动构造更简洁可靠。
内容的提问来源于stack exchange,提问作者Ăżiž
相关产品推荐
相关产品推荐

