繁体   English   中英

当管道到中间件时,我收到错误 "createError(N/error)"],"cause":{"name":"SSS_MISSING_REQD_ARGUMENT","message":"create: Missing a required arg

[英]when piping to middleware I get error "createError(N/error)"],"cause":{"name":"SSS_MISSING_REQD_ARGUMENT","message":"create: Missing a required arg

当我从邮递员直接向 netsuite 发帖时,我没有收到错误消息,但是当我通过 php curl 发帖时,出现以下错误。 此外,如果我将它从 php:input 更改为内部引用的 json 设置,它就可以工作。

错误:{"type":"error.SuiteScriptError","name":"SSS_MISSING_REQD_ARGUMENT","message":"create: Missing a required argument: type","stack":["createError(N/error)", "post(/SuiteApps/create_saleso_extend.js:18)","createError(N/error)"],"cause":{"name":"SSS_MISSING_REQD_ARGUMENT","message":"create: 缺少必需的参数:类型"},"id":"","notifyOff":false,"userFacing":true}

netsuite 说他们收到的请求如下: Context : "{"entity": "14735","PurchaseOrder":"1234", "recordtype": "salesorder","item": [{"item": "311 ","quantity": "1"},{"item": "666","quantity": "1"}]}"

如果我使用邮递员直接从邮递员发布到 netsuite,我会得到以下信息并成功: Context : {"entity":"24704","PurchaseOrder":"1234","re​​cordtype":"salesorder","item": [{"item":"311","quantity":10,"amount":"1234.00"}]}

我看到的唯一区别是我的 php curl 添加了 .

我的php代码如下:

function sendOrderToNS($details) {
    $details = file_get_contents('php://input');
    $data_string = json_encode($details);
    $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);
curl_setopt($ch, CURLOPT_POST, "POST");
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)
]);

curl_exec($ch);
 $errors = curl_error($ch);
$response = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
printf($errors);
printf($response);
}
sendOrderToNS($details);

请帮忙谢谢^_^

事实证明,由于它已经通过任何来源获取 json 作为输入,因此需要执行 $details = json_encode($data_string); 直接删除和使用 $details 可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM