微信支付获取返回repay_id时,返回body不是UTF8编码的问题怎么解决?

duozo1985 2015-04-22 03:17:59
微信支付请求获取预支付id的这一步,一旦参数body使用了中文,就会返回“body不是UTF8编码”的错误,参数明明已经使用了utf编码处理了...
后来再网上看到说要用UrlEncode处理中文,我试过确实是可以成功请求,可是支付成功返回的界面中,商品描述那一栏微信直接把UrlEncode编码的字符显示出来了。。。所以问题还是没解决。。。请问大家有什么方案?本人是使用C#实现的。
...全文
16398 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhao_auau 2019-04-23
  • 打赏
  • 举报
回复
在DELPHI中应该如何搞啊?
潇潇暮雨_ 2018-07-20
  • 打赏
  • 举报
回复
用java开发的话,看看jvm的默认文件编码格式是不是UTF-8咯,一般window环境下是GBK的,不是UTF-8的话,在jvm启动参数里添加 -Dfile.encoding=UTF-8就好了
  • 打赏
  • 举报
回复
好贴,帮顶。。。
DeepL男子 2017-11-10
  • 打赏
  • 举报
回复
引用 5 楼 yfdwn 的回复:
解决了,java的话不用对body单独编码,可以对xml整体做个编码转换 prePayXml = new String(prePayXml.getBytes("UTF-8"), "ISO-8859-1");
感谢喽,问题解决,说好的UTF-8呢,微信搞笑呢,这是什么原理呢,ISO编码就能通过?
StayInLove 2017-09-20
  • 打赏
  • 举报
回复
感谢22楼,终于解决了
龏鈊廱鵆 2017-08-27
  • 打赏
  • 举报
回复
感谢22楼,终于解决了
「已注销」 2017-08-23
  • 打赏
  • 举报
回复
感谢22楼,终于解决了
jugong0188 2017-06-09
  • 打赏
  • 举报
回复
感谢22楼,终于解决了
而立后的老王 2017-02-22
  • 打赏
  • 举报
回复
感谢22楼,终于解决了
qq_25710027 2017-02-09
  • 打赏
  • 举报
回复
感谢22楼,之前用httppost怎么弄都不管用,用了你的方法终于解决了
jsxy2010 2016-12-08
  • 打赏
  • 举报
回复
感谢22楼,终于解决了
aji_csdn 2016-09-01
  • 打赏
  • 举报
回复
我的也解决了,myeclipse环境 utf-8编码 数据库也是utf-8 解决地方有两个 一个是签名时MD5指定编码 二是提交XML时编码 MessageDigest md = MessageDigest.getInstance("MD5"); md.update(plainText.getBytes("utf-8")); plainText是排序好的加上key那些个参数 // 获取URLConnection对象对应的输出流 out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(),"UTF-8")); // 发送请求参数 out.print(param); 发送数据时指定 我的就是这样 可以了 (前面body那里 不要转换编码)
liangroger 2016-07-30
  • 打赏
  • 举报
回复
已解决。 本来已确认服务器,数据库的编码都是utf-8。但还是出现这个问题。 调试时发现,从数据库取出来,放到String的数据不是utf-8的。 查看方法看byte[]的值: byte[] b0 = orderId.getBytes(); byte[] b1 = subject.getBytes(); byte[] b2 = subject.getBytes("UTF-8"); byte[] b3 = orderId.getBytes("UTF-8"); 比如这里subject就是boby要的值,但b1和b2的值是不同的。所以subject进签名xml的时候要转成utf-8。 下面还有一坑, 就是其他String的值也可能一开始不是utf-8的,所以在组合成xml和签名的时候,都要注意看看byte[]的值是不是utf-8r . //body字段为中文时要转编码,不然会签名错误 String xmlstring = toXml(packageParams); byte[] b = xmlstring.getBytes("utf-8");//44开始 System.out.println("xmlstring:"+xmlstring); return new String(xmlstring.getBytes("utf-8"), "ISO8859-1"); byte[] b = sb.toString().getBytes("utf-8");//97 112 //30 String packageSign = MD5.getMessageDigest(b).toUpperCase(); String appSign = MD5.getMessageDigest(sb.toString().getBytes("utf-8")).toUpperCase();
奔跑的蜗牛108 2016-07-14
  • 打赏
  • 举报
回复
引用 15 楼 qq_30620137 的回复:
微信支付请求获取预支付id的这一步,一旦参数body使用了中文,就会返回“body不是UTF8编码”的错误,参数明明已经使用了utf编码处理了... 后来再网上看到说要用UrlEncode处理中文,我试过确实是可以成功请求,可是支付成功返回的界面中,商品描述那一栏微信直接把UrlEncode编码的字符显示出来了。 我用的是 java 请问有解决的方法没有? 那个body 只要是中文 怎么转码,微信客服端就显示的是什么样的乱码,如果是中文字体不转码,就会报 <xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[body不是UTF8编码]]></return_msg></xml> 请问 大家都有什么解决方案没?
+++++++++++++++++++++++++++++++++++++++++++++++ 我也遇到同样的问题,求解释
  • 打赏
  • 举报
回复
在你产生xml的时候,以及签名的时候,你的字符串是 unicode 标准的。而不要使用别的编码方式去让微信来理解字符串。 只有在你网络传输信令内容时,才考虑 utf8。这个时候内部的命令字符串已经生成完毕了,不要改动。
  • 打赏
  • 举报
回复
引用 12 楼 wwwmmmbird 的回复:
signParams.put("body", new String(body.getBytes("ISO-8859-1") ,"UTF-8")); // 商品主体 signParams.put("detail", new String(detail.getBytes("ISO-8859-1") ,"UTF-8")); // 商品描述 本人Java语言,MyEclipse UTF-8工程。
utf8 编码使用在你将 xml 发给其它系统的时候,又不是在你产生 xml 属性时使用 utf8编码。你这个多余的。
NQ6058484 2016-07-07
  • 打赏
  • 举报
回复
有谁解决了么 body中放了中文 要么签名错误 要么微信端打出来的二维码是乱码
nieyong120 2016-06-22
  • 打赏
  • 举报
回复
微信支付请求获取预支付id的这一步,一旦参数body使用了中文,就会返回“body不是UTF8编码”的错误,参数明明已经使用了utf编码处理了... 后来再网上看到说要用UrlEncode处理中文,我试过确实是可以成功请求,可是支付成功返回的界面中,商品描述那一栏微信直接把UrlEncode编码的字符显示出来了。 我用的是 java 请问有解决的方法没有? 那个body 只要是中文 怎么转码,微信客服端就显示的是什么样的乱码,如果是中文字体不转码,就会报 <xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[body不是UTF8编码]]></return_msg></xml> 请问 大家都有什么解决方案没? 坑死人呀
qq_30620137 2016-04-08
  • 打赏
  • 举报
回复
微信支付请求获取预支付id的这一步,一旦参数body使用了中文,就会返回“body不是UTF8编码”的错误,参数明明已经使用了utf编码处理了... 后来再网上看到说要用UrlEncode处理中文,我试过确实是可以成功请求,可是支付成功返回的界面中,商品描述那一栏微信直接把UrlEncode编码的字符显示出来了。 我用的是 java 请问有解决的方法没有? 那个body 只要是中文 怎么转码,微信客服端就显示的是什么样的乱码,如果是中文字体不转码,就会报 <xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[body不是UTF8编码]]></return_msg></xml> 请问 大家都有什么解决方案没?
小熊猫丶 2016-03-28
  • 打赏
  • 举报
回复
引用 13 楼 snowpiaojuan 的回复:
[quote=引用 12 楼 wwwmmmbird 的回复:] signParams.put("body", new String(body.getBytes("ISO-8859-1") ,"UTF-8")); // 商品主体 signParams.put("detail", new String(detail.getBytes("ISO-8859-1") ,"UTF-8")); // 商品描述 本人Java语言,MyEclipse UTF-8工程。
您好,我也是java, 编码也是UTF-8,虽然这样做不会返回“body不是UTF8编码”的错误,但是生成的微信订间,商品详情全是????。[/quote] 我的也是这样。你解决了么
加载更多回复(13)

3,143

社区成员

发帖
与我相关
我的任务
社区描述
微信开发即微信公众平台开发,将企业信息、服务、活动等内容通过微信网页的方式进行表现,通过二次开发可以将公众账号由一个媒体型营销工具转化成提供服务的产品。
社区管理员
  • 微信开发
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧