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

生成Paymob Accept支付令牌时出现JS 401循环错误求助

Paymob Accept支付令牌创建时401循环错误排查

代码中的核心问题

1. 无限递归调用引发循环请求

在secondStep函数中,获取订单ID后错误地递归调用了自身secondStep(),而非触发第三步thirdStep。这会导致:

  • 重复发送创建订单的POST请求,触发Paymob的限流或认证校验机制,直接引发401错误
  • 支付流程完全中断,thirdStep永远不会被执行

2. 第三步未被正确触发

正确流程应该是secondStep获取订单ID后,将token和id作为参数传递给thirdStep,而非递归自身。

3. cardPayment函数作用域错误

cardPayment定义时未声明参数,但调用时传入了finalToken,函数内部无法访问该变量,会导致iframe URL拼接失败。

修正后的代码示例

const API = 'APK_KEY'
async function firstStep() {
    let data = {
        "api_key": API
    }
    let request = await fetch('https://accept.paymob.com/api/auth/tokens', {
        method: 'post',
        headers: {'content-type' : 'application/json'},
        body: JSON.stringify(data)
    })

    let responseData = await request.json()
    let token = responseData.token

    await secondStep(token)
}

async function secondStep(token) {
    let data = {
        "auth_token":  token,
        "delivery_needed": "false",
        "amount_cents": "100",
        "currency": "EGP",
        "items": [],
    }
    let request = await fetch('https://accept.paymob.com/api/ecommerce/orders', {
        method : 'POST',
        headers: {'content-type' : 'application/json'},
        body: JSON.stringify(data)
    })

    let responseData = await request.json()
    let id = responseData.id
  
    // 调用第三步,传递必要参数
    await thirdStep(token, id)
}

async function thirdStep(token, id) {
    let data = {
        "auth_token": token,
        "amount_cents": "100", 
        "expiration": 3600, 
        "order_id": id,
        "billing_data": {
          "apartment": "803", 
          "email": "claudette09@exa.com", 
          "floor": "42", 
          "first_name": "Clifford", 
          "street": "Ethan Land", 
          "building": "8028", 
          "phone_number": "+86(8)9135210487", 
          "shipping_method": "PKG", 
          "postal_code": "01898", 
          "city": "Jaskolskiburgh", 
          "country": "CR", 
          "last_name": "Nicolas", 
          "state": "Utah"
        }, 
        "currency": "EGP", 
        "integration_id": 13034
      }
    let request = await fetch('https://accept.paymob.com/api/acceptance/payment_keys', {
        method: 'post',
        headers: {'content-type' : 'application/json'},
        body: JSON.stringify(data)
    })

    let responseData = await request.json()
    let finalToken = responseData.token

    await cardPayment(finalToken)
}

async function cardPayment(finalToken) {
    // 接收参数并正确拼接URL
    let iframeURL = `https://accept.paymob.com/api/acceptance/iframes/18922?payment_token=${finalToken}`
    console.log(iframeURL)
}

// 启动支付流程
firstStep()

额外校验项

  • 确认API变量中的密钥是Paymob提供的有效密钥
  • 检查integration_id和iframe ID是否与你的Paymob集成配置完全匹配
  • 所有异步操作添加await,确保流程按顺序执行,避免因异步时序问题导致参数未就绪

内容的提问来源于stack exchange,提问作者Mustafa M. Youssef

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:25:35