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

ERPNext集成FBR DI API:cURL成功Python requests报500错误

ERPNext集成巴基斯坦FBR DI API时的500错误问题

在将ERPNext(基于Frappe框架)与巴基斯坦FBR DI API集成过程中,出现以下异常:使用cURL发送请求时,发票可被API成功接收;但通过ERPNext内的Python requests发送完全相同的payload,API始终返回500 Internal Server Error。

成功的cURL请求示例

以下cURL命令可正常提交发票:

curl -X POST "https://gw.fbr.gov.pk/di_data/v1/di/postinvoicedata_sb" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -H "Accept: */*" \
  -H "Accept-Encoding: gzip, deflate, br" \
  -H "User-Agent: Mozilla/5.0" \
  -d '{
    "invoiceType": "",
    "invoiceDate": "",
    "sellerNTNCNIC": "",
    "sellerBusinessName": "",
    "sellerAddress": "",
    "sellerProvince": "",
    "buyerNTNCNIC": "",
    "buyerBusinessName": "",
    "buyerAddress": "",
    "buyerProvince": "",
    "invoiceRefNo": "",
    "scenarioId": "SN001",
    "buyerRegistrationType": "",
    "items": [{
        "hsCode": "4819.1000",
        "productDescription": "2Sum 2g Injection TP New 2D R#06",
        "rate": "18%",
        "uoM": "Numbers,pieces,units",
        "quantity": 2500.0,
        "totalValues": 2767.1,
        "valueSalesExcludingST": 2345.0,
        "fixedNotifiedValueOrRetailPrice": 0,
        "salesTaxApplicable": 422.1,
        "salesTaxWithheldAtSource": 0,
        "extraTax": "",
        "furtherTax": 0.0,
        "sroScheduleNo": "",
        "fedPayable": 0,
        "discount": 0.0,
        "saleType": "Goods at standard rate (default)",
        "sroItemSerialNo": ""
    }]
  }'

失败的Python requests代码(ERPNext自定义应用中)

在ERPNext自定义应用的fbr_api.py中使用以下代码:

headers = {
    "Authorization": f"Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate, br",
    "User-Agent": "Mozilla/5.0"
}

payload = {... 与cURL完全相同的JSON结构 ...}

response = requests.post(
    api_url,
    headers=headers,
    json=payload,  
    verify=False
)

response.raise_for_status()

执行后抛出错误:

500 Server Error: Internal Server Error

已确认的关键信息

  • ERPNext中记录的请求头和payload与cURL使用的完全一致
  • Token有效,相同Token+payload在cURL中始终能成功提交
  • ERPNext运行Python 3.10,API端点为官方DI API沙箱环境

疑问

为何API接受cURL发送的请求,却对Python requests发送的相同请求返回500错误?是否在以下方面存在差异:

  • 请求体的编码方式
  • gzip压缩处理
  • SSL证书验证逻辑
  • Python构造原始请求体的机制
  • FBR API期望的隐藏请求头

内容的提问来源于stack exchange,提问作者Marium Faisal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 23:42:43