アクセストークンの取得に失敗します
「スマレジ・プラットフォームAPI 共通仕様書」に倣ってアクセストークンの取得を行おうとしているのですが、Postmanで実行する分には正常に取得できるのですが、それを c# で実装しようとすると"unsupported_grant_type"で取得に失敗します。
Postman の出力するコードを元に以下のようにしているのですが、間違っている個所がありましたらご指摘願えませんでしょうか。
var client = new RestClient("https://id.smaregi.dev/app/******/token");
var request = new RestRequest() { Method = Method.Post };
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("Authorization", "Basic *******************************");
request.AlwaysMultipartFormData = true;
request.AddParameter("grant_type", "client_credentials");
request.AddParameter("scope", "pos.stores:read pos.stores:write");
RestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
ベストアンサー
-
grant_type の値が間違っているほかに、grant_type の値がない(もしくは取れていない)というケースでもエラーになります。
またContent-Type が application/x-www-form-urlencoded である必要もあるため、そちらもご確認ください。
答え
@yokota
ご認識いただいている通りで、grant_typeは基本仕様書に記載の通りclient_credentialsを指定ください。
なお、特定の言語やライブラリについてのサポートはいたしかねます。ご了承ください。
ご回答ありがとうございます。
そして、失礼いたしました。
それでは、特定の言語やライブラリという意味ではなく、
grant_type に client_credentials を設定しているが、unsupported_grant_type になります。どういった可能性が考えられますでしょうか?
何か考えられる事がありましたら、ご教示願えませんでしょうか。
ご回答ありがとうございます。
解決しましたのでご報告致します。
元の質問のコードの
>request.AlwaysMultipartFormData = true;
この行が原因で Content-Type に齟齬が生じて grant_type が正しく読まれなかったようです。
その為、上記の一行を削除することで正常にアクセストークンが取得できました。
ちなみに、上記一行を残す必要がある場合。Content-Type に multipart/form-data を指定すればアクセストークンの取得ができるようですが、
本来のやり方とは異なるのでオススメは致しません。
(ただ、Postman は内部的にそんなリクエストを投げているようで、その結果コードの自動生成で余計なコードが吐き出されているのだと思われます)
色々とありがとうございました。