質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.34%

PHPでTwitterAPIを用いてDMを送る手法について

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 866

score 112

PHP7.2を使ってます。
https://qiita.com/tetra-sol/items/32b144b5fff432a912fa#%E6%B3%A8%E9%87%88%E5%8F%82%E8%80%83%E3%82%B5%E3%82%A4%E3%83%88 を参考に
PHPでDMを送るプログラムを書いています。
しかしながら、レスポンスが以下の通りとなりうまくいきません。

array(
    'errors' => array(
        (int) 0 => array(
            'code' => (int) 32,
            'message' => 'Could not authenticate you.'
        )
    )
)

※XXX,YYY,ZZZ,OOOの部分は適切なものが入っており、同じキーでTweetはできていますし、
DMの権限は取得できています。イメージ説明

何が原因と思いますか?
($message_dataの中身は適切に設定できていることを確認しています。)

private function dmcreater($uid,$message_data){
    $api_key = 'XXX';
    $api_secret = 'YYY';
    $access_token = 'ZZZ';
    $access_token_secret = 'OOO';
    $signature_key = rawurlencode( $api_secret )."&".rawurlencode( $access_token_secret );
    $paramData = array(
        "oauth_token" => rawurlencode( $access_token ),
        "oauth_consumer_key" => rawurlencode( $api_key ),
        "oauth_signature_method" => rawurlencode( "HMAC-SHA1" ),
        "oauth_timestamp" => time(),
        "oauth_nonce" => microtime(),
        "oauth_version" => rawurlencode( "1.0" )
      );
      $sig_param = rawurlencode('POST')."&".
  rawurlencode('https://api.twitter.com/1.1/direct_messages/events/new.json')."&".
  rawurlencode( http_build_query( $paramData , "", "&" ) );
  ksort( $paramData );
$signature = hash_hmac( "sha1", $sig_param, $signature_key, TRUE );
$signature = base64_encode( $signature );
$paramData['oauth_signature'] = $signature;
$httpHeader = array(
    'Authorization: OAuth '.http_build_query( $paramData, "", "," ),
    'content-type: application/json'
  );

  $postData = array(
    "event" => array(
      "type" => "message_create",
      "message_create" => array(
        "target" => array(
          "recipient_id" => "$uid"  //送信先ID
        ),
        "message_data" => $message_data
      )
    )
  );
  debug($httpHeader);
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeader);
  curl_setopt($ch, CURLOPT_URL, 'https://api.twitter.com/1.1/direct_messages/events/new.json');
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, rawurlencode('POST'));
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode( $postData ));

  $json = curl_exec($ch);
  curl_close($ch);
  $response = json_decode( $json, true );
  debug($response);
  return $response;
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2020/05/16 16:25

    そのエラーメッセージで検索すると出てくる記事では何が足らなかったのでしょうか。

    キャンセル

  • Nanohana

    2020/05/16 16:41

    https://fkm.hatenablog.com/entry/20130216/p1
    → query parameterはつけていないので関係無し

    https://teratail.com/questions/2193
    →アクセストークンはツイートできているので誤っていることはないです。

    https://www.anynotes.net/any/entry_580
    →特に凍結とかはないです。

    キャンセル

回答 1

0

Could not authenticate you
なので、認証情報が間違いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る