修复统一下单解析微信返回缺 result_code 时 AttributeError,并记录微信原始错误。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user