2017-05-01 8 views
1

ebayユーザートークンを取得しようとしました。 私はeBayで認証コードを取得しましたが、認証コード付きのユーザートークンを取得できません。golangでoauthユーザートークンを取得中に400エラーが発生しましたか?

status := ctx.UserValue("status").(string) 
applicationToken := string(ctx.QueryArgs().Peek("code")) 
log.Println("ApplicationToken: ", applicationToken) 
log.Println("Status: ", status) 
if status == "declined" { 
    fmt.Printf("User doesn't give permission. Go back to your dashboard.") 
    ctx.Redirect("/dashboard", fasthttp.StatusSeeOther) 
} 

//var appConfig = config.Config() 
client := &http.Client{} 

applicationTokenURLEncoded, _ := url.Parse(applicationToken) 

body := url.Values{ 
    "grant_type": {"authorization_code"}, 
    "code":   {applicationTokenURLEncoded.String()}, 
    "redirect_uri": {Runame}, 
} 
reqBody := bytes.NewBufferString(body.Encode()) 
log.Println("Reqbody: ", reqBody) 

req, _ := http.NewRequest("POST", "https://api.sandbox.ebay.com/identity/v1/oauth2/token", reqBody) 


authorization := “AppID” + ":" + “CertID” 
authorizationBase64 := base64.StdEncoding.EncodeToString([]byte(authorization)) 

req.Header.Add("Authorization", "Basic "+authorizationBase64) 
req.Header.Add("Content-Type", "application/x-www-form-urlencoded") 
log.Println("Body: ", req) 

resp, _ := client.Do(req) 
log.Println("resp: ", resp) 
log.Println("ResBody: ", resp.Body) 

をし、エラーはそのようなものです:: コードは以下の通りです

Bad Request 400 
+0

:見つける手助けする一つの方法は、あなたの行を参照してください、をチェック一貫性エラーです。それについて詳しく説明できますか? –

+0

あなたが受け取ったエラーは、送信しているサーバーがhttps://api.sandbox.ebay.com/identity/v1/oauth2/tokenに送信しているメッセージを理解していないことを意味します(メッセージはヘッダ+ボディの組み合わせ)。だから私はそれが何を期待しているのか分からないが、それは期待する要求を得ていない。私はそのメッセージを作成する方法をダブルチェックすることをお勧めします:) – Nevermore

答えて

1

メッセージが(サーバーが400を返す理由である)が正しく形成されないように私は見えます。

あなたが書くあなたのヘッダーを設定している:SetBasicAuthhttp.Requestの方法である:

req.Header.Add("Authorization", "Basic "+authorizationBase64) 
req.Header.Add("Content-Type", "application/x-www-form-urlencoded") 

Golangは、ヘッダーに認証を追加する方法で構築された素敵なを持っています。ユーザ名とパスワードを使用してHTTP基本認証を使用するように要求のAuthorizationヘッダーを設定SetBasicAuth

func (r *Request) SetBasicAuth(username, password string) 

HTTP基本認証では、提供されたユーザ名とパスワードは暗号化されません。

代わりに、手動で認証ヘッダーを設定するので、あなたは試みることができる:

req.SetBasicAuth("AppID”, “CertID”) 

あなたはCertIDと呼ばれるものを使用していましたが、私はあなたがClientIdをClientSecretを意味だと思う - それぞれユーザーパスワード


私はを知っていますこれはあなたの問題の原因です:)。私はあなたの言葉を理解することはできません、うまく

applicationTokenURLEncoded, _ := url.Parse(applicationToken)