微信支付中文乱码 java

网上太多php的,java的完全找不到,测试了几天,这个行得通,注意下方红色文字

/**

* 购买产品下单

* @param mm

* @return

*/

@RequestMapping("/pay")

public void pay(String openid,Integer hotelid,Integer mid,Integer pid,String body,String attach,Integer money,HttpServletResponse res) throws IOException{

SysHotel hotel=hdao.selectByPrimaryKey(hotelid);

String nonceStr=Constants.randomstr(32);

long timestamp=new Date().getTime()/100;

String sign="appid=%s&attach=%s&body=%s&device_info=%s&mch_id=%s&nonce_str=%s&notify_url=%s&openid=%s&out_trade_no=%s&spbill_create_ip=%s&total_fee=%s&trade_type=%s&key=%s";

//预下单签名

body=new String(body.getBytes("utf-8"),"iso8859-1");

attach=new String(attach.getBytes("utf-8"),"iso8859-1");

String md5=MD5.digest(String.format(sign,

hotel.getAppid(),

attach,

body,

"WEB",

hotel.getWxmcid(),

nonceStr,

cts.get("wxserver.domain")+"/paycallback",

openid,

"h"+hotel.getId()+"p"+pid+"m"+mid+"t"+timestamp, //订单号

"127.0.0.1",

money*100+"",

"JSAPI",

hotel.getWxmckey())).toUpperCase().substring(4);

//生成订单号

String resxml="<xml>"+

"<appid>%s</appid>"+

"<attach>%s</attach>"+

"<body>%s</body>"+

"<device_info>%s</device_info>"+

"<mch_id>%s</mch_id>"+

"<nonce_str>%s</nonce_str>"+

"<notify_url>%s</notify_url>"+

"<openid>%s</openid>"+

"<out_trade_no>%s</out_trade_no>"+

"<spbill_create_ip>%s</spbill_create_ip>"+

"<total_fee>%s</total_fee>"+

"<trade_type>%s</trade_type>"+

"<sign>%s</sign>"+

"</xml>";

String prepayres=WeixinAPIRequest.unifiedorder(String.format(resxml,

hotel.getAppid(),

attach,

body,

"WEB",

hotel.getWxmcid(),

nonceStr,

cts.get("wxserver.domain")+"/paycallback",

openid,

"h"+hotel.getId()+"p"+pid+"m"+mid+"t"+timestamp, //订单号

"127.0.0.1",

money*100+"",

"JSAPI",

md5));

if("YES".equals(cts.get("WXdebug"))){log.info("微信支付预下单:"+prepayres);};

//jsapi支付参数

JSONObject jo=new JSONObject();

if("SUCCESS".equals(getSection(prepayres, "return_code"))){

String prepay_id=getSection(prepayres, "prepay_id");

jo.put("appId", hotel.getAppid());

jo.put("timeStamp", timestamp);

jo.put("package", "prepay_id="+prepay_id);

jo.put("nonceStr", nonceStr);

jo.put("signType", "MD5");

jo.put("paySign", MD5.digest(String.format("appId=%s&nonceStr=%s&package=%s&signType=%s&timeStamp=%s&key=%s",

hotel.getAppid(),

nonceStr,

"prepay_id="+prepay_id,

"MD5",

timestamp+"",

hotel.getWxmckey())).toUpperCase().substring(4));

}

if("YES".equals(cts.get("WXdebug"))){log.info("微信JSAPI支付:"+jo.toString());};

res.setCharacterEncoding("utf-8");

res.getWriter().write( jo.toString());

}

/**

* 微信接口基础post请求

* @param args[接口path,xmlbody参数]

* @return json字符串

* @throws ClientProtocolException

* @throws IOException

*/

private static final  String postpay(String path,String xml){

try{

HttpPost post = new HttpPost(String.format(PAYBASE, path));

StringEntity entity = new StringEntity(xml,"iso8859-1");

entity.setContentEncoding("utf-8");

entity.setContentType("text/xml");

post.setEntity(entity);

return EntityUtils.toString(new DefaultHttpClient().execute(post).getEntity(),"utf-8");

}catch(Exception e){

return String.format("{\"exception\":\"%s\"}", e.getMessage());

}

}

时间: 2024-08-29 19:31:55

微信支付中文乱码 java的相关文章

Android开发 --微信支付开发(转载!)(开发工具:Eclipse)

Android_APP 微信支付接口开发 日期:2015-10-06 12:47:33 作者: 来源: 人气:3549 1.首先说一下我们在开发微信支付接口的时候遇到最多和最疑惑的问题,那就是明明 appid.商户号.API密钥 都对照了好几遍确实是和自己的一样,并且也没有在Log日志中出现签名错误等信息,却始终调不起微信支付,或是直接回到支付结果后的界面并提示 “微信支付结果:null;code=-1”.这就是微信支付中的一个深坑之处(为什么说这是深坑之处呢?会在下面特别说明). 2.下面就教

Spring boot项目以jar包形式启动中文乱码

指定端口号启动,未指定文件编码.会出现控制台中文乱码 java -jar -Dserver.port=8080 xxx.jar 指定端口号,指定文件编码启动 java -Dfile.encoding=utf-8 -jar -Dserver.port=8080 xxx.jar 转自:https://blog.csdn.net/u013310075/article/details/81166312 原文地址:https://www.cnblogs.com/xyyou/p/11147439.html

微信支付body中文乱码的情况

最后解决的办法就是把发送的xml文件设置一下编码即可:data = new String(data.getBytes(), "utf-8"); 当时的情况是: 项目是微信支付模式一扫码后显示package info not match special pay url 在网上查了  说是prepay_id参数的问题,经排查是上一步统一下单没用正确返回prepay_id导致下一步参数不全的情况: 所以排查统一下单方法,经过测试发现body中不带中文支付正常,带中文则会造成签名不一致的情况:

Java实现JsApi方式的微信支付

要使用JsApi进行微信支付,首先要从微信获得一个prepay_id,然后通过调用微信的jsapi完成支付,JS API的返回结果get_brand_wcpay_request:ok仅在用户成功完成支付时返回.由于前端交互复杂,get_brand_wcpay_request:cancel或者get_brand_wcpay_request:fail可以统一处理为用户遇到错误或者主动放弃,不必细化区分. 示例代码如下: functiononBridgeReady(){ WeixinJSBridge.

微信公众号支付开发全过程 --JAVA

按照惯例,开头总得写点感想 ------------------------------------------------------------------ 业务流程 这个微信官网说的还是很详细的,还配了图.我还要再说一遍. 用户点击一个支付按钮-->{后台一大推处理}-->用户看到了一个输入密码的界面,包含金额等一些信息-->用户输入密码后出来一个支付成功的页面(这部分流程都是微信自己完成的,我们什么都不用做)-->返回系统自己的页面(总不能让用户一直看着一个支付完成的页面吧

微信公众号开发--获取用户信息中文乱码的解决方案

在微信开发中我们会经常需要获取用户的信息. 微信给我们提供了获取用户信息的api, 地址为 https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN 将其中的access_token替换为我们的access_token openid为关注用户的openid就可以获取到用户的信息了. 问题描述 不过获取到的数据却是中文乱码 而用Java程序获取的结果也是一样的

微信自定义菜单中文乱码问题

文章转自 <微信自定义菜单中文乱码问题> 问题:微信自定义菜单开发者模式,菜单中文出现乱码 例: $menu = array( 'button' => array( array( 'type'=>'view', 'name'=>'百度', 'url'=>'https://www.baidu.com', ), ), ); 调用微信自定义菜单创建接口:https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACC

URL地址中中文乱码详解(javascript中encodeURI和decodeURI方法、java.net.URLDecoder.encode、java.net.URLDecoder.decode)

引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作为的参数的情况,这种情况下,一般都需要正确的设置和编码中文字符信息.乱码问题就此产生了,该如何解决呢?且听本文详细道来. 1.  问题的引出 在Restful的服务设计中,查询某些信息的时候,一般的URL地址设计为: get /basic/service? keyword=历史 , 之类的URL地址. 但是,在实际的开发和使用中,确是有乱码情况的发生,在后台的读取keyword信息为乱码,无法正确读取. 2. 乱码是如

java开发中中文乱码总结

1.jsp页面内容显示乱码 这种乱码原因很简单,一般的工具或解码程序对中文字符解析时采用默认的解码方式: <%@ page contentType="text/html; charset=ISO-8859-1"%> 我们只需修改其编码方式即可,如下: <%@ page contentType="text/html; charset=UTF-8"%> 字符集:UTF-8 > GBK > GB2312 2.jsp 与 Servlet