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
相关产品推荐
相关产品推荐

