ZPY博客

微信公众号支付报错invalid total_fee的解决方法

---
title: 微信公众号支付报错invalid total_fee的解决方法
date: 2018-12-14 14:14:09
categories: 微信公众号
tags:
- 报错
- 方法
- 解决
- 微信
- 后台
- string
- 公众号
- 前端
- 支付
- 单位
- 金额
- Double
- money
- BigDecimal
- multiply
---

具体报错如下:

2018-12-14 13:55:46.102  INFO 11408 --- [nio-8080-exec-4] tesglog                                  : pay result : <xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[invalid total_fee]]></return_msg></xml>

根据错误不难发现是因为total_fee不正确。

由于微信支付里的total_fee的单位是分。所以实际金额得乘以100。但是问题来了,前端传给后台是string型的,现在要乘以100,可能很多人跟我一样,首先想到的是把string转成Double型再乘以100,我就是这样做的,然后就报了上面的错。

那么问题出在哪呢?我新建了一个空的工程来测试

Double.parseDouble(money)*100的结果,然后我发现,如果传过来的money为12,输出的结果是12.0,估计就是这个.0导致了上面的错误。

那也是说不能带小数点,得把小数部分去掉,可以用java自带的

Math.round()方法,写法如下:

String moneyNew = String.valueOf(Math.round(Double.parseDouble(money)*100));