You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已配置Basic Auth仍弹认证提示 Razorpay订单API调用返回状态码0如何解决

Razorpay订单API调用异常解决方案

核心问题原因

  • 你设置了dataType: 'jsonp':JSONP仅支持GET请求,且无法携带自定义Authorization请求头,这是你传递的Basic Auth不生效、触发身份验证弹窗的核心原因
  • 状态码0是典型的跨域请求拦截表现:Razorpay服务端API默认不允许前端直接跨域调用,浏览器会拦截不符合CORS规则的请求,返回状态码0
  • 存在高危安全漏洞:你在前端直接使用密钥生成Basic Auth,所有访问页面的用户都可以直接获取你的Razorpay密钥,存在被盗用产生资金损失的风险
  • 传参格式不匹配:你设置了contentType: "application/json",但实际传递的是包裹了json字段的表单格式数据,和声明的请求格式不一致。

正确实现方案

Razorpay官方要求订单创建操作必须在服务端完成,禁止前端直接调用订单生成API

  1. 将订单生成逻辑迁移到你的后端服务:后端携带Razorpay密钥调用https://api.razorpay.com/v1/orders接口,生成订单ID后返回给前端
  2. 前端仅调用你自己的后端接口获取订单ID,再通过Razorpay前端Checkout SDK完成后续支付流程
  3. 若仅做本地临时测试(严禁上线使用),可修改如下代码参数,同时安装浏览器跨域插件解除CORS限制:
var jsonData = {
  "currency": "INR",
  "amount": "10000",
};

$.ajax({
  type: 'POST',
  // 删掉jsonp配置,改为json
  dataType: 'json',
  url: url,
  // 直接传递序列化后的JSON数据,不要包裹外层json字段
  data: JSON.stringify(jsonData),
  xhrFields: {
    withCredentials: true
  },
  beforeSend: function (xhr) {
    xhr.setRequestHeader("Authorization", "Basic " + btoa(username + ":" + password));
  },
  contentType: "application/json; charset=utf-8",
  success: function (response) {
    alert("done");
  },
  error: function (xhr, ajaxOptions, thrownError) {
    alert(xhr.status);
    if(xhr.responseText) {
      jsonValue = jQuery.parseJSON(xhr.responseText);
      console.log(jsonValue.Message);
    }
  },
});

测试完成后请立即删除前端代码中的密钥相关逻辑,避免密钥泄露。

内容的提问来源于stack exchange,提问作者Deepak Lohmod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:06:00