#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
равным, и ваш код будет работать.