详情

首页手游攻略 微信支付沙箱 total_fee 报错怎样区分金额和环境?

微信支付沙箱 total_fee 报错怎样区分金额和环境?

佚名 2026-11-06 09:20:02

先判断错误来自统一下单响应还是收银台。V2 XML 用整数分,沙箱金额还应与对应验收用例一致。

1. 检查实际发出的 XML 金额

以旧版免充值验收用例 1003 为例,订单金额为 5.51 元,现金部分为 5.50 元,券为 0.01 元。统一下单用订单总额 551 分。只发 550 虽然是合法整数,却与这个用例的总额不同。

import re
from decimal import Decimal
from xml.etree import ElementTree as ET

def to_fen(yuan):
    if not re.fullmatch(r"[0-9]+(?:.[0-9]{1,2})?", yuan):
        raise ValueError("invalid yuan")
    return int(Decimal(yuan) * 100)

def check(xml, expected):
    value = ET.fromstring(xml).findtext("total_fee", "")
    if not re.fullmatch(r"[0-9]+", value) or int(value) <= 0:
        return "invalid integer fen"
    return "matches fixture" if int(value) == expected else "fixture mismatch"

expected = to_fen("5.51")
for value in ("5.51", "550", "551"):
    xml = f"<xml><total_fee>{value}</total_fee></xml>"
    print(value, check(xml, expected))

# Python 3.9.6 实际输出
# 5.51 invalid integer fen
# 550 fixture mismatch
# 551 matches fixture

三个样例只改变 total_fee。结果是本地格式及用例检查。通过本地校验后,仍要看沙箱响应和查单。金额从十进制字符串换算,避免浮点运算后截断少一分。

2. 确认错误发生在哪个入口

服务端返回失败时,保存脱敏的 XML 和 return_code、result_code、err_code、err_code_des,先对照实际报错。再核对所用验收环境、接口路径、签名密钥及用例金额是否配套。不同验收产品的路径和用例可能不同。

如果沙箱下单成功,只有拉起真实微信收银台时出现 total_fee 提示,旧版免充值用例有说明,真实收银台的生产环境查不到沙箱订单。该验收用例可直接走沙箱查单并核对金额和状态。不要将同一解释用于真实生产订单。

3. 分开核对 API 版本和用例

V2 统一下单的 XML 使用 total_fee,普通商户 API v3 JSAPI 下单的 JSON 使用 amount.total。先确认你接入的产品与版本,再核对测试环境支持的用例。本文在本地执行金额检查,未调用商户接口。

相关资讯
点击查看更多
游戏推荐
推荐专题
热门阅读
推荐下载