如何在 curl 脚本中处理多个 select 值

How to handle multiple select values in a curl script

我正在将一些数据发送到 SalesForce,但我遇到了一些针对多个 select 的值的问题。我不相信这是 Salesforce 特有的,所以我在这里发布了问题。

这是我当前的脚本:

<?php

  if($_POST['cis'] == '1'){
    $query['00ND0000003viLy'] = array(
      'Essential',
      'CIS'
    );
  }else{
     $query['00ND0000003viLy'] = 'Essential';
  }

  foreach ( $query as $key => $value) {
    $post_items[] = $key . '=' . $value;
  }
  $post_string = implode ('&', $post_items);

  $curl = curl_init();
  curl_setopt($curl, CURLOPT_URL, 'xxx');
  curl_setopt($curl, CURLOPT_POST, count($post_items));
  curl_setopt($curl, CURLOPT_POSTFIELDS, $post_string);
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);

  $result = curl_exec($curl);

  curl_close($curl);

  echo $result;

?>

在 SalesForces 的最后,$query['00ND0000003viLy'] 的值最终以字符串形式出现,Array(当它符合条件时)。

如何为 $query['00ND0000003viLy'] 分配多个值,以便将其解释为多个 select?

将参数添加为 http 查询字符串,如下所示:

$post_string = http_build_query($query);

curl_setopt($curl, CURLOPT_URL, 'xxx');
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);

好的,事实证明这很可能是特定于 salesforce 的东西,tl;dr 是值需要是单个字符串并用分号分隔。所以这是我的示例的工作代码:

if($_POST['cis'] == '1'){
    $query['00ND0000003viLy'] = 'Essential; CIS';
  }else{
     $query['00ND0000003viLy'] = 'Essential';
  }

对于其他需要更动态解决方案的人来说,应该按照以下思路去做:

join(';', $query['00ND0000003viLy'])

(再次以我原来的例子为例)。

这里找到了答案的关键:https://developer.salesforce.com/forums/?id=906F00000008ssBIAQ

哦,@sanderbee 的回答包含一种更简洁的构建查询的方法。