具体报错如下:
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));