Razorpay回调未获取签名验证所需参数的配置咨询
解决Razorpay回调参数不符问题
你的问题核心是混淆了Razorpay的两种回调机制:支付跳转回调(GET) 和 Webhook通知(POST)。文档里展示的是跳转回调的参数格式,而你当前收到的是Webhook的POST请求,两者的配置和参数逻辑完全不同。
1. 配置支付跳转回调(获取GET查询参数)
如果需要拿到文档中带razorpay_payment_id、razorpay_signature等查询参数的GET请求,需在创建支付链接时指定callback_url参数,而不是依赖后台配置的Webhook:
// Go代码示例:创建支付链接时指定跳转回调URL paymentLinkParams := map[string]interface{}{ "amount": 1000, // 金额最小单位,例如1000代表10卢比 "currency": "INR", "callback_url": "https://your-domain.com/payment-callback", // 跳转回调URL "callback_method": "get", // 显式指定GET方法(建议显式设置避免默认值差异) // 其他必要参数(如描述、客户信息等) } resp, err := client.PaymentLink.Create(paymentLinkParams, nil)
用户完成支付后,浏览器会自动跳转到这个callback_url,并携带文档中所示的所有查询参数,包括签名。
2. Webhook POST请求的签名验证(若需保留异步通知)
如果需要后台异步接收支付状态通知(Webhook),则无需修改配置,但需按照Webhook的规则验证签名,步骤如下:
- 从请求头
X-Razorpay-Signature获取签名 - 读取请求体的原始JSON字符串(注意:必须用原始字节,不能解析后再序列化,否则签名验证会失败)
- 使用你的Razorpay Webhook密钥,以HMAC SHA256算法加密原始JSON字符串(加密前缀为
razorpay_) - 对比加密结果与请求头中的签名是否一致
Go代码示例:
import ( "crypto/hmac" "crypto/sha256" "encoding/hex" "io/ioutil" "net/http" ) func RazorpayWebhookHandler(w http.ResponseWriter, r *http.Request) { // 读取原始请求体 body, err := ioutil.ReadAll(r.Body) if err != nil { http.Error(w, "Failed to read request body", http.StatusBadRequest) return } defer r.Body.Close() // 获取签名头 signature := r.Header.Get("X-Razorpay-Signature") if signature == "" { http.Error(w, "Missing signature", http.StatusUnauthorized) return } // Webhook密钥(从Razorpay后台获取) webhookSecret := "your_webhook_secret_key" // 生成HMAC签名 h := hmac.New(sha256.New, []byte(webhookSecret)) h.Write([]byte("razorpay_" + string(body))) // 必须添加razorpay_前缀 computedSignature := hex.EncodeToString(h.Sum(nil)) // 验证签名 if computedSignature != signature { http.Error(w, "Invalid signature", http.StatusUnauthorized) return } // 签名验证通过,处理支付数据 // 解析body为JSON对象,执行业务逻辑... w.WriteHeader(http.StatusOK) w.Write([]byte("Success")) }
关键注意点
- 跳转回调用于前端跳转展示,Webhook用于后端异步通知,两者可同时配置
- 若只需要文档中的GET参数,确保创建支付链接时设置了
callback_url,且callback_method为get - Webhook验证必须使用原始请求体,不能修改或解析后重新序列化,否则签名会不匹配
内容的提问来源于stack exchange,提问作者user2995358
相关产品推荐
相关产品推荐

