动态更改网址,以使用if语句在API键之间进行切换

时间:2018-10-22 20:13:34

标签: php api if-statement curl dynamic

这是我的问题:

我需要将一些数据从CRM发送到另一个CRM。现在的问题是该URL必须是动态的,因为不幸的是,它具有不同的API密钥。

因此,假设我要发送一些数据,这些数据将基于位置而更改API密钥。最好举个例子:

    $url = 'https://my_website/api/student/add';

    $myvars = 'firstName=' . $new_array['firstName'] 
                           . '&lastName=' . $new_array['lastName'] 
                           . '&locationID=' . $new_array['locationID'] 
                           . '&currentStatus=' . $new_array['currentStatus'];

    $apikey;
    function apikey() {
        if ($new_array['locationID'] == 1) {
            $apikey = $toronto;
        } elseif($new_array['locationID'] == 2) {
            $apikey = $newyork;
        } else {
           $apikey = $rome;
        }
    }

    $ch = curl_init( $url );
    curl_setopt( $ch, CURLOPT_POST, 1);
    curl_setopt( $ch, CURLOPT_POSTFIELDS, $myvars);
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt( $ch, CURLOPT_HEADER, 0);
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);

    $response = curl_exec( $ch );

第一件事:我应该在哪里添加$ apikey自动将其添加到URL的末尾?

我的字段来自另一个数组:

$new_array = [
    'firstName' => $json_final['core']['firstname']['value'],
    'lastName' => $json_final['core']['lastname']['value'],
]; ..

以此类推,你明白了。

正如我刚开始所说的,每个API密钥都是不同的:

$toronto = '123456';
$rome = '789101112';

以此类推。

因此,从本质上讲,我需要基于用户已经在我的网站上发送的表单构建动态URL,并且我希望将其定向到两个CRM。忽略第一个已经可以的情况,我需要创建第二个URL,以将具有动态功能的相同数据发布到另一个URL。

2 个答案:

答案 0 :(得分:1)

这里有一个PHP函数可以完成您的工作:

    $myvars = 'firstName=' . $new_array['firstName'] 
. '&lastName=' . $new_array['lastName'] 
. '&locationID=' . $new_array['locationID'] 
. '&currentStatus=' . $new_array['currentStatus'];

您可以为此使用http_build_query

$myvars = http_build_query($new_array);

关于该功能:

function apikey() {
    if ($new_array['locationID'] == 1) {
        $apikey = $toronto;
    } elseif($new_array['locationID'] == 2) {
        $apikey = $newyork;
    } else {
       $apikey = $rome;
    }
}

它什么也没做。它不返回任何内容,也不解决函数scope外部定义的$apikey

我建议创建一个将locationID与API密钥关联的数组。我还建议从配置文件中加载该文件,这样,如果API密钥发生更改,您就不必更改代码。

$keys = [
    1 => '123456',
    2 => '789101112',
    //etc.
];

然后,您可以使用$new_array中的locationID进行引用。将其添加到数组中,然后构建查询。

$new_array['apiKey'] = $keys[$new_array['locationID']];
$myvars = http_build_query($new_array);

答案 1 :(得分:0)

如果我理解正确的话,这样的事情会做

function getApiKey($locationId) {
  $apiKeys = [
    1 => 12345, 2 => 6789... // key is the locationId and value is the api key
  ];
  return !empty($apiKeys[$locationId]) ? $apiKeys[$locationId] : $apiKeys['defaultKey'];
}

$myvars = 'firstName=' . $new_array['firstName'] 
. '&lastName=' . $new_array['lastName'] 
. '&locationID=' . $new_array['locationID'] 
. '&currentStatus=' . $new_array['currentStatus']
. '&apikey=' . getApiKey($new_array['locationID']);