【问题标题】:Razorpay integration error (not enough arguments in call to client.Order.Create)Razorpay 集成错误(调用 client.Order.Create 时参数不足)
【发布时间】:2021-01-18 08:07:19
【问题描述】:

尝试实施,基于 razorpay 网站中的official documentation 代码:

 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是什么,我需要传递什么值?

【问题讨论】:

  • 可能只是额外的 HTTP 标头与 post 请求一起发送。为什么不直接发送一张空地图?
  • @pacuna,正如你所建议的,尝试使用空映射 client.Order.Create(data,map[string]string{}),然后它正在编译,但运行时错误 Error method: runtime error: invalid memory address or nil pointer dereference)
  • 您传递的是 empty 地图还是 nil 地图?它们不是一回事。
  • 是的,使用 hsh := make(map[string]string) 并发送
  • 我认为他们的整合 sample code 有一些小故障。我在后面,会在这里更新..

标签: api go razorpay


【解决方案1】:

根据问题中的 cmets,做了 2 件事使其工作:(请参阅下面代码中的 cmets)

 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】:

    文档说创建函数有两个参数,一个是map[string]interface{},另一个是extraHeaders,即map[string]string。 您可以将extraHeaders 参数设置为nil,您的代码就可以工作了。

    【讨论】:

      猜你喜欢
      • 2021-02-24
      • 2020-08-18
      • 2018-09-02
      • 1970-01-01
      • 2020-04-16
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      相关资源
      最近更新 更多