我试图获取ebay用户令牌。 我已经在ebay中获得了auth代码,但是无法使用auth代码获取用户令牌。 代码如下:
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 :(得分:1)
我看起来信息没有正确形成(这就是服务器返回400
的原因)。
当您设置标题时,请写下:
req.Header.Add("Authorization", "Basic "+authorizationBase64)
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
Golang有一种很好的内置方法可以将授权添加到标题:SetBasicAuth
,这是http.Request
的一种方法。
func (r *Request) SetBasicAuth(username, password string)
SetBasicAuth将请求的授权标头设置为使用提供的用户名和密码进行HTTP基本身份验证。
使用HTTP基本身份验证时,提供的用户名和密码不会加密。
因此,您可以尝试:
,而不是手动设置授权标题req.SetBasicAuth("AppID”, “CertID”)
您使用的是 CertID ,但我认为您的意思是 ClientId 和 ClientSecret - 分别是用户和密码
我不知道这是否是导致问题的原因:)。帮助查明的一种方法是一致的错误检查,请参阅以下行:
applicationTokenURLEncoded, _ := url.Parse(applicationToken)