Я давно использую библиотеку 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 без твиттера
Я ценю любую помощь. Спасибо