Ошибка интеграции Razorpay (недостаточно аргументов при вызове клиента.Порядок.Создать)

#api #go #razorpay

#API #Вперед #razorpay

Вопрос:

Попытался реализовать, основываясь на официальной документации в коде сайта razorpay:

  11 func indexpageGet(c *gin.Context) {
 12
 13         client := razorpay.NewClient("rzp_test_zlsYshjhjhjln", "9LtUy4qhghghgh2asp59es")
 14
 15         data := map[string]interface{}{
 16                 "amount":          1234,
 17                 "currency":        "INR",
 18                 "receipt_id":      "some_receipt_id",
 19         }
 20         body, err := client.Order.Create(data)
 21         if err != nil {
 22                 fmt.Println(err)
 23         }
 24
 25         fmt.Println(body)
  

Ошибка компиляции:

 ./main.go:20:34: not enough arguments in call to client.Order.Create
        have (map[string]interface {})
        want (map[string]interface {}, map[string]string)
  

Мое наблюдение: функция client.Order.Create(data) требует двух аргументов, я подтвердил это из библиотеки razorpay (см. Часть Определения функции). Итак, решение в том, что мне нужно также передать второй аргумент ( extraHeaders ) .

 // Create creates a new order for the given data
func (order *Order) Create(data map[string]interface{}, extraHeaders map[string]string) (map[string]interface{}, error) {
    return order.Request.Post(constants.ORDER_URL, data, extraHeaders)
} 
  

Я застрял в том, что такое extraHeaders и какое значение мне нужно передать?

Комментарии:

1. Вероятно, это просто дополнительные HTTP-заголовки для отправки с post-запросом. Почему бы вам просто не отправить пустую карту?

2. @pacuna, как вы и предлагали, попробовал с пустой картой client.Order.Create(data,map[string]string{}) , затем она компилируется, но выдает ошибку времени выполнения Error method: runtime error: invalid memory address or nil pointer dereference)

3. Вы передали пустую карту или nil карту? Это не одно и то же.

4. Да, используйте hsh := make(map[string]string) и отправьте это

5. Я думаю, что их интеграция sample code имеет некоторые незначительные сбои. Я за этим, обновлю здесь..

Ответ №1:

основываясь на комментариях в вопросе, я сделал 2 вещи, чтобы заставить его работать: (См. Комментарии в приведенном ниже коде)

  11 func indexpageGet(c *gin.Context) {
 12
 13         client := razorpay.NewClient("rzp_test_zlsYsrvuUxxhln", "9LtUy4qpLCOtl4Gz2asp59es")
 14
 15         data := map[string]interface{}{
 16                 "amount":          1234,
 17                 "currency":        "INR",
 18                 "receipt":              "110",
 19                 //"receipt_id":      "some_receipt_id", // 1st Mistake in documentation it should be 'receipt', corrected in above line
 20         }
 21         
 22         extraHeader := make(map[string]string) // 2nd Mistake in documentation , corrected by creating an empty map and passed as the second argument in below function.
 23         body, err := client.Order.Create(data,extraHeader)
 24         if err != nil {
 25                 fmt.Println(err)
 26         }
 27
 28         fmt.Println(body)
  

Ответ №2:

В документации говорится, что функции create принимают два аргумента, один as map[string]interface{} , а другой as extraHeaders , который есть map[string]string . Вы можете установить extraHeaders параметр nil равным, и ваш код будет работать.