使用PHP调用Square Retrieve Subscription API返回INVALID_REQUEST_ERROR求助
问题解决:Square Retrieve Subscription API 返回 NOT_FOUND 错误
核心原因:请求方法错误
Square的Retrieve Subscription API是GET请求,但你的代码里设置了CURLOPT_POST = TRUE,强制用POST方法访问GET接口,这会导致Square无法正确解析请求,返回「资源未找到」的错误。而API Explorer默认使用正确的GET方法,所以能正常返回结果。
修正后的代码
移除CURLOPT_POST = TRUE(GET是curl默认请求方法,无需额外设置),同时补充curl错误调试逻辑:
$curl_url = "https://connect.squareup.com/v2/subscriptions/" . $subscriptionID; system_log("curl_url is $curl_url"); if (($subscriptionID != "") && ($curl_url != "")) { $ch = curl_init($curl_url); curl_setopt_array($ch, array( CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_HTTPHEADER => array( 'Square-Version: 2023-09-25', 'Authorization: Bearer ' . $GLOBALS['square_access_token'], 'Content-Type: application/json' ) )); $response = curl_exec($ch); // 新增:记录curl错误信息 if(curl_errno($ch)){ system_log("Curl error: " . curl_error($ch)); } // 新增:记录HTTP响应状态码 $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); system_log("HTTP status code: " . $http_code); system_log("response is $response"); curl_close($ch); // 记得关闭curl句柄 }
额外排查建议
- 核对access token环境:沙盒token只能用于沙盒API环境,生产token对应生产环境,两者不可混用。
- 清理subscription ID:用
trim($subscriptionID)去除ID前后可能存在的空格或特殊字符。 - 关注HTTP状态码:如果状态码是401,说明token无效;403是权限不足;只有404才是资源本身不存在。
内容的提问来源于stack exchange,提问作者Andy Mussaw
相关产品推荐
相关产品推荐

