Как добавить клиента в платежном шлюзе с использованием golang? - PullRequest
0 голосов
/ 10 декабря 2018

Я использую golang, чтобы добавить клиента в squareup.com, но он всегда говорит о проблеме авторизации Может кто-нибудь сказать мне, что проблема в моем коде: -

func Token(c *gin.Context) {
 code := c.Query("code")
 splitCode := strings.Split(code, "-")
 scope := c.DefaultQuery("scope", "CUSTOMERS_WRITE")
 customer := models.Customer{
    GivenName:    "Amelia",
    FamilyName:   "Earhart",
    CompanyName:  "fbgusbd",
    Nickname:     "kdfbkgjkdf",
    EmailAddress: "Amelia.Earhart@example.com",
    Address: models.Addresss{
        AddressLine1:                 "500 Electric Ave",
        AddressLine2:                 "Suite 600",
        Locality:                     "New York",
        AdministrativeDistrictLevel1: "NY",
        PostalCode:                   "10003",
        Country:                      "US",
    },
    PhoneNumber: "1-212-555-4240",
    ReferenceId: "12",
    Note:        "a customer",
 }
 fmt.Println(customer)
 bindData, err := json.Marshal(customer)
 if err != nil {
    panic(err)
 }
 var jsonStr = []byte(string(bindData))
 url := config.APIBaseLive + "v2/customers?code=" + splitCode[1] + "&scope=" + scope

 req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
 req.Header.Add("Authorization", "Bearer "+splitCode[1])
 req.Header.Add("Accept", "application/json")
 fmt.Println("Request", req)
  client := &http.Client{}
  resp, err := client.Do(req)
 // fmt.Println(resp, err)
 if err != nil {
    panic(err)
 }
 defer resp.Body.Close()
 resp.Header.Add("Authorization", "Bearer "+splitCode[1])
 resp.Header.Add("Accept", "application/json")
 fmt.Println("response Status:", resp.Status)
 fmt.Println("response Headers:", resp.Header)
 body, _ := ioutil.ReadAll(resp.Body)
 fmt.Println("response Body:", string(body))
}

type Customer struct {
  GivenName    string   `json:"given_name" bson:"given_name"`
  FamilyName   string   `json:"family_name" bson:"family_name"`
  CompanyName  string   `json:"company_name" bson:"company_name"`
  Nickname     string   `json:"nickname" bson:"nickname"`
  EmailAddress string   `json:"email_address" bson:"email_address"`
  Address      Addresss `json:"address" bson:"address"`
  PhoneNumber  string   `json:"phone_number" bson:"phone_number"`
  ReferenceId  string   `json:"reference_id" bson:"reference_id"`
  Note         string   `json:"note" bson:"note"`
}

Ошибки: -

 {
  "errors": [
     {
        "category": "AUTHENTICATION_ERROR",
        "code": "UNAUTHORIZED",
        "detail": "This request could not be authorized."
     }
   ]
}

При нажатии https://connect.squareup.com/oauth2/authorize?client_id=your_client_id он перенаправит вас на URL перенаправления URL, который вы добавили с кодом строки запроса, имеющим ключ аутентификации ключа.Вы добавите URL-адрес перенаправления на приборной панели, а затем с помощью этого кода вы будете называться аутентифицированным пользователем.Может ли кто-нибудь помочь мне решить эту проблему?

Спасибо.

1 Ответ

0 голосов
/ 10 декабря 2018

Проверьте, как oauth2 реализован с помощью квадрата https://docs.connect.squareup.com/authz/oauth/how-it-works

Ваш код GO BACKEND на этой диаграмме.

https://connect.squareup.com/oauth2/authorize ожидается из КЛИЕНТА (Browser,Собственное или мобильное приложение), что приведет к тому, что некоторые HTTP-перенаправления в браузере будут запрашивать у пользователя учетные данные и другие проблемы.Предполагается, что эти учетные данные будут предоставлены человеком, использующим браузер или веб-представление (версия браузера без хрома).

Вы, вероятно, получаете ответ перенаправления при отправке запроса от GO.Это перенаправление на HTML-страницу, где пользователь может ввести учетные данные.

Не пытайтесь реализовать CLIENT в GO, это не должно быть возможным, поскольку весь поток oauth2 предполагает ввод данных пользователем и должен обнаруживать и отклонять код бэкэнда.

...