微信开发-发送客服消息
2017-02-07 15:13
363 查看
参考连接点击打开链接
模板消息不好审核通过,因此有时候我们需要发送客服消息。
客服消息在发送“图文消息”的时候不会夹带客服图标,而是一整块的消息,体验相对比较好。
下边描述一下发送客服消息的大概过程。
1、公众号配置
发送客服消息需要应用的服务响应在线,因此首先在公众平台进行配置(开发->基本配置),如图所示:
需要注意的是:
应用在线,代码如下所示:
// 微信加密签名
String st = request.getParameter("signature");
// 随机字符串
String ec = request.getParameter("echostr");
// 时间戳
String timestamp = request.getParameter("timestamp");
// 随机数
String nonce = request.getParameter("nonce");
Arrays.sort({ token, timestamp, nonce };);
String bigStr = str[0] + str[1] + str[2];
// 加密
String digest = new SHA1().getDigestOfString(bigStr.getBytes()).toLowerCase();
// 确认请求来至微信
if (digest.equals(signature)) {
response.getWriter().print(echostr);
}token是在配置的时候填写的token中的字符串,微信服务器在收到以上响应的时候将会成功配置
2、发送客服消息
a/用户需要是公众号的关注用户;
b/获取accesstoken,在之前的文章中有获取的方法,就不再赘述;
发送代码如下:
public static java.util.Map<String,Object> sendCustomerServiceMessTo(final String openId,
final String appid,
final String secret){
java.util.Map<String,Object> retCode =
new java.util.HashMap<String,Object>(3);
= 1L;{put("title","Happy Day");put("description","Is Really A Happy Day");put("url","详情地址");put("picurl","图片地址");}};final java.util.ArrayList<java.util.Map<String,String>> bussData_List = new java.util.ArrayList<java.util.Map<String,String>>(1);final java.util.Map<String,java.util.ArrayList<java.util.Map<String,String>>>
articleMap= new java.util.HashMap<String,java.util.ArrayList<java.util.Map<String,String>>>(1);bussData_List.add(bussData_First);articleMap.put("articles", bussData_List);java.util.Map<String,Object> postData = new java.util.HashMap<String,Object>(){private
static final long serialVersionUID = 1L;{put("touser",openId);put("msgtype","news");put("news",articleMap);}};String postDataJsonString = JSON.toJSONString(postData);HttpUriRequest httpUriRequest = RequestBuilder.post().setUri("https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="+jsApiTicketToken.getAccess_token()).addHeader("Content-Type",
"application/x-www-form-urlencoded; charset=UTF-8").setEntity(new StringEntity(postDataJsonString, Charset.forName("utf-8"))).build();Ret messvo = LocalHttpClient.executeJsonResult(httpUriRequest, Ret.class);retCode.put("1", messvo);return retCode;}
模板消息不好审核通过,因此有时候我们需要发送客服消息。
客服消息在发送“图文消息”的时候不会夹带客服图标,而是一整块的消息,体验相对比较好。
下边描述一下发送客服消息的大概过程。
1、公众号配置
发送客服消息需要应用的服务响应在线,因此首先在公众平台进行配置(开发->基本配置),如图所示:
需要注意的是:
应用在线,代码如下所示:
// 微信加密签名
String st = request.getParameter("signature");
// 随机字符串
String ec = request.getParameter("echostr");
// 时间戳
String timestamp = request.getParameter("timestamp");
// 随机数
String nonce = request.getParameter("nonce");
Arrays.sort({ token, timestamp, nonce };);
String bigStr = str[0] + str[1] + str[2];
// 加密
String digest = new SHA1().getDigestOfString(bigStr.getBytes()).toLowerCase();
// 确认请求来至微信
if (digest.equals(signature)) {
response.getWriter().print(echostr);
}token是在配置的时候填写的token中的字符串,微信服务器在收到以上响应的时候将会成功配置
2、发送客服消息
a/用户需要是公众号的关注用户;
b/获取accesstoken,在之前的文章中有获取的方法,就不再赘述;
发送代码如下:
public static java.util.Map<String,Object> sendCustomerServiceMessTo(final String openId,
final String appid,
final String secret){
java.util.Map<String,Object> retCode =
new java.util.HashMap<String,Object>(3);
TicketToken jsApiTicketToken = getToken(appid,secret);if(jsApiTicketToken.getAccess_token() == null|| "".equals(jsApiTicketToken.getAccess_token()))return null;final java.util.Map<String,String> bussData_First = new java.util.HashMap<String,String>(){private static final long serialVersionUID
= 1L;{put("title","Happy Day");put("description","Is Really A Happy Day");put("url","详情地址");put("picurl","图片地址");}};final java.util.ArrayList<java.util.Map<String,String>> bussData_List = new java.util.ArrayList<java.util.Map<String,String>>(1);final java.util.Map<String,java.util.ArrayList<java.util.Map<String,String>>>
articleMap= new java.util.HashMap<String,java.util.ArrayList<java.util.Map<String,String>>>(1);bussData_List.add(bussData_First);articleMap.put("articles", bussData_List);java.util.Map<String,Object> postData = new java.util.HashMap<String,Object>(){private
static final long serialVersionUID = 1L;{put("touser",openId);put("msgtype","news");put("news",articleMap);}};String postDataJsonString = JSON.toJSONString(postData);HttpUriRequest httpUriRequest = RequestBuilder.post().setUri("https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="+jsApiTicketToken.getAccess_token()).addHeader("Content-Type",
"application/x-www-form-urlencoded; charset=UTF-8").setEntity(new StringEntity(postDataJsonString, Charset.forName("utf-8"))).build();Ret messvo = LocalHttpClient.executeJsonResult(httpUriRequest, Ret.class);retCode.put("1", messvo);return retCode;}
public class Ret { private int errcode; private String errmsg; private long msgid; public int getErrcode() { return errcode; } public void setErrcode(int errcode) { this.errcode = errcode; } public String getErrmsg() { return errmsg; } public void setErrmsg(String errmsg) { this.errmsg = errmsg; } public long getMsgid() { return msgid; } public void setMsgid(long msgid) { this.msgid = msgid; } }
public class TicketToken { private String access_token; private int expires_in; private int errcode; private String errmsg; public String getAccess_token() { return access_token; } public void setAccess_token(String access_token) { this.access_token = access_token; } public int getExpires_in() { return expires_in; } public void setExpires_in(int expires_in) { this.expires_in = expires_in; } public int getErrcode() { return errcode; } public void setErrcode(int errcode) { this.errcode = errcode; } public String getErrmsg() { return errmsg; } public void setErrmsg(String errmsg) { this.errmsg = errmsg; } }
public static JsApiTicketToken getToken (String appid, String secret){ HttpUriRequest httpUriRequest = RequestBuilder.get() .setUri("https://api.weixin.qq.com/cgi-bin/token") .addParameter("grant_type","client_credential") .addParameter("appid",appid) .addParameter("secret",secret) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest, JsApiTicketToken.class); }
相关文章推荐
- Android开发之仿微信显示更多文字的View
- 微信公众号开发和微信支付
- TensorFlow 1.0.0rc1 入坑记 ——转自 慢慢学TensorFlow 微信公众号
- TensorFlow Session 中关于 GPU 的配置项解析 ——转自 慢慢学TensorFlow 微信公众号
- 通过user-agent判断是支付宝还是微信
- 利用 TensorFlow 集装箱快速搭建交互式开发环境——转自 慢慢学TensorFlow 微信公众号
- 微信支付
- ***微信 该连接无法访问问题解决办法
- 微信小程序开发工具常用快捷键
- xcx: tabBar的pagePath与wx.navigateTo中url引用相同页面导致无法跳转
- 微信小程序body和html的问题
- TensorFlow 增加自定义运算符 ——转自 慢慢学TensorFlow 微信公众号
- TensorFlow 如何避免重复下载数据 ——转自 慢慢学TensorFlow 微信公众号
- iOS - 微信支付流程
- 微信小程序实用小技巧
- 小程序的坑
- 微信群控系统的作用
- C#做的在线升级小程序
- 群控系统 微信群控系统 手机群控系统 手机群控软件
- 视频H5のVideo标签在微信里的坑和技巧