如何将PHP cURL代码转换为Laravel Guzzle格式?请求报错排查
问题:Laravel Guzzle调用Plaid API失败(PHP-cURL可正常运行)
用Postman测试Plaid的asset_report/create接口,生成的PHP-cURL代码在Laravel中可正常运行,但转换为Guzzle格式后调用返回400 Bad Request错误。
可正常运行的PHP-cURL代码
$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'https://sandbox.plaid.com/asset_report/create', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS =>'{ "client_id": "xxxx", "secret": "xxxx", "access_tokens": ["access-sandbox-xxx"], "days_requested": 30, "options": { "client_report_id": "ENTER_CLIENT_REPORT_ID_HERE", "webhook": "https://www.example.com/webhook", "user": { "client_user_id": "ENTER_USER_ID_HERE", "first_name": "ENTER_FIRST_NAME_HERE", "middle_name": "ENTER_MIDDLE_NAME_HERE", "last_name": "ENTER_LAST_NAME_HERE", "ssn": "111-22-1234", "phone_number": "1-415-867-5309", "email": "ENTER_EMAIL_HERE" } } }', CURLOPT_HTTPHEADER => array( 'Content-Type: application/json' ), )); $response = curl_exec($curl); curl_close($curl); echo $response;
出错的Guzzle代码
use GuzzleHttp\Client; $guzzle = new Client; $getAccestToken = $guzzle->request('POST', 'https://sandbox.plaid.com/asset_report/create', [ 'headers' => ['Content-Type' => 'application/json'], 'json' => [ "client_id" => "xxx", "secret" => "xxx", "access_token" => [ "access-sandbox-xxx" ] , "days_requested" => 30, "options" => [ "client_report_id" => "ENTER_CLIENT_REPORT_ID_HERE", "webhook" => "https://www.example.com/webhook", "user" => [ "client_user_id" => "ENTER_USER_ID_HERE", "first_name" => "ENTER_FIRST_NAME_HERE", "middle_name" => "ENTER_MIDDLE_NAME_HERE", "last_name" => "ENTER_LAST_NAME_HERE", "ssn" => "111-22-1234", "phone_number" => "1-415-867-5309", "email" => "ENTER_EMAIL_HERE" ] ] ] ]);
错误信息
Client error:
POST https://sandbox.plaid.com/asset_report/createresulted in a400 Bad Requestresponse: { "display_message": null, "documentation_url": "https://plaid.com/docs/?ref=error#invalid-request-errors", "error (truncated...)
问题原因与修正
你的Guzzle代码里存在字段名称错误:将cURL代码中的access_tokens(复数形式)写成了access_token(单数形式),而Plaid API要求该字段必须是复数的access_tokens。
修正后的Guzzle代码如下:
use GuzzleHttp\Client; $guzzle = new Client; $getAccestToken = $guzzle->request('POST', 'https://sandbox.plaid.com/asset_report/create', [ 'headers' => ['Content-Type' => 'application/json'], 'json' => [ "client_id" => "xxx", "secret" => "xxx", "access_tokens" => [ "access-sandbox-xxx" ] , // 修正为复数形式 "days_requested" => 30, "options" => [ "client_report_id" => "ENTER_CLIENT_REPORT_ID_HERE", "webhook" => "https://www.example.com/webhook", "user" => [ "client_user_id" => "ENTER_USER_ID_HERE", "first_name" => "ENTER_FIRST_NAME_HERE", "middle_name" => "ENTER_MIDDLE_NAME_HERE", "last_name" => "ENTER_LAST_NAME_HERE", "ssn" => "111-22-1234", "phone_number" => "1-415-867-5309", "email" => "ENTER_EMAIL_HERE" ] ] ] ]);
内容的提问来源于stack exchange,提问作者ferdinand
相关产品推荐
相关产品推荐

