Android 微信支付body参数不支持中文的问题
2015-06-04 12:34
525 查看
问题描述
下载微信支付官方Demo,微信支付之前需要先调用生成预支付订单接口,主要代码如下: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", "weixin")); 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("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; } }
在APP_ID,MCH_ID和API_KEY与应用的包名和签名都配套的情况下,可以生成预支付订单成功。微信返回如下信息:
<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> <appid><![CDATA[wx1d0......53f15b4]]></appid> <mch_id><![CDATA[121....301]]></mch_id> <nonce_str><![CDATA[j7uqSIzuUYiyfzyz]]></nonce_str> <sign><![CDATA[4D6246810D04D985410D704860EC3CCA]]></sign> <result_code><![CDATA[SUCCESS]]></result_code> <prepay_id><![CDATA[wx20150604122113c9b5daab5c0183678463]]></prepay_id> <trade_type><![CDATA[APP]]></trade_type> </xml>
但是若更改商品描述(body参数)为中文,如下:
packageParams.add(new BasicNameValuePair("body", "weixin支付测试"));
其他条件不变的情况下,微信返回的信息如下:
<xml> <return_code><![CDATA[FAIL]]></return_code> <return_msg><![CDATA[签名错误]]></return_msg> </xml>
解决方案
因为httpget网络请求在发送xml数据时,需要使用”ISO-8859-1”格式的编码,因此需要对xml先进行下转码,即将原来的如下代码:String xmlstring =toXml(packageParams); return xmlstring;
修改为:
String xmlstring =toXml(packageParams); return new String(xmlstring.toString().getBytes(), "ISO-8859-1");
相关文章推荐
- 微信接入自定义开发
- 微信支付商户申请接入信息汇总【接入教程】
- 微信JS-SDK说明文档及常见问题处理
- 用微信分享又用微信支付问题
- 微信开发 没有认证过的服务号怎么办?微信提供了测试号(开通了认证过的服务号的功能)
- 仿微信摇一摇震动
- 用c#开发微信 (12) 微统计 - 阅读分享统计系统 2 业务逻辑实现
- iOS微信接入错误解决。~
- 如何精准化的做微信公众号运营?
- 微信仿制的时候常用的抓包工具
- 类似微信朋友圈动态的数字红点
- Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果 (转载)
- 公众微信认证方法与条件
- php微信支付测试开发(流程已通)
- 微信支付调用JSAPI缺少参数:timeStamp
- 微信JS SDK Demo
- PHP JS判断浏览器,微信浏览器
- C#开发微信公众平台教程
- iOS开发之微信支付
- 谷歌大脑科学家 Caffe缔造者 贾扬清 微信讲座完整版