Razorpay OAuth集成交易报错令牌权限不足问题咨询
问题核心成因
抛出的错误The OAuth token used does not have sufficient permissions for this request本质是Razorpay服务端校验请求携带的鉴权凭证,不具备当前操作要求的对应权限,常见触发场景如下:
- OAuth应用配置的授权范围(scope)缺失交易相关权限:创建OAuth应用时未勾选订单创建、支付发起对应的写权限,商户授权后下发的access_token、public_token天然不具备交易操作权限。
- 鉴权方式使用错误:代授权商户创建订单时,错误使用平台自身的API Key/Secret做鉴权,没有使用商户授权获得的
access_token作为Bearer鉴权凭证,导致请求实际操作用户和凭证所属主体不匹配。 - 前端唤起支付的参数不匹配:react-razorpay组件初始化时,
key参数错误传入了平台自身的公钥,没有传入对应商户的public_token,和后端返回的订单所属商户主体不一致,触发权限校验拦截。 - 存储的凭证异常:数据库中存储的access_token过期、刷新token时权限范围丢失、public_token和access_token不属于同一个商户,都会导致校验失败。
- 授权角色配置错误:OAuth应用配置的授权角色为只读角色,没有申请交易类操作的写权限。
排查解决步骤
按从易到难的顺序逐一校验即可定位问题:
- 核对OAuth应用权限配置
登录Razorpay合作伙伴后台,找到对应OAuth应用,检查授权流程中申请的scope列表,必须包含order.write、payment.write两个核心交易权限;如果权限缺失,更新配置后重新引导对应商户完成OAuth授权,用新下发的access_token、refresh_token、public_token全量替换数据库中存储的旧凭证。 - 修正后端创建订单的鉴权逻辑
代授权商户创建订单时,禁止使用平台自有的key_id/key_secret做Basic鉴权,必须在请求头中携带Authorization: Bearer <商户对应有效access_token>调用Razorpay订单创建接口,确认接口返回的订单信息中merchant_id和当前操作商户ID一致。
可直接用Postman携带对应access_token手动调用创建订单接口,如果接口直接返回权限错误,可直接判定为凭证权限或后端鉴权逻辑问题。 - 修正前端支付唤起参数
使用react-razorpay组件唤起支付窗口时,初始化配置的key字段必须传入当前订单所属商户对应的public_token,禁止传入平台自有公钥,同时确保传入的order_id是该商户access_token创建的有效订单ID,禁止跨商户混用凭证和订单ID。
如果Postman调创建订单接口正常,仅前端唤起支付时报错,可直接判定为前端传参的key(public_token)和订单所属商户不匹配。 - 校验存储凭证的有效性
拿数据库中存储的商户access_token调用Razorpay凭证查询接口,确认返回的scope包含所需交易权限、凭证状态有效未过期、绑定的商户ID匹配;如果是通过refresh_token刷新得到的新凭证,需要将新返回的access_token、public_token同步更新到数据库,禁止只更新access_token保留旧的public_token。

内容的提问来源于stack exchange,提问作者umesh
相关产品推荐
相关产品推荐

