betaAPIはjsonでのPOSTリクエストが必須となっているため、tmhOAuthでは利用できません
Requires a JSON POST body and Content-Type header to be set to application/json. Setting Content-Length may also be required if it is not automatically.
https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/new-event
abraham/twitteroauthでのサポート状況
https://github.com/abraham/twitteroauth/pull/581
tmhOAuthはサポートされるかわかりません。
https://github.com/themattharris/tmhOAuth/issues/195
現状、ライブラリに頼らずリクエストをするしか手段は無いと思います
https://qiita.com/mpyw/items/b59d3ce03f08be126000
サンプルを記載しておきます
<?php
/* 参考 [PHP] ライブラリに頼らないTwitterAPI入門
* https://qiita.com/mpyw/items/b59d3ce03f08be126000
*/
$url = 'https://api.twitter.com/1.1/direct_messages/events/new.json';
$userId = '';
$consumerKey = '';
$consumerSecret = '';
$accessToken = '';
$accessTokenSecret = '';
$json = [
'event'=>[
'type'=>'message_create',
'message_create'=>[
'target'=>[
'recipient_id'=>$userId
],
'message_data'=>[
'text'=>'testdirectmessage123',
/*
'attachment'=>[
'type'=>'media',
'id'=>[
'...'
]
]
*/
]
]
]
];
$oauth_params = [
'oauth_consumer_key' => $consumerKey,
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_timestamp' => time(),
'oauth_version' => '1.0a',
'oauth_nonce' => bin2hex(openssl_random_pseudo_bytes(16)),
'oauth_token' => $accessToken,
];
$base = $oauth_params;
// キー
$key = [$consumerSecret, $accessTokenSecret];
uksort($base, 'strnatcmp');
$oauth_params['oauth_signature'] = base64_encode(hash_hmac(
'sha1',
implode('&', array_map('rawurlencode', array(
'POST',
$url,
str_replace(
array('+', '%7E'),
array('%20', '~'),
http_build_query($base, '', '&')
)
))),
implode('&', array_map('rawurlencode', $key)),
true
));
foreach ($oauth_params as $name => $value) {
$items[] = sprintf('%s="%s"', urlencode($name), urlencode($value));
}
$signature = 'Authorization: OAuth ' . implode(', ', $items);
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($json),
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
$signature
],
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => 'gzip',
CURLINFO_HEADER_OUT => true,
]);
$response = curl_exec($ch);
var_dump($response);
var_dump(curl_getinfo($ch));
curl_close($ch);
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/08 13:04