前提・実現したいこと
VBA(エクセル)でYahooの商品画像を削除するような
エクセルアプリをつくっています。
リフレッシュトークンを取得するときにはエラーにならないですが、
本番のURLへメッセージを送るとエラーになります。
解決方法やアドバイスお願いいたします。
<環境>
EXCEL2016, Windows10
発生している問題・エラーメッセージ
OBJECT:MSXML2.ServerXMLHTTP.6.0 実行時エラー'-2147012711(80072f99)': クライアント証明書で資格情報が使用できませんでした。 OBJECT:WinHttp.WinHttpRequest.5.1 実行時エラー'-2146697208(800c0008)': 指定されたリソースのダウンロードに失敗しました。
該当のソースコード
vba
1Function httpPost2(url As String, msg As String, auth As Variant, Optional token As String = False) As String 2' Const WinHttpRequestOption_SslErrorIgnoreFlags As Long = &H4& 3' Const SslErrorFlag_UnknownCA As Long = &H100& 4' Const SslErrorFlag_CertCNInvalid As Long = &H1000& 5 6' Dim flag As Long 7' Dim lngSslErrorIgnoreFlags As Long 8' Dim blnEnableRedirects As Boolean 9' Dim blnEnableHttpsToHttpRedirects As Boolean 10 11' lngSslErrorIgnoreFlags = &H3300 '13056(&H3300): ignore all err, 0: accept no err 12' blnEnableRedirects = True 13' blnEnableHttpsToHttpRedirects = True 14 15 Dim objHTTP As Object 16 17 auth = Replace(auth, vbLf, "") 18 auth = Replace(auth, vbCrLf, "") 19 20'On Error GoTo ERROR_ 21 22' Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1") 23 Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0") 24 25 objHTTP.Open "POST", url, False 26' objHTTP.setRequestHeader "Host", "circus.shopping.yahooapis.jp" 27 objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 28 objHTTP.setRequestHeader "Authorization", auth 29 30' 'SSLエラーを無視するかどうかを決めるフラグ。 31' '初期値は0(エラーを無視しない)。 32' flag = objHTTP.Option(WinHttpRequestOption_SslErrorIgnoreFlags) 33' flag = flag Or SslErrorFlag_UnknownCA 34' flag = flag Or SslErrorFlag_CertCNInvalid 35' 36' objHTTP.Option(WinHttpRequestOption_SslErrorIgnoreFlags) = flag 37' objHTTP.setOption(0) = strUserAgentString 38' objHTTP.setOption(2) = lngSslErrorIgnoreFlags 39' objHTTP.setOption(6) = blnEnableRedirects 40' objHTTP.setOption(12) = blnEnableHttpsToHttpRedirects 41 42 objHTTP.send msg 'ここがエラーになります。 43 44 If objHTTP.Status = 200 Then 45 httpPost2 = objHTTP.ResponseText 46 Debug.Print "TRUE : " & objHTTP.Status & " / " & objHTTP.statusText 47 Exit Function 48 Else 49 Debug.Print "FALSE : " & objHTTP.Status & " / " & objHTTP.statusText 50 End If 51 52- 省略 - 53 54End Function
試したこと
SSLの認証問題と思い、回避する方法をネットで調べてほぼ全部試してみました。
0. 参照するオブジェクトを「MSXML2.ServerXMLHTTP.6.0、WinHttp.WinHttpRequest.5.1」して両方試してみました。
0. 証明書認証の問題だと思いSSLを無視するflagを使ってみました。
0. 送信メソッドの問題だと思い、POSTをGETに変更して試してみました。
0. PHPではどうかなと思いPHPで同じく試してみたところ、PHPは問題なく動きます。
VBAで生成されたaccess_tokenを使ってPHPでテストしてみても問題ないです。
補足情報(参考にしたページ)
https://developer.yahoo.co.jp/webapi/shopping/deleteItemImage.html
サンプルリクエストURL
https://circus.shopping.yahooapis.jp/ShoppingWebService/V1/deleteItemImage
サンプルリクエスト
POST /ShoppingWebService/V1/deleteItemImage HTTP/1.1
Host: circus.shopping.yahooapis.jp
Authorization: Bearer <アクセストークン>
seller_id=teststore&image_id=teststore_sample1%2Cteststore_sample2%2Cteststore_sample3
あなたの回答
tips
プレビュー