android 微信支付,body为中文字符,签名错误

生姜可乐 发布于 2015/06/04 16:40
阅读 8K+
收藏 0
private String genProductArgs() {
		StringBuffer xml = new StringBuffer();

		try {
			String nonceStr = genNonceStr();

			xml.append("</xml>");
			List<NameValuePair> packageParams = new LinkedList<NameValuePair>();
			packageParams
					.add(new BasicNameValuePair("appid", Constants.APP_ID));
			packageParams.add(new BasicNameValuePair("body", "测试"));
			packageParams
					.add(new BasicNameValuePair("mch_id", Constants.MCH_ID));
			packageParams.add(new BasicNameValuePair("nonce_str", nonceStr));
			packageParams.add(new BasicNameValuePair("notify_url",
					"http://121.40.35.3/test"));
			packageParams.add(new BasicNameValuePair("input_charset", "utf-8"));
			packageParams.add(new BasicNameValuePair("out_trade_no",
					genOutTradNo()));
			packageParams.add(new BasicNameValuePair("spbill_create_ip",
					"127.0.0.1"));
			packageParams.add(new BasicNameValuePair("total_fee", "1"));
			packageParams.add(new BasicNameValuePair("trade_type", "APP"));

			String sign = genPackageSign(packageParams);
			packageParams.add(new BasicNameValuePair("sign", sign));

			String xmlstring = toXml(packageParams);

			return xmlstring;

		} catch (Exception e) {
			Log.e(TAG, "genProductArgs fail, ex = " + e.getMessage());
			return null;
		}

	}



body自段设置成英文字符串的时候,签名成功,但是设置成中文字符的时候就签名错误。网上各种方法都试过,求大神解救。
加载中
0
杨延庆
杨延庆
你改成utf8字符形式传输吧,我估计是可能传输过程中中文成乱码了
生姜可乐
生姜可乐
回复 @杨延庆 : xml格式是“ISO8859-1”。
杨延庆
杨延庆
@生姜可乐 xml的格式是utf-8还是gb2312?
生姜可乐
生姜可乐
试过了,在封装xml里面改的
0
生姜可乐
生姜可乐
解决了。在拼装xml的方法中,把拼接之后的xml字符串改一下编码就行了,如下
private String genProductArgs() {
		StringBuffer xml = new StringBuffer();

		try {
			String nonceStr = genNonceStr();

			xml.append("</xml>");

			// 设置订单详情字段
			List<NameValuePair> packageParams = new LinkedList<NameValuePair>();
			packageParams
					.add(new BasicNameValuePair("appid", Constants.APP_ID));
			packageParams.add(new BasicNameValuePair("body", payOrderName));
			packageParams.add(new BasicNameValuePair("input_charset", "UTF-8"));
			packageParams
					.add(new BasicNameValuePair("mch_id", Constants.MCH_ID));
			packageParams.add(new BasicNameValuePair("nonce_str", nonceStr));
			packageParams
					.add(new BasicNameValuePair("notify_url",
							"http://www.520ej.cn/KSCM/phone/repairOrder_Phone_updatePayByWX.action"));
			packageParams
					.add(new BasicNameValuePair("out_trade_no", payOrderId));
			packageParams.add(new BasicNameValuePair("spbill_create_ip",
					"127.0.0.1"));
			packageParams.add(new BasicNameValuePair("total_fee", "1"));
			packageParams.add(new BasicNameValuePair("trade_type", "APP"));

			String sign = genPackageSign(packageParams);
			packageParams.add(new BasicNameValuePair("sign", sign));

			String xmlstring = toXml(packageParams);
                        //改变拼接之后xml字符串格式
			return new String(xmlstring.toString().getBytes(), "ISO8859-1");

		} catch (Exception e) {
			Log.e(TAG, "genProductArgs fail, ex = " + e.getMessage());
			return null;
		}

	}




杨延庆
杨延庆
果然还是xml编码的问题
0
wanna__na
wanna__na
改了这句还是签名错误
返回顶部
顶部