2015-07-23 9 views
1

Я использую SageOne API PHP Library. Он работает нормально, но я получаю сообщение об ошибке, если попытаюсь использовать get или post.Ошибка Sage One API

Ошибка,

только переменные должны быть переданы по ссылке sage.api.php на линии 130

Мой get код запроса

$client = new SageOne(SAGE_CLIENT_ID, SAGE_CLIENT_SECRET); 
$client->setAccessToken("c7c7547xxxxxxxxxxxx8efa4f5df08f750df"); 
$data = array(); 
$result = ""; 
$client = $client->get('/products', $data); 

Я не» Знаю, что случилось.

Полный код

require 'sage.api.php'; 
define('SAGE_CLIENT_ID', "fa1e8c1b114347a356d2"); 
define('SAGE_CLIENT_SECRET', "faaa7b353521f823ba13e3a20e72dd057c3a5fd1"); 

$client = new SageOne(SAGE_CLIENT_ID, SAGE_CLIENT_SECRET); 
$callbackURL = 'xxxxx/addonmodules.php?module=sageone'; 
// We need to build the authorise url and redirect user to authorise our app 
if(!$_GET['code']){ 

    $authoriseURL = $client->getAuthoriseURL($callbackURL); 

    // redirect user 
    header("Location: ".$authoriseURL); 


    exit; 


// We now have the authorisation code to retrieve the access token 
} else { 

$accessToken = $client->getAccessToken($_GET['code'], $callbackURL); 

$token= $accessToken['access_token']; 
$end = 'public'; 
$data =''; 
$result = $client->get($end, $data); 
echo '<pre>'; 
print_r($result); 

фрагменты кода из sage.api.php

class SageOne { ... 

... 
public function get($endpoint, $data=false){ 
     return $this->call($endpoint, 'get', $data); 
    } 
... 

// error line 130 from this code 

    private function buildSignature($method, $url, $params, $nonce){ 

     // uc method and append & 
     $signature = strtoupper($method).'&'; 

     // percent encode bit of url before ? and append & 
     $signature .= rawurlencode(array_shift(explode('?', $url))).'&'; 

     // percent encode any params and append & 
     if (is_array($params)){ 

      // sort params alphabetically 
      $this->ksortRecursive($params); 

      // build query string from params, encode it and append & 
      $signature .= str_replace(
       array('%2B'), 
       array('%2520'), 
       rawurlencode(http_build_query($params, '', '&')) 
      ).'&'; 

     // params can be string 
     } else { 

      // build query string from params, encode it and append & 
      $signature .= rawurlencode($params).'&'; 
     } 

     // add 'nonce' - just use an md5 
     $signature .= $nonce; 

     // now generate signing key 
     $signingKey = rawurlencode($this->signingSecret).'&'.rawurlencode($this->accessToken); 

     // encode using sha 1, then base64 encode  
     $finalSignature = base64_encode(hash_hmac('sha1', $signature, $signingKey, true)); 

     return $finalSignature; 

    } 

Это самый короткий я могу сделать, чтобы увидеть все важные код

ответ

0

Это связано с попытками возвращать результат функции или метода непосредственно другой функции или методу ... результат не имеет ссылки.

Так, например:

$obj->method(doSomething(), 'asdf', 'qwerty'); 

Ошибка означает, что вы должны присвоить значение doSomething() перед передачей его.

$result = doSomething(); 
$obj->method($result, 'asdf', 'qwerty'); 

Также см: Only variables should be passed by reference

0

функция (в данном случае, $client->get()) может быть определен, чтобы получить его параметры посредством ссылки. Это означает, что он может напрямую изменять эти параметры. Поэтому, если вы вызываете $client->get($a, $b), функция может изменять значения $a и $b.

Очевидно, что он может изменять только значения переменных, поэтому, когда функция принимает параметр по ссылке, вы должны передать ей переменную, а не строка, целое число, или прямой вызов другой функции ,

Таким образом, если функция $client->get() получает свой первый параметр по ссылке, ни один из следующих не может работать:

$client->get('string', $data); 
$client->get(15, $data); // int 
$client->get(other_function_call(), $data); 
$client->get(12.5, $data); // float 
$client->get(array(), $data); 

Вы должны сделать это:

$a = 'string'; 
$client->get($a, $data); 

Или $a =независимо, быть это строка, int, вызов функции. Дело в том, что (и это ясно сказано в сообщении об ошибке), что вы должны передать переменную . Поэтому сохраните все, что вы хотите передать как переменную, а затем передайте это.

+0

Я попробовал сейчас $ end = "/ public"; $ data = ""; $ client2-> get ($ end, $ data); но такая же ошибка ... – arcronis

+0

Это кажется странным для меня, @arcronis. Вы уверены, что ошибка создается одним и тем же кодом. Попробуйте создать * минимальный рабочий пример * (т. Е. Полный фрагмент кода, который является таким же коротким и простым, как это может быть), и добавив его к вашему вопросу. – TRiG

+0

Я добавил еще код, я думаю, так что вы можете видеть, что важно – arcronis

 Смежные вопросы

  • Нет связанных вопросов^_^