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

PHP cURL调用NetSuite接口报SSS_MISSING_REQD_ARGUMENT错误如何解决?

问题排查及解决方案

核心错误原因

  • 重复JSON编码:file_get_contents('php://input') 读取到的已经是上游传入的原始JSON字符串,后续调用json_encode()对字符串做二次编码后,最终发送的请求体是被包裹了一层引号的转义字符串,而非标准JSON对象,NetSuite解析后无法正确读取字段参数,因此抛出必填参数缺失的错误。这也解释了你替换为内部数组结构后再json_encode可以正常运行的情况——此时仅执行了一次JSON编码,格式符合要求。
  • 次要配置错误:curl_setopt($ch, CURLOPT_POST, "POST"); 参数配置不符合规范,CURLOPT_POST 需要传入布尔值true而非字符串。

修复方案

仅需要修改两处核心代码即可:

  1. 移除二次JSON编码逻辑,直接将读取到的原始输入作为请求体
  2. 修正CURLOPT_POST参数值
  3. 补充响应结果接收逻辑(可选,方便后续业务处理)

关键代码修改对比

原错误代码段:

$details = file_get_contents('php://input');
$data_string = json_encode($details);
// ...
curl_setopt($ch, CURLOPT_POST, "POST");

修改后代码段:

// 直接使用原始输入的JSON,无需二次编码
$data_string = file_get_contents('php://input');
// ...
curl_setopt($ch, CURLOPT_POST, true);
// 建议接收返回结果用于后续处理
$result = curl_exec($ch);

完整修复后代码参考

function sendOrderToNS() {
    // 直接读取原始JSON作为请求体
    $data_string = file_get_contents('php://input');
    $oauth_nonce = md5(mt_rand());
    $oauth_timestamp = time();
    $oauth_signature_method = 'HMAC-SHA256';
    $oauth_version = "1.0";

    $base_string =
        "POST&" . urlencode(NETSUITE_URL) . "&" .
        urlencode(
            "deploy=" . NETSUITE_DEPLOY_ID
          . "&oauth_consumer_key=" . NETSUITE_CONSUMER_KEY
          . "&oauth_nonce=" . $oauth_nonce
          . "&oauth_signature_method=" . $oauth_signature_method
          . "&oauth_timestamp=" . $oauth_timestamp
          . "&oauth_token=" . NETSUITE_TOKEN_ID
          . "&oauth_version=" . $oauth_version
          . "&realm=" . NETSUITE_ACCOUNT
          . "&script=" . NETSUITE_SCRIPT_ID
        );
    $sig_string = urlencode(NETSUITE_CONSUMER_SECRET) . '&' . urlencode(NETSUITE_TOKEN_SECRET);
    $signature = base64_encode(hash_hmac("sha256", $base_string, $sig_string, true));

    $auth_header = "OAuth "
        . 'oauth_signature="' . rawurlencode($signature) . '", '
        . 'oauth_version="' . rawurlencode($oauth_version) . '", '
        . 'oauth_nonce="' . rawurlencode($oauth_nonce) . '", '
        . 'oauth_signature_method="' . rawurlencode($oauth_signature_method) . '", '
        . 'oauth_consumer_key="' . rawurlencode(NETSUITE_CONSUMER_KEY) . '", '
        . 'oauth_token="' . rawurlencode(NETSUITE_TOKEN_ID) . '", '  
        . 'oauth_timestamp="' . rawurlencode($oauth_timestamp) . '", '
        . 'realm="' . rawurlencode(NETSUITE_ACCOUNT) .'"';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, NETSUITE_URL . '?script=' . NETSUITE_SCRIPT_ID . '&deploy=' . NETSUITE_DEPLOY_ID . '&realm=' . NETSUITE_ACCOUNT);
    // 修正POST参数为布尔值true
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Authorization: ' . $auth_header,
        'Content-Type: application/json',
        'Content-Length: ' . strlen($data_string)
    ]);

    $result = curl_exec($ch);
    $errors = curl_error($ch);
    $responseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    // 可根据业务需要处理$result、$errors、$responseCode
    var_dump($errors, $responseCode, $result);
}
sendOrderToNS();

验证方法

修改完成后可先本地打印$data_string,确认输出格式和Postman的成功请求体格式完全一致,无外层多余引号、无内部多余转义符即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:39:02