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

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

ただいまの
回答率

90.33%

  • C#

    7696questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • LINE Messaging API

    170questions

C#でLINEに発言したいです。

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 573

movixy

score 6

 前提・実現したいこと

C#のWPFアプリケーションからLINEに発言したいです。
https://skyblock.jp/2017/12/31/line-notify/
を参考にしましたが、サーバーエラーになっています。

 発生している問題・エラーメッセージ

System.Net.WebException
  HResult=0x80131509
  Message=リモート サーバーがエラーを返しました: (401) 許可されていません
  Source=System
  スタック トレース:
   場所 System.Net.HttpWebRequest.GetResponse() (f:\dd\NDP\fx\src\net\System\Net\HttpWebRequest.cs):行 2257

 該当のソースコード

            var token = "mytoken";

            var url = "https://notify-api.line.me/api/notify";
            var encode = Encoding.UTF8;
            var payload = "message=" + WebUtility.UrlEncode("こんにちは!");

            using (var wc = new WebClient())
            {
                wc.Encoding = encode;
                wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
                wc.Headers.Add("Authorization", "Bearer " + token);
                var response = wc.UploadString(url, payload);

 該当のソースコード(2018/08/13現在)

            var token = "mytoken";

            var url = "https://notify-api.line.me/api/notify";
            var encode = Encoding.UTF8;
            var payload = "message=" + HttpUtility.UrlEncode("こんにちは!", encode);

            using (var wc = new WebClient())
            {
                wc.Encoding = encode;
                wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
                wc.Headers.Add("Authorization", "Bearer " + token);
                var response = wc.UploadString(url, payload);
            }

 補足情報(FW/ツールのバージョンなど)

Visual Studio 2017 Community

  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

+3

こんにちは。

参考ページに記載されている通りに(コピペ)して、私の環境では動作しました。
受信イメージ

参考ページとの違いとして以下が挙げられます。

var payload = "message=" + WebUtility.UrlEncode("こんにちは!");

次のように修正しても改善しませんか?

var payload = "message=" + HttpUtility.UrlEncode("こんにちは!", encode);
  • HttpUtility.UrlEncodeメソッドの第2引数にencodeを追加

もしくは、Token文字列のコピーミス等を再度確認することが考えられます。

 追記 (2018/08/07)

WinMergeでマージしました。以下の点は変更可能ですか?

var payload = "message=" + WebUtility.UrlEncode("こんにちは!");


WebUtilityHttpUtilityに変更してください。

var payload = "message=" + HttpUtility.UrlEncode("こんにちは!", enc);

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/08/06 21:07

    ほんとですか。確認します!

    キャンセル

  • 2018/08/06 21:34

    こんにちは。情報ありがとうございました。
    早速encodeを追加し、念のためトークンも再発行してみましたが、ダメでした。
    相変わらず401エラーになりました。

    キャンセル

  • 2018/08/07 09:54

    差分見つけたので回答に追記します

    キャンセル

  • 2018/08/13 22:46

    こんにちは。差分情報ありがとうございます。
    細かく修正したので、あらためて最新の状況のコードの全文を掲載しておきます。
    この状態で、依然として401エラーです。
    とすると、ほかの設定の課題かと思いました。

    WebでMessaging API設定を確認しました。
    LINE Developers API Document

    ステータス 利用中

    利用可能なAPI
    REPLY_MESSAGE
    PUSH_MESSAGE

    リクエスト設定
    LINE Platformからあなたのサーバーへの送信リクエストを設定します。

    Webhook送信
    利用する

    となっています。
    ほかになにか設定が必要なのでしょうか…。

    キャンセル

  • 2018/08/18 00:30

    コメント遅くなり申し訳ありません。また各種情報の確認ありがとうございます。
    しかしながら私のほうではそこまで詳しい情報の設定および確認を行っておりません。
    (私のほうではLINE Notifyの登録を行ったのみ)
    重ねてお詫び申し上げます。

    正直申し上げてこれ以上は私の手に余ります。(Web関連の技術は疎いのです。すみません。)
    私の環境で送信しているメッセージを比較すれば何かわかるのかもしれませんが、片手間では難しい状況です。
    ここでより詳細な回答が得られれば良いのですが、そうでない場合はLINEに対して問い合わせを行ってはいかがでしょうか?
    movixyさんにとって本件がプライオリティの高い問題であれば、早く、より簡単と考えます。

    ここまで書いて、改めてLINEのAPIドキュメント確認しました。
    POST時の401エラーは以下の原因があると記載されています。
    > もしこのAPIの呼び出しでステータスコード 401 がレスポンスされた場合、該当するアクセストークンは LINE Notify 側で無効化 (主にユーザによる無効化) されたことを示します。この場合、連携サービス側でも連携情報を削除してしまってかまいません。

    レスポンスStatusの説明においても以下の記述があります。
    > 401: アクセストークンが無効
    (y_waiwai様が回答している内容と重複します)

    トークンも正常かつ、プログラム的な不備が見当たらないのであれば、LINEに問い合わせるのが、やはり良いように思います。

    長文失礼しました。お役に立てず申し訳ありません。

    キャンセル

  • 2018/08/18 12:43

    いえいえ。お詫びなんてとんでもない。恐縮です。
    コードは問題なさそうなので、とすると環境に問題があるのかな、という気がして、追記しました。
    何度も回答を求めているとしている通り、急いではいないですが、重要だと考えています。プライオリティは高いです。おっしゃるようにLINEにも問い合わせてみます。感謝します。

    キャンセル

0

LINE公式のドキュメントには、

リクエストヘッダに Authorization: Bearer <access_token> を付与してアクセスします。使用したアクセストークンが無効な場合、RFC6750 に基きステータスコード 401 と共に WWW-Authenticate ヘッダを返します。

とあるので、ヘッダの形式が違うか、アクセストークンが違う、ってことではないでしょうか

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

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

  • C#

    7696questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • LINE Messaging API

    170questions