您的位置:首页 > 移动开发 > 微信开发

微信开发-发送客服消息

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);

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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: