1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > java 微信开发收到乱码 微信公众号发送模板消息中文乱码(java)

java 微信开发收到乱码 微信公众号发送模板消息中文乱码(java)

时间:2023-01-17 22:26:46

相关推荐

java 微信开发收到乱码 微信公众号发送模板消息中文乱码(java)

使用 restTemplate 发送。

/**

* 微信模板类

*/

@Data

public class WeChatTemplate implements Serializable {

private static final long serialVersionUID = 612571563869874653L;

/**

* 模板id

*/

private String template_id;

/**

* 接收者 openId

*/

private String touser;

/**

* 模板跳转链接

*/

@JsonSerialize(include= JsonSerialize.Inclusion.NON_EMPTY)

private String url;

/**

* data的数据

*/

private TreeMap> data;

/**

* data 里的数据

*

* @param value :模板参数

* @param color :颜色 可选

* @return

*/

public static TreeMap item(String value, String color) {

TreeMap params = new TreeMap();

params.put("value", value);

params.put("color", color==null?"#173177":color);

return params;

}

}

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONException;

import com.alibaba.fastjson.JSONObject;

import pany.platform.base.config.wxpay.sdk.MyWXPayConfig;

import pany.platform.restapi.dao.hfss.WechatTemplateMessageLogMapper;

import pany.platform.restapi.model.hfss.WechatTemplateMessageLogWithBLOBs;

import com.fasterxml.jackson.databind.ObjectMapper;

import com.fasterxml.jackson.databind.SerializationFeature;

import com.google.gson.Gson;

import com.google.gson.GsonBuilder;

import lombok.extern.slf4j.Slf4j;

import mons.lang3.time.DateUtils;

import org.apache.http.entity.StringEntity;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Bean;

import org.ponent;

import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

import java.util.Date;

import java.util.Map;

@Component

@Slf4j

public class WeChatTemplateMessageService {

@Autowired

private RestTemplate restTemplate;

private static AccessToken accessToken = null;

@Resource

private MyWXPayConfig wxPayConfig;

@Resource

private WechatTemplateMessageLogMapper templateMessageLogMapper;

/**

* 获取access_token的接口地址

*/

public final static String access_token_url = "https://api./cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";

/**发送模板消息*/

public static final String SEND_TEMPLATE_MESSAGE = "https://api./cgi-bin/message/template/send?access_token=ACCESS_TOKEN";

/**

* 通过APPID 和 APPSECRET

* 获取assess_token

* @return

*/

public AccessToken getAccessToken() {

String appid = wxPayConfig.getAppID();

String appsecret = wxPayConfig.getAppsecret();

if(accessToken == null

|| DateUtils.addSeconds(accessToken.getReceiveTime(), accessToken.getExpires_in()).before(new Date())) {

String requestUrl = access_token_url.replace("APPID", appid).replace("APPSECRET", appsecret);

JSONObject jsonObject = restTemplate.getForObject(requestUrl,JSONObject.class);

// 如果请求成功

if (null != jsonObject) {

try {

accessToken = new AccessToken();

accessToken.setAccess_token(jsonObject.getString("access_token"));

accessToken.setExpires_in(jsonObject.getInteger("expires_in"));

accessToken.setReceiveTime(new Date());

} catch (JSONException e) {

accessToken = null;

// 获取token失败

log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getInteger("errcode"), jsonObject.getString("errmsg"));

}

}

}

return accessToken;

}

/**

* 发送模板消息

* @param accessToken

* @param template

* @return

*/

public void sendTemplateMsg(String accessToken, WeChatTemplate template){

String requestUrl =SEND_TEMPLATE_MESSAGE.replace("ACCESS_TOKEN",accessToken);

JSONObject jsonObject = restTemplate.postForObject(requestUrl,template,JSONObject.class);

log.info("返回jsonObject值:"+jsonObject);

if (null != jsonObject) {

int errorCode = jsonObject.getIntValue("errcode");

//发送日志

if (0 == errorCode) {

log.info("模板消息发送成功");

} else {

String errorMsg = jsonObject.getString("errmsg");

log.info("模板消息发送失败,错误是 "+errorCode+",错误信息是"+ errorMsg);

}

}

}

}

发送时,直接使用bean发送,不要转换成json,本人亲测转换成json串后发送会中文乱码。

如果有哪位知道原因请留言,谢谢!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。