Ошибка API Sage One

Я использую PHP-библиотека SageOne API. Это работает нормально, но я получаю ошибку, если я пытаюсь использовать get или же post,

Ошибка в том,

Только переменные должны передаваться по ссылке 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;

}

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

1

Решение

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

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

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

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

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

Также см: Только переменные должны быть переданы по ссылке

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

По вопросам рекламы [email protected]