PHP Twitter - Библиотека tmhOAuth: ошибка подготовки параметров - PullRequest
1 голос
/ 13 февраля 2020

Я давно использую библиотеку go (что-то старое) для интеграции твиттера с php. Это tmhOAuth от themattharris (версия 0.53). Нет проблем до декабря 2019 года, но без каких-либо изменений со стороны библиотеки или сервера, у меня теперь есть проблемы с функцией, которая подготавливает параметры при отправке «массива массива».

Функция:

  private function prepare_params($params) {
    // do not encode multipart parameters, leave them alone
    if ($this->config['multipart']) {
      $this->request_params = $params;
      $params = array();
    }

    // signing parameters are request parameters + OAuth default parameters
    $this->signing_params = array_merge($this->get_defaults(), (array)$params);
    // Remove oauth_signature if present
    // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
    if (isset($this->signing_params['oauth_signature'])) {
      unset($this->signing_params['oauth_signature']);
    }

    // Parameters are sorted by name, using lexicographical byte value ordering.
    // Ref: Spec: 9.1.1 (1)
    uksort($this->signing_params, 'strcmp');

    // encode. Also sort the signed parameters from the POST parameters
    foreach ($this->signing_params as $k => $v) {
        $k = $this->safe_encode($k);
        $v = $this->safe_encode($v);

        $_signing_params[$k] = $v;
        $kv[] = "{$k}={$v}";
    }

    // auth params = the default oauth params which are present in our collection of signing params
    $this->auth_params = array_intersect_key($this->get_defaults(), $_signing_params);
    if (isset($_signing_params['oauth_callback'])) {
      $this->auth_params['oauth_callback'] = $_signing_params['oauth_callback'];
      unset($_signing_params['oauth_callback']);
    }

    // request_params is already set if we're doing multipart, if not we need to set them now
    if ( ! $this->config['multipart'])
      $this->request_params = array_diff_key($_signing_params, $this->get_defaults());

    // create the parameter part of the base string
    $this->signing_params = implode('&', $kv);
  }

  private function safe_encode($data) {
    if (is_array($data)) {
      return array_map(array($this, 'safe_encode'), $data);
    } else if (is_scalar($data)) {
      return str_ireplace(
        array('+', '%7E'),
        array(' ', '~'),
        rawurlencode($data)
      );
    } else {
      return '';
    }
  }

Ошибка в $kv[] = "{$k}={$v}", она дает:

Преобразование массива в строку

Пример сбойного параметра:

k =event=
v =Array
(
    [type] => message_create
    [message_create] => Array
        (
            [target] => Array
                (
                    [recipient_id] => 1866814
                )
            [message_data] => Array
                (
                    [text] => test
                )
        )
)
  • Как вы могли бы улучшить функцию для обработки параметров этого типа?
  • Что может измениться, что не давало ошибки в течение нескольких месяцев go и теперь да? что это какая-то базовая c связь php без твиттера

Я ценю любую помощь. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...