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

微信开方平台全网发布 java

2016-11-21 17:24 288 查看
1、

模拟粉丝触发专用测试公众号的事件,并推送事件消息到专用测试公众号,第三方平台方开发者需要提取推送XML信息中的event值,并在5秒内立即返回按照下述要求组装的文本消息给粉丝。

1)微信推送给第三方平台方: 事件XML内容(与普通公众号接收到的信息是一样的)

2)服务方开发者在5秒内回应文本消息并最终触达到粉丝:文本消息的XML中Content字段的内容必须组装为:event + “from_callback”(假定event为LOCATION,则Content为: LOCATIONfrom_callback)

if ("gh_3c884a361561".equals(toUserName)) {// 全网发布接入

userMsgService.updateUserMsg(fromUserName, toUserName);

String s = "<xml>" + "<ToUserName>" + fromUserName + "</ToUserName>" + "<FromUserName>"
+ toUserName + "</FromUserName>" + "<CreateTime>" + time + "</CreateTime>"
+ "<MsgType>text</MsgType>" + "<Content>" + event + "from_callback"
+ "</Content>" + "</xml>";

String miwen = pc.encryptMsg(s, timestamp, nonce);

response.getWriter().write(miwen);
}

2、模拟粉丝发送文本消息给专用测试公众号,第三方平台方需根据文本消息的内容进行相应的响应:

1)微信模推送给第三方平台方:文本消息,其中Content字段的内容固定为:TESTCOMPONENT_MSG_TYPE_TEXT

2)第三方平台方立马回应文本消息并最终触达粉丝:Content必须固定为:TESTCOMPONENT_MSG_TYPE_TEXT_callback

if ("TESTCOMPONENT_MSG_TYPE_TEXT".equals(content)) {
String s = "<xml>" + "<ToUserName>" + fromUserName + "</ToUserName>" + "<FromUserName>"
+ toUserName + "</FromUserName>" + "<CreateTime>" + time + "</CreateTime>"
+ "<MsgType>text</MsgType>" + "<Content>"
+ "TESTCOMPONENT_MSG_TYPE_TEXT_callback" + "</Content>" + "</xml>";

String miwen = pc.encryptMsg(s, timestamp, nonce);

response.getWriter().write(miwen);
}

3、模拟粉丝发送文本消息给专用测试公众号,第三方平台方需在5秒内返回空串表明暂时不回复,然后再立即使用客服消息接口发送消息回复粉丝

1)微信模推送给第三方平台方:文本消息,其中Content字段的内容固定为: QUERY_AUTH_CODE:$query_auth_code$(query_auth_code会在专用测试公众号自动授权给第三方平台方时,由微信后台推送给开发者)

2)第三方平台方拿到$query_auth_code$的值后,通过接口文档页中的“使用授权码换取公众号的授权信息”API,将$query_auth_code$的值赋值给API所需的参数authorization_code。然后,调用发送客服消息api回复文本消息给粉丝,其中文本消息的content字段设为:$query_auth_code$_from_api(其中$query_auth_c
4000
ode$需要替换成推送过来的query_auth_code)

if (content.contains("QUERY_AUTH_CODE")) {

String component_access_token = publicAccountService.getComponentToken();
String authorization_code = content.substring(content.indexOf(":") + 1);

//获取token
String t = publicAccountService.queryAuth(component_access_token, authorization_code,
2);

//发送客服消息
publicAccountService.sendKf(t, fromUserName, authorization_code);

response.getWriter().write("");



/**
* 发送客服消息

* @param access_token
* @param menu
* @return
*/
public static String sendKf(String access_token, String openid, String query_auth_code) {
// String menu =
// "{\"button\":[{\"type\":\"click\",\"name\":\"MENU01\",\"key\":\"1\"},{\"type\":\"click\",\"name\":\"天气查询\",\"key\":\"西安\"},{\"name\":\"日常工作\",\"sub_button\":[{\"type\":\"click\",\"name\":\"待办工单\",\"key\":\"01_WAITING\"},{\"type\":\"click\",\"name\":\"已办工单\",\"key\":\"02_FINISH\"},{\"type\":\"click\",\"name\":\"我的工单\",\"key\":\"03_MYJOB\"},{\"type\":\"click\",\"name\":\"公告消息箱\",\"key\":\"04_MESSAGEBOX\"},{\"type\":\"click\",\"name\":\"签到\",\"key\":\"05_SIGN\"}]}]}";

//
// String menu_del =
// "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token="+access_token;
//
// String body = HttpHelper.getinstance().get(menu_del);
//
// if (StringUtils.isNotBlank(body)) {
//
// }

System.err.println("--------------发送客服消息--------------");
String dataMessage = "";

dataMessage += "{";
dataMessage += "\"touser\":\"" + openid + "\",";
dataMessage += "\"msgtype\":\"text\",";
dataMessage += "\"text\":";
dataMessage += "{";
dataMessage += "\"content\":\"" + query_auth_code + "_from_api" + "\"";
dataMessage += "}";
dataMessage += "}";

// 此处改为自己想要的结构体,替换即可
String action = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + access_token;
try {
URL url = new URL(action);
HttpURLConnection http = (HttpURLConnection) url.openConnection();

http.setRequestMethod("POST");
http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
http.setDoOutput(true);
http.setDoInput(true);
System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒
System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒
http.connect();
OutputStream os = http.getOutputStream();
os.write(dataMessage.getBytes("UTF-8"));// 传入参数
os.flush();
os.close();

InputStream is = http.getInputStream();
int size = is.available();
byte[] jsonBytes = new byte[size];
is.read(jsonBytes);
String message = new String(jsonBytes, "UTF-8");
System.err.println("返回信息" + message);
return "返回信息" + message;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.err.println("createMenu 失败");
return "createMenu 失败";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息