微信提示【调用支付jsapi缺少参数 total_fee】

一,问题

今天接入微信支付的时候,微信那边提示我这个信息。但是我再三检查,还是觉得不是缺少参数 total_fee的问题。我明确我已经传过去了。

二,解决方案

2.1 我将内容进行打印

微信提示【调用支付jsapi缺少参数 total_fee】_第1张图片

发现本地测试没问题。后来看了一下linux上的日志文件!

xmlStr��

终于发现了是UTF8编码的问题。

2.2 解决方案

①在请求微信的时候,使用UTF8进行编码
②工具类HttpsRequest中的httpsRequest方法

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;

import javax.net.ssl.HttpsURLConnection;

public class HttpRequest {
	
	/**
	 * post请求并得到返回结果
	 * 
	 * @param requestUrl
	 * @param requestMethod
	 * @param output
	 * @return
	 */
	public static String httpsRequest(String requestUrl, String requestMethod, String output) {
		try { 
			URL url = new URL(requestUrl);
			HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
			connection.setDoOutput(true);
			connection.setDoInput(true);
			connection.setUseCaches(false);
			connection.setRequestMethod(requestMethod);
			if (null != output) {
				OutputStream outputStream = connection.getOutputStream();
				outputStream.write(output.getBytes("UTF-8"));
				outputStream.close();
			}
			// 从输入流读取返回内容
			InputStream inputStream = connection.getInputStream();
			InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
			BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
			String str = null;
			StringBuffer buffer = new StringBuffer();
			while ((str = bufferedReader.readLine()) != null) {
				buffer.append(str);
			}
			bufferedReader.close();
			inputStreamReader.close();
			inputStream.close();
			inputStream = null;
			connection.disconnect();
			return buffer.toString();
		} catch (Exception ex) {
			ex.printStackTrace();
		}

		return "";
	}
}

三,总结

经过上次做微信登录,以及这次的微信支付。我发现,每次微信明确提示的错误信息,基本上都是不太靠谱的。一般都是因为其他问题,所以才出现错误。因此,在开发中,我们要多打日志信息,这样子,出现问题了,我们才容易发现问题的所在。

像我上面的一样,我在传xml给微信前打了一次日志,在微信返回给我信息后又打了一次日志,这样子才发现真正的错误。不然被它那个total_fee给坑死!

你可能感兴趣的:(项目)