修复统一下单解析微信返回缺 result_code 时 AttributeError,并记录微信原始错误。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-07-27 17:44:29 +08:00
parent db91626e7f
commit 916bc79b48

View File

@@ -329,11 +329,19 @@ class CreateOrderView(APIView):
# 解析返回的XML
root = ET.fromstring(response.content)
return_code = root.find('return_code').text
result_code = root.find('result_code').text
def _xml_text(tag, default=''):
node = root.find(tag)
return node.text if node is not None and node.text is not None else default
return_code = _xml_text('return_code')
result_code = _xml_text('result_code')
if return_code == 'SUCCESS' and result_code == 'SUCCESS':
prepay_id = root.find('prepay_id').text
prepay_id = _xml_text('prepay_id')
if not prepay_id:
raise Exception(
f"微信支付下单失败: 缺少 prepay_id, raw={response.content.decode('utf-8', errors='ignore')}"
)
# 生成前端支付参数
timestamp = str(int(time.time()))
@@ -365,19 +373,18 @@ class CreateOrderView(APIView):
return result
else:
# 获取详细的错误信息
err_code = root.find('err_code')
err_code_des = root.find('err_code_des')
return_msg = root.find('return_msg')
error_details = f"return_code: {return_code}, "
if err_code is not None:
error_details += f"err_code: {err_code.text}, "
if err_code_des is not None:
error_details += f"err_code_des: {err_code_des.text}, "
if return_msg is not None:
error_details += f"return_msg: {return_msg.text}"
# 获取详细的错误信息return_code 失败时往往没有 result_code
err_code = _xml_text('err_code')
err_code_des = _xml_text('err_code_des')
return_msg = _xml_text('return_msg')
raw = response.content.decode('utf-8', errors='ignore')
error_details = (
f"return_code={return_code}, result_code={result_code}, "
f"err_code={err_code}, err_code_des={err_code_des}, "
f"return_msg={return_msg}, mch_id={MCHID}, raw={raw}"
)
logger.error("微信支付统一下单失败: %s", error_details)
raise Exception(f"微信支付下单失败: {error_details}")
except Exception as e: