微信支付沙箱 total_fee 报错怎样区分金额和环境?
先判断错误来自统一下单响应还是收银台。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。先确认你接入的产品与版本,再核对测试环境支持的用例。本文在本地执行金额检查,未调用商户接口。
游戏推荐
推荐专题
热门阅读
-
-
- 微信支付正式上线前怎样核对配置和首笔交易?
- 11.06
-
- 微信小程序体验版的支付测试单怎样自动退款?
- 11.06
-
- Muse 日常网络连接|操作说明
- 11.06
-
- Muse 手机号与邮箱验证|操作说明
- 11.06
-
- Muse 注册耗时记录|操作说明
- 11.06
推荐下载
-
-
下载
- |
-
-
下载
- 《行尸走肉第一章》免安装中文汉化硬盘版下载
- 单机|436 MB
- 一款以动作冒险为主题的游戏
-
-
下载
- 《街头霸王X铁拳》免安装中文汉化硬盘版下载
- 单机|111MB
- 一款非常好玩的格斗游戏
-
-
下载
- |
-
-
下载
- 《暗黑破坏神3》免安装繁体中文正式版下载
- 单机|7630 MB
- 一款以角色扮演为主题的游戏
-
-
下载
- 《马克思佩恩3》免安装硬盘版下载
- 单机|27033 MB
- 一款以第三人称射击为主题的游戏