如何使用后端golang获得对Squareup的身份验证?

In sqaureup application Aplication_name in oauth option there is a redirect url Which will redirect a given url with the QueryString code. While I'm hitting https://connect.squareup.com/oauth2/authorize?client_id=YOUR_CLIENT_ID this url in the browser then it will redirect me to a given url in oauth with attached code. And then to take a access_token you have to give a POST request to given url https://connect.squareup.com/oauth2/token with the body

{
  "client_id": "YOUR_APPLICATION_ID",
  "client_secret": "YOUR_APPLICATION_SECRET",
  "code": "M-Q7k-N0Emx_3cBqwbVLTQ",
  "redirect_uri": "YOUR_REDIRECT_URI"
}

I do it same and send By method POST to this url with json data but it will gives me the error:-

{
 "message": "Not Authorized",
 "type": "service.not_authorized"
}

The Golang Code I'm using for this is :-

func Token(c *gin.Context) {
 code := c.Query("code") // code be something like:-sq0cgp-wLVQt5HOLfug6xiVdmCDCf
 splitCode := strings.Split(code, "-")
 token := models.PostToken{
    ClientID:     "YOUR_APPLICATION_ID",
    ClientSecret: "YOUR_APPLICATION_SECRET",
    Code:         splitCode[1],
    RedirectUri:  c.Request.Host + c.Request.URL.RequestURI(),
 }
 bindData, err := json.Marshal(token)
 if err != nil {
    panic(err)
 }
   var jsonStr = []byte(string(bindData))
   url := "https://connect.squareup.com/oauth2/token"
   req, err := http.Post(url, "application/json", bytes.NewBuffer(jsonStr))
   fmt.Println(req, err)
}

Models struct:-

type PostToken struct {
  ClientID     string `json:"client_id" bson:"client_id"`
  ClientSecret string `json:"client_secret" bson:"client_secret"`
  Code         string `json:"code" bson:"code"`
  RedirectUri  string `json:"redirect_uri" bson:"redirect_uri"`
}

You have to do some points I mentioned:-

  • First check your application Id.
  • In second parameter ClientSecret you have to use Oauth Application Secret key Which you will got from the application dashboard -> Oauth option.
  • In Code you don't have send the split code send simple string code value which your getting in the variable name code.
  • Fourth parameter is optional as the documentation says here.

Then you will got what you want :D.