-3

我正在尝试帮助客户允许用户将数据从他的网站填充到另一家公司的网站。拥有服务器的网站是 DialMyCalls,他们提供了一个 PHP 类来与他们的服务器通信。我无法使用它与他们进行实际交流,因为我不明白我需要编辑哪些字段。

我有 API 密钥和另一个代码片段来添加联系人,我想知道是否有人可以指导我完成使此代码正常工作需要做的事情。我在哪里放置代码的“添加联系人”部分以实际运行它并查看它是否填充在数据库中。我可以提供您可能需要的任何信息。

以下 PHP 类来自API 提供者

<?php
class RestRequest
{
protected $url;
protected $verb;
protected $requestBody;
protected $requestLength;
protected $apikey;
protected $acceptType;
var $responseBody;
protected $responseInfo;


public function __construct ($apikey = null) {

    $this->url              = null;
    $this->verb             = null;
    $this->requestBody      = null;
    $this->requestLength    = 0;
    $this->apikey           = $apikey;
    $this->acceptType       = 'application/json';
    $this->responseBody     = null;
    $this->responseInfo     = null;

}

public function flush ()
{
    $this->requestBody      = null;
    $this->requestLength        = 0;
    $this->verb             = 'POST';
    $this->responseBody     = null;
    $this->responseInfo     = null;
}

public function execute ($url = null, $verb = 'POST', $requestBody = null) {
    $ch = curl_init();
    $this->url              = "https://www.dialmycalls.com/api".$url;
    $this->verb             = $verb;
    $this->requestBody      = $requestBody;
    try
    {
        switch (strtoupper($this->verb))
        {
            case 'POST':
                $this->doExecute($ch);
                break;
            default:
                throw new InvalidArgumentException('Current verb (' . $this->verb . ') is an invalid REST verb.');
        }
    }
    catch (InvalidArgumentException $e)

    {           curl_close($ch);
        throw $e;
    }
    catch (Exception $e)
    {
        curl_close($ch);
        throw $e;
    }

}
protected function doExecute (&$curlHandle) {
    curl_setopt($curlHandle, CURLOPT_POST, 1);
    $this->requestBody["apikey"] = $this->apikey;
    curl_setopt($curlHandle, CURLOPT_POSTFIELDS, $this->requestBody);
//  curl_setopt($curlHandle, CURLOPT_TIMEOUT, 60);
    curl_setopt($curlHandle, CURLOPT_URL, $this->url);
    curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curlHandle, CURLOPT_VERBOSE, 0);
    curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array ('Accept: ' . $this->acceptType,'Expect:'));
    $this->responseBody = curl_exec($curlHandle);
    $this->responseInfo = curl_getinfo($curlHandle);
    curl_close($curlHandle);
}
}
?>

PHP 添加联系人

for($i=1;$i<=5;$i++) {
$nums[] = array(
    "phone"=>"832201111".$i,
    "firstname"=>"just",
    "lastname"=>"testing",
);
}
$request->execute(
"/1-0/AddContact/",'POST',
array("names"=>json_encode($nums))
);
4

1 回答 1

0

这是一个相当广泛的问题,但首先想到的是这个文件是一个库类,因此不应该被编辑。您应该在自己的代码中包含该文件并实例化一个对象。

因此,下载一个新副本,并将其提交到项目根目录中合适文件夹中的版本控制。然后,在您自己的代码中,执行以下操作:

$rest = new RestRequest('yourkey');

从这里,您可以使用文档来完成这项工作。对 HTTP 和 REST 接口的理解在这里将非常宝贵,因此可能值得先阅读。看起来第二段代码(“添加联系人”)可能有效 - 使用您的密钥尝试,并使用print_r.

所以,试试这个在你的列表中添加一个联系人:

for($i=1;$i<=5;$i++) {
    $nums[] = array(
        "phone"=>"832201111".$i,
        "firstname"=>"just",
        "lastname"=>"testing",
    );
}

$request->execute(
    "/1-0/AddContact/",
    'POST',
    array("names"=>json_encode($nums))
);

然后,您可以检查输出:

echo '<pre>' . print_r($request->responseBody, true) . '</pre>;

不幸的是,文档没有详细说明返回参数,因此您可能必须使用反复试验来确定调用是否成功 - 希望它实际上是返回的!正如我之前提到的,远程服务似乎不尊重 REST 的基本原则——如果你愿意,你可以问他们为什么只读操作不使用GET,保存不使用PUT(他们提供的类抛出一个如果您不使用,则例外POST)。

您应该请求一个新密钥,因为您似乎已经发布了您现有的密钥,这应该是秘密信息。使用此密钥,其他人可以使用授予您帐户的权限发帖,通常您不希望这种情况发生。

于 2013-04-21T20:49:58.763 回答