JSON — PHP пост форматирования данных

В соответствии с Документация по Eventbrite API v3, предпочтительный способ представить данные в виде JSON. Я пытаюсь обновить данные через простой органайзер ExtJS grid. Изменения не обрабатываются.

Решение находится в MODX и updateFromGrid.class.php выглядит так:

class UpdateOrganizerFromGridProcessor extends modProcessor {

public function initialize() {
$data = $this->getProperty('data');
if (empty($data)) return $this->modx->lexicon('invalid_data');
$data = $this->modx->fromJSON($data);
if (empty($data)) return $this->modx->lexicon('invalid_data');
$this->id =  $data['id'];

$this->params = array ();
// build JSON content for form submission...cooking key names
$this->formData = array (
'organizer.name' =>  $data['name'],
'organizer.description.html' => $data['description'],
'organizer.logo.id' => $data['logo_id'],
);
$this->formJSON = $this->modx->toJSON($this->formData);

$this->args = array('id' => $this->id, 'params' => $this->params);
return parent::initialize();
}

public function process() {
// call to main class to save changes to the Eventbrite API
$this->mgr_client = new Ebents($this->modx);
$this->output = $this->mgr_client->postData('organizers', $this->args, $this->formJSON);
$response = json_decode(json_encode($this->output), true);
return $this->outputArray($response);
}
}
return 'UpdateOrganizerFromGridProcessor';

Вывод json из вышеперечисленного:

{"organizer.name":"Joe Organizer","organizer.description":"Joe is the Uberest Organizer."}

И моя должность:

//send data to Eventbrite
function postData($method, $args, $JSONdata) {
error_log("JSON Payload : " . $JSONdata);
// Get the URI we need.
$uri = $this->build_uri($method, $args);
// Construct the full URL.
$request_url = $this->endpoint . $uri;
// This array is used to authenticate our request.
$options = array(
'http' => array(
'header'  => "Content-type: application/json\r\n". "Accept: application/json\r\n",
'method'  => 'POST',
'content' => $JSONdata,
'header'  => "Authorization: Bearer " . $this->token
)
);
// Call the URL and get the data.
error_log("URL: " . $request_url);
error_log("Content: " . $options['http']['content']);
$resp = file_get_contents($request_url, false, stream_context_create($options));
// parse our response
if($resp){
$resp = json_decode( $resp );

if( isset( $resp->error ) && isset($resp->error->error_message) ){
error_log( $resp->error->error_message );
}
}
// Return it as arrays/objects.
return $resp;
}

function build_uri($method, $args) {
// Get variables from the $args.
extract($args);
// Get rid of the args array.
unset($args);
// Create an array of all the vars within this function scope.
// This should be at most 'method', 'id' and 'data'.
$vars = get_defined_vars();
unset($vars['params']);
// Put them together with a slash.
$uri = implode($vars, '/');
if (!empty($params)) {
return $uri ."?". http_build_query($params);
}
return $uri;
}

Сообщение работает, однако данные не обновляются, и ответом является исходный набор данных. Что мне здесь не хватает?

1

Решение

Я понял. Это была проблема с отсутствующей косой чертой прямо перед строкой запроса. Я также удалил данные JSON и отправляю их в кодированном виде. Финальный класс ниже:

class UpdateOrganizerFromGridProcessor extends modProcessor {

public function initialize() {
$data = $this->getProperty('data');
if (empty($data)) return $this->modx->lexicon('invalid_data');
$data = $this->modx->fromJSON($data);
if (empty($data)) return $this->modx->lexicon('invalid_data');

$this->id =  $data['id'];

$this->params = array (
'organizer.name' =>  $data['name'],
'organizer.description.html' => $data['description'],
'organizer.logo.id' => $data['logo_id'],
);

$this->args = array('id' => $this->id, 'data'=> '', 'params' => $this->params);
return parent::initialize();
}

public function process() {
// call to main class to save changes to the Eventbrite API
$this->mgr_client = new Ebents($this->modx);
$this->output = $this->mgr_client->postData('organizers', $this->args);
$response = json_decode(json_encode($this->output), true);
return $this->outputArray($response);
}
}
return 'UpdateOrganizerFromGridProcessor';
0

Другие решения

Других решений пока нет …

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