PHP+CURL实现Connect with PayPal获取用户信息遇资源不存在错误求助
解决PayPal OAuth2获取用户信息时的RESOURCE_NOT_FOUND问题
嘿,我看了你的代码,找到了几个导致你拿到RESOURCE_NOT_FOUND错误的关键问题,咱们一步步修正:
问题1:错误的API端点URL
你当前调用用户信息的URL多了个不必要的斜杠:
curl_setopt($ch, CURLOPT_URL, 'https://api.paypal.com/v1/oauth2/userinfo/?schema=paypalv1.1');
正确的URL应该去掉路径末尾的斜杠,改成:
curl_setopt($ch, CURLOPT_URL, 'https://api.paypal.com/v1/oauth2/userinfo?schema=paypalv1.1');
问题2:请求方法错误
获取用户信息是GET请求,但你代码里一直沿用之前的POST配置,需要把POST选项关闭:
curl_setopt($ch, CURLOPT_POST, false); // 或者显式设置为GET请求 // curl_setopt($ch, CURLOPT_HTTPGET, true);
问题3:Access Token传递方式错误
PayPal的OAuth2接口要求把access token放在Authorization请求头里,格式为Bearer {你的access_token},而不是作为POST字段传递。你需要添加这个头:
curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Authorization: Bearer ' . $access_token ));
同时要移除原来传递access token的CURLOPT_POSTFIELDS配置,因为GET请求不需要POST参数。
修改后的完整用户信息请求代码块
把你原来获取用户信息的那段代码替换成下面的内容:
// 切换到用户信息API的正确URL curl_setopt($ch, CURLOPT_URL, 'https://api.paypal.com/v1/oauth2/userinfo?schema=paypalv1.1'); // 改为GET请求 curl_setopt($ch, CURLOPT_POST, false); // 设置Authorization头 curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Authorization: Bearer ' . $access_token )); // 清空之前的POST字段(因为GET不需要) curl_setopt($ch, CURLOPT_POSTFIELDS, null); $res_userinfo = curl_exec($ch); if(empty($res_userinfo)) { // 处理错误 } else { $json_userinfo = json_decode($res_userinfo); print_r($json_userinfo); }
额外提醒
别忘了确认你在引导用户授权时,请求的scope参数包含了email(比如openid email profile)——即使你的应用有获取邮箱的权限,授权阶段没请求对应的scope,依然拿不到用户邮箱数据。
内容的提问来源于stack exchange,提问作者denoise
相关产品推荐
相关产品推荐

