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

Postman中正常运行的Curl转为PHP代码后报错求助

解决PHP Curl调用短信OTP接口的415/400错误问题

问题根源

原运营商提供的curl命令里,-F payloadSend="{...}";type=application/json是核心细节:它指定了payloadSend这个multipart表单字段的内容类型为application/json。但Postman生成的PHP代码没处理这个要求,仅把JSON字符串当普通表单值传递,导致服务端无法识别正确的媒体类型,抛出415错误;你修改后的格式把字段名和值混写,直接导致表单解析失败,触发400错误。

修正方案

在PHP Curl中,要给指定表单字段单独设置Content-Type头,需将CURLOPT_POSTFIELDS里的payloadSend值定义为数组,包含内容、类型等信息,同时修正URL里的拼写错误(原生成代码里的channel-sscapi应为channel-ssc.api,和原curl命令一致)。

修正后的完整代码

<?php

$curl = curl_init();

// 修正URL拼写错误:channel-sscapi → channel-ssc.api
$url = 'https://channel-ssc.api.services.smb.telecomitalia.it/channels/UCP/campaigns?destination=msisdn&message=static&delivery=immediate&type=single&mode=fast';

// 用json_encode构造标准JSON payload,避免手动拼接出错
$payload = json_encode([
    "alias" => "<alias>",
    "sentNotify" => false,
    "deliveredNotify" => false,
    "sr" => false,
    "campaignChannel" => ["channelName" => "UCP"],
    "campaignMessage" => [
        "messageContent" => "TEST TEST TEST!",
        "msisdn" => "<telephon number>"
    ]
]);

curl_setopt_array($curl, array(
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'POST',
    // 关键:给payloadSend字段指定Content-Type为application/json
    CURLOPT_POSTFIELDS => array(
        'payloadSend' => array(
            'contents' => $payload,
            'headers' => array('Content-Type: application/json')
        )
    ),
    CURLOPT_HTTPHEADER => array(
        'X-Token: <token>' // 无需手动设置Content-Type,Curl会自动生成正确的multipart/form-data头
    ),
));

$response = curl_exec($curl);

// 可选:捕获Curl错误便于调试
if(curl_errno($curl)){
    echo 'Curl error: ' . curl_error($curl);
}

curl_close($curl);
echo $response;
?>

关键说明

  1. 不要手动设置Content-Type头:当CURLOPT_POSTFIELDS传入数组时,PHP Curl会自动生成带边界标识的正确multipart/form-data请求头,手动设置反而可能引发格式错误。
  2. 用json_encode构造JSON:避免手动拼接JSON字符串出现语法错误,保证格式标准。
  3. 修正URL拼写:原Postman生成的URL少了一个点,这是容易忽略的隐性错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 04:18:14