我最近从程序到OOP与我的PHP,即时通讯从一本书学习,以及做这本书中的练习和项目,我也给自己一个现实生活项目为我自己的网站做。初始化类和有未定义的偏移量的问题
我想实现一个短信功能到我的网站,而研究项目遇到这个小型图书馆连接到我将使用的公司的API,图书馆是在github上,似乎是不受支持的,我的发给开发者的电子邮件正在反弹。
这是library,这是我使用初始化它的代码:
require_once('classes/class.smsquick.php');
$username = "someuser";
$password = "somepass";
$api = new SmsQuick($username, $password);
//uncommenting the line below returns undefined_index @ line 312 and 282
//$available_credits = $api->checkBalance();
//var_dump($api); //used for checking
这些都是错误我收到:
注意:未定义偏移:用C 1:\在线312
警告:array_values()期望参数1是数组,布尔在C:\ websites \ ooptuts \ public \ classes \ class.smsquick中给出。第282行的php
线路312和282,指出了在接下来的两个方法中,需要最后的两种方法,所以我已示出的那些也:
public function checkBalance() {
$vars = array(
'username' => $this->api_username,
'password' => $this->api_password,
'action' => 'balance',
);
$retval = $this->executeApiRequest($vars);
list(, $response) = array_values(reset($retval)); // line 282
return (int) $response;
}
/**
* Helper method to execute an API request.
*
* @param array $vars
* Data to POST to SMS gateway API endpoint.
*
* @return array
* Response from SMS gateway.
*/
public function executeApiRequest($vars) {
// Basic validation on the authentication details
foreach ($vars as $key => $value) {
switch ($key) {
case 'username':
case 'password':
if (empty($value)) {
throw new Exception('API username or password not specified.');
}
break;
}
}
$data = $this->preparePostData($vars);
$retval = $this->executePostRequest($data);
list($status, $response) = explode(':', $retval); // line 312
if ($status == 'ERROR') {
throw new Exception(strtr('There was an error with this request: !error.', array('!error' => $response)));
}
$data = array();
$lines = explode("\n", $retval);
foreach (array_filter($lines) as $i => $line) {
$line = trim($line);
$data[$i] = explode(':', $line);
}
return $data;
}
protected function preparePostData($data) {
$post_data = array();
foreach ($data as $key => $value) {
switch ($key) {
case 'to':
// Support multiple phone numbers.
$value = implode(',', array_unique($value));
break;
}
$post_data[] = $key . '=' . rawurlencode($value);
}
return implode('&', $post_data);
}
protected function executePostRequest($data) {
$ch = curl_init($this->api_endpoint);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$retval = curl_exec($ch);
curl_close($ch);
return $retval;
}
是否引起如何我正在初始化类的问题或者是我忽略的东西?..我似乎花了两天与谷歌等圈子跑来跑去,并没有取得很大的进展,并希望得到别人的一些建议。
谢谢
你当然是在正确的轨道上,我没有改变重置线,问题是与SSL证书,我上周重新安装Wamp,愚蠢地忘记包括cacert.pem我的Wamp文件夹显然返回通过卷曲响应的错误数据。非常感谢。标记为已回答。 – MartinJJ
很高兴我能帮到你。说实话,我反过来读了这个问题。我应该首先提出CURL呼叫的建议,但我读到这个问题的方式让它落后了。仍然我会保持重置呼吁在自己的线路,以防止$ retval值结束为空。如有必要,您可以在那里进行一些错误检查 – Matt1776