ヤフーショッピングAPIの「注文に関するAPI」のうち、orderList、orderInfo、orderChange
はリフレッシュトークンの有効期限が12時間です。(その他は4週間です。)
証明書認証を行うことで、12時間の有効期限を4週間に延長できます。
(参考:ヤフーショッピング 本番環境の注文APIの証明書による認証の有効期限延長の意味)
スポンサーリンク
「ヤフーショッピング 本番環境の注文APIの証明書による認証の有効期限延長の意味」をに記述しましたが、アクセストークンを取得するときに、ヤフーショッピングAPIのクライアント証明書を使用する必要はありません。
当時、勘違いしていたので、以下の記事を書きました。
何かの参考になるかもしれないので、一応、記事は残しておきますが、実際に、ヤフーショッピングAPIの「注文に関するAPI」で、有効期限を4週間にしたい場合は、orderList、orderInfo、orderChangeを使用する時に、クライアント証つかってください。
以下、実際には必要のない処理です。
今回は、VB.netでヤフーショッピングAPIのクライアント証明書を使用してアクセストークンを取得する方法を紹介します。
まず、クライアント証明書を取得するためには、ヤフーに申請する必要があります。
→ヤフーショッピングAPIのクライアント証明書を申請しました。
クライアント証明書を取得したら、VB.netのHttpWebRequestでリクエストを送信するわけですが、その前に、秘密鍵(keyファイル) とSSLクライアント証明書(crtファイル)を1つにまとめて、PKCS#12形式に変換する必要があります。
→Windows用のOpenSSLをインストールしてみました。
次に、アクセストークンを取得する時にしようしたコードを元に書き換えます。
元のコードはこちらです。
→VB.net でYahoo APIのアクセストークンを取得してみました。
「System.Security.Cryptography.X509Certificates」をインポートしておきます。
VB.netでヤフーショッピングAPIのクライアント証明書を使用してアクセストークンを取得するコード
Dim sアプリケーションID As String Dim sシークレット As String Dim sCredentials As String Dim bBytes() As Byte Dim sBase64 As String Dim sAuthorization As String Dim webReq As Net.HttpWebRequest Dim webRes As Net.HttpWebResponse Dim sトークンエンドポイント As String Dim s認可コード As String Dim sリダイレクトURL As String Dim reqStream As Stream Dim resStream As Stream Dim resStreamReader As StreamReader Dim sJSON As String sアプリケーションID = "アプリケーションID " sシークレット = "シークレット " s認可コード = "認可コード " sリダイレクトURL = " リダイレクトURL" Dim sPKCS12Path As String Dim sPKCS12Password As String Dim bPKCS12() As Byte Dim fsPKCS12 As FileStream Dim x509 As New X509Certificate2 sPKCS12Path = "PKCS12ファイルのパス" sPKCS12Password = "PKCS12ファイルを生成した時のパスワード" 'PKCS12ファイルをバイト配列に読み込みます。 fsPKCS12 = New FileStream(sPKCS12Path, FileMode.Open, FileAccess.Read) ReDim bPKCS12(fsPKCS12.Length - 1) fsPKCS12.Read(bPKCS12, 0, bPKCS12.Length) fsPKCS12.Close() 'X509Certificate2を使用して、証明書ファイルを読み込みます。 x509 = New X509Certificate2(bPKCS12, sPKCS12Password, X509KeyStorageFlags.MachineKeySet) 'アプリケーションIDとシークレットを「:」(コロン)でつなぎ sCredentials = sアプリケーションID & ":" & sシークレット 'Base64でエンコード bBytes = System.Text.Encoding.ASCII.GetBytes(sCredentials) sBase64 = Convert.ToBase64String(bBytes) sAuthorization = String.Concat("Basic ", sBase64) 'Tokenエンドポイント sトークンエンドポイント = "https://auth.login.yahoo.co.jp/yconnect/v1/token" 'POSTするデータを設定 Dim ht As New Hashtable ht("grant_type") = "authorization_code" ht("code") = s認可コード 'リダイレクトURLは空欄でも動作しました。 ht("redirect_uri") = sリダイレクトURL Dim param As String = "" For Each k As String In ht.Keys param += String.Format("{0}={1}&", k, ht(k)) Next Dim data As Byte() data = System.Text.Encoding.ASCII.GetBytes(param) 'WebRequestを使用し、Authorizationヘッダーに乗せてアクセス webReq = DirectCast(System.Net.WebRequest.Create(sトークンエンドポイント), System.Net.HttpWebRequest) webReq.Method = "POST" webReq.ContentType = "application/x-www-form-urlencoded" webReq.ContentLength = data.Length webReq.Headers("Authorization") = sAuthorization '読み込んだ証明書ファイルをリクエストに乗っけます。 webReq.ClientCertificates.Add(x509) 'RequestStreamを取得 reqStream = webReq.GetRequestStream() reqStream.Write(data, 0, data.Length) reqStream.Close() 'RequestStreamを取得 webRes = webReq.GetResponse() resStream = webRes.GetResponseStream() resStreamReader = New StreamReader(resStream, Encoding.UTF8) 'レスポンスはJSON形式です。 sJSON = resStreamReader.ReadToEnd resStreamReader.Close() resStream.Close() webRes.Close()
以上です。