会社行きたくなかったんです。

自由になりたくて会社辞めました

IT Visual Studio Yahoo! ビジネス プログラミング

VB.netでヤフーショッピングAPIのクライアント証明書を使用してアクセストークンを取得する方法

更新日:

ヤフーショッピング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()

以上です。

 

-IT, Visual Studio, Yahoo!, ビジネス, プログラミング

Copyright© 自由になりたくて会社辞めました , 2024 AllRights Reserved Powered by AFFINGER4.