You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PHP cURL调用Stripe Subscription Search API时遇400 Bad Request错误

修复PHP cURL调用Stripe订阅搜索API的400错误

你的代码存在几个导致400错误的问题,以下是问题分析和修正方案:

问题点

  • URL拼接冗余符号:当next_page为空时,URL会出现?&expand这种格式,多余的&会导致参数解析失败
  • 查询语法错误:metadata['order_id']:'6735'AND中缺少空格,Stripe查询语法要求逻辑运算符前后必须有空格
  • 未编码特殊字符:query参数包含空格、<等特殊字符,直接拼接会破坏URL格式

修正后的代码

$ch = curl_init();
$created = 'created<' . strtotime('tomorrow');
// 处理分页参数,避免多余符号
$next_page = isset($_REQUEST['next_page']) ? '&page=' . $_REQUEST['next_page'] : '';
$limit = 20;
// 构建符合语法的查询语句
$query = "status:'active' AND metadata['order_id']:'6735' AND " . $created;
// 编码查询参数并拼接正确的URL
$curl_url = "https://api.stripe.com/v1/subscriptions/search?expand[]=total_count&limit=" . $limit . "&query=" . urlencode($query) . $next_page;

curl_setopt($ch, CURLOPT_URL, $curl_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
$headr = array();
$headr[] = 'Stripe-Version: 2022-11-15';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headr);   
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, 'XXXX-secret_key_test-XXX');

$response = curl_exec($ch);

// 新增错误排查代码,方便定位问题
if(curl_errno($ch)){
    echo 'cURL错误:' . curl_error($ch);
}

curl_close($ch);

关键修改说明

  1. 调整分页参数拼接逻辑:仅当next_page存在时才添加&page=,避免空值时的格式错误
  2. 修正查询语句空格:在'6735'与AND之间添加空格,符合Stripe查询语法规范
  3. 对query参数做urlencode处理:确保空格、<等特殊字符被正确编码,避免URL解析失败
  4. 新增cURL错误捕获:方便查看具体错误信息,辅助后续调试

内容的提问来源于stack exchange,提问作者sridharnetha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:00:11