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

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

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

696閲覧

YahooショッピングAPIで、アクセストークンが取得できません。

topgunmars

総合スコア13

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2018/12/10 05:10

PHPでYahooショッピングと連携するシステムを実現しようと考えています。

Yahooショッピングには、WebAPIがあり、ほかのシステムと連携できるようです。

YahooAPIを利用する際に必要なアクセストークンを取得する機能を実装中に以下のエラーメッセージが発生し、アクセストークンを取得できません。

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

HTTP/1.1 400 Bad Request : error:invalid_request, error_description: the parameter is invalid. [client_id], error_code: 102

該当のソースコード

PHP

1<?php 2 3$code = $_GET['code']; 4$state = $_GET['state']; 5 6if (!empty($code)) { 7 echo 'code = ' . $code . "\n"; 8 9 getAccessToken($code); 10} 11 12exit(); 13 14 15function getAccessToken($code) { 16 17 $applicationId = <アクセストークン>; 18 $secret = <シークレット>; 19 20 $basicAuth = base64_encode($applicationId . ':' . $secret); 21 22 $header = [ 23 "Authorization: Basic " . $basicAuth 24 ]; 25 26 $url = "https://auth.login.yahoo.co.jp/yconnect/v1/token"; 27 28 $postData = [ 29 'grant_type' => 'authorization_code', 30 'code' => $code, 31 'client_id' => $applicationId, 32 'redirect_uri' => <リダイレクトURL33 ]; 34 35 // echo http_build_query($postData); 36 37 $ch = curl_init(); 38 39 curl_setopt($ch, CURLOPT_URL, $url); 40 curl_setopt($ch, CURLOPT_HEADER, true); 41 curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 42 curl_setopt($ch, CURLOPT_POST, true); 43 curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); 44 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 45 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 46 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 47 48 $response = curl_exec($ch); 49 50 if(curl_error($ch)){ 51 $response = curl_error($ch); 52 } 53 54 $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 55 56 curl_close($ch); 57 58 echo $response; 59} 60

試したこと

AuthorizationヘッダをCURLのものに変更しようとして、以下のようにオプションを追加してもだめでした。

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, $applicationId . ":" . $secret);

POSTデータをhttp_build_queryしてもだめでした。

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));

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

YahooのAPIはv1で、PHPのバージョンは、7.2です。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

error:invalid_request, error_description: the parameter is invalid. [client_id], error_code: 102

パラメータが無効と言われていますね。


アクセストークンの取得について(v1) のサンプルと比べるといくつか異なる点がありますので、サンプルに合わせて修正するとどうなるでしょうか?

Yahoo のサンプルでは、

'Content-Type: application/x-www-form-urlencoded',

を指定している。

$postData = [ 'grant_type' => 'authorization_code', 'code' => $code, 'client_id' => $applicationId, 'redirect_uri' => <リダイレクトURL>

];

Yahoo のサンプルでは、'client_id' を指定していない。

投稿2018/12/10 05:27

CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

topgunmars

2018/12/10 05:35

client_idをなしにすると、エラーなくアクセストークンが取得できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問