[实例]JAVA调用微信接口发送图文消息,不用跳到详情页
package com.test; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL; import org.junit.Test; import net.sf.json.JSONArray;
import net.sf.json.JSONObject; public class WechatServlet {
//获取微信返回的access_token
private String getAccess_token() {
String access_token=null;
StringBuffer action =new StringBuffer();
action.append("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential")
.append("&appid=***************") //设置服务号的appid
.append("&secret=*********************************"); //设置服务号的密匙
URL url;
try {
//模拟get请求
url = new URL(action.toString());
HttpURLConnection http = (HttpURLConnection) url.openConnection();
http.setRequestMethod("GET");
http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
http.setDoInput(true);
InputStream is =http.getInputStream();
int size =is.available();
byte[] buf=new byte[size];
is.read(buf);
String resp =new String(buf,"UTF-8");
JSONObject json = JSONObject.fromObject(resp);
Object object =json.get("access_token");
if(object !=null){
access_token =String.valueOf(object);
}
System.out.println("getAccess_token:"+access_token);
return access_token;
} catch (MalformedURLException e) {
e.printStackTrace();
return access_token; } catch (IOException e) {
e.printStackTrace();
return access_token; }
}
//获取该服务号下的用户组
public JSONArray getOpenids(){
JSONArray array =null;
String urlstr ="https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID";
urlstr =urlstr.replace("ACCESS_TOKEN", getAccess_token());
urlstr =urlstr.replace("NEXT_OPENID", "");
URL url;
try {
url = new URL(urlstr);
HttpURLConnection http = (HttpURLConnection) url.openConnection();
http.setRequestMethod("GET");
http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
http.setDoInput(true);
InputStream is =http.getInputStream();
int size =is.available();
byte[] buf=new byte[size];
is.read(buf);
String resp =new String(buf,"UTF-8");
JSONObject jsonObject =JSONObject.fromObject(resp);
System.out.println("getOpenids:"+jsonObject.toString());
array =jsonObject.getJSONObject("data").getJSONArray("openid");
return array;
} catch (MalformedURLException e) {
e.printStackTrace();
return array; } catch (IOException e) {
e.printStackTrace();
return array;
}
}
//根据用户组的openId获取用户详细数据
public JSONObject getUserOpenids(String openId){
String urlstr ="https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";
urlstr =urlstr.replace("ACCESS_TOKEN", getAccess_token());
urlstr =urlstr.replace("OPENID", openId);
urlstr =urlstr.replace("NEXT_OPENID", "");
URL url;
try {
url = new URL(urlstr);
HttpURLConnection http = (HttpURLConnection) url.openConnection();
http.setRequestMethod("GET");
http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
http.setDoInput(true);
InputStream is =http.getInputStream();
int size =is.available();
byte[] buf=new byte[size];
is.read(buf);
String resp =new String(buf,"UTF-8");
JSONObject jsonObject =JSONObject.fromObject(resp);
System.out.println("getUserOpenids:"+jsonObject.toString());
return jsonObject;
} catch (MalformedURLException e) {
e.printStackTrace();
return null; } catch (IOException e) {
e.printStackTrace();
return null;
}
}
//主方法,只有服务号才能使用客服图文消息,实现点击图文链接,直接跳转到指定URL
@Test
public void testsendTextByOpenids(){
//String urlstr ="https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=ACCESS_TOKEN"; //群发图文消息
String urlstr ="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN"; //发送客服图文消息
urlstr =urlstr.replace("ACCESS_TOKEN", getAccess_token());
String reqjson =createGroupText(getOpenids());
try {
URL httpclient =new URL(urlstr);
HttpURLConnection conn =(HttpURLConnection) httpclient.openConnection();
conn.setConnectTimeout(5000);
conn.setReadTimeout(2000);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.connect();
OutputStream os= conn.getOutputStream();
System.out.println("ccccc:"+reqjson);
os.write(reqjson.getBytes("UTF-8"));//传入参数
os.flush();
os.close(); InputStream is =conn.getInputStream();
int size =is.available();
byte[] jsonBytes =new byte[size];
is.read(jsonBytes);
String message=new String(jsonBytes,"UTF-8");
System.out.println("testsendTextByOpenids:"+message); } catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//创建发送的数据
private String createGroupText(JSONArray array){
JSONObject gjson =new JSONObject();
//JSONObject json = getUserOpenids(array.get(3).toString()); //array参数是用户组所有的用户,该方法打印array其中一个用户的详细信息
gjson.put("touser", array.get(3));
gjson.put("msgtype", "news");
JSONObject news =new JSONObject();
JSONArray articles =new JSONArray();
JSONObject list =new JSONObject();
list.put("title","title"); //标题
list.put("description","description"); //描述
list.put("url","http://"); //点击图文链接跳转的地址
list.put("picurl","http://"); //图文链接的图片
articles.add(list);
news.put("articles", articles);
JSONObject text =new JSONObject();
gjson.put("text", text);
gjson.put("news", news); return gjson.toString();
}
}
[实例]JAVA调用微信接口发送图文消息,不用跳到详情页的更多相关文章
- java访问微信接口发送消息
最近在开发activiti流程的时候有个需求:流程到达每个审批节点后,需要向该节点的审批人发送一个消息,提示有审批需要处理. 参考了一下微信的开发者文档和网络上的一些技术博客,现在记录一下.以便后续继 ...
- JAVA调用微信接口实现页面分享功能(分享到朋友圈显示图片,分享给朋友)
钉钉提供的内网穿透之HTTP穿透:https://www.cnblogs.com/pxblog/p/13862376.html 网页分享到微信中如何显示标题图,如果自定义标题图,描述,显示效果如下 官 ...
- C# 调用微信接口上传素材和发送图文消息
using Common;using Newtonsoft.Json.Linq;using System;using System.IO;using System.Net;using System.T ...
- Java之HttpClient调用WebService接口发送短信源码实战
摘要 Java之HttpClient调用WebService接口发送短信源码实战 一:接口文档 二:WSDL 三:HttpClient方法 HttpClient方法一 HttpClient方法二 Ht ...
- 微信上传图文消息invalid media_id hint,thumb_media_id怎么获取
微信上传图文消息thumb_media_id, thumb_media_id怎么获取, 微信群发图文消息invalid media_id hint, 微信群发图文消息40007, 40007,inva ...
- Java调用RestFul接口
使用Java调用RestFul接口,以POST请求为例,以下提供几种方法: 一.通过HttpURLConnection调用 1 public String postRequest(String url ...
- Java调用webservice接口方法
java调用webservice接口 webservice的 发布一般都是使用WSDL(web service descriptive langu ...
- C# 调用微信接口的代码
调用微信接口前需要准备的内容. 1.微信公众平台的appid 2.微信公众平台的secret 3..获取tokenid 4.获取ticket 5.生成签名的随机串 6.生成签名的时间戳 7.生成签名 ...
- C# 关于调用微信接口的代码
调用微信接口前需要准备的内容. 1.微信公众平台的appid 2.微信公众平台的secret 3..获取tokenid 4.获取ticket 5.生成签名的随机串 6.生成签名的时间戳 7.生成签名 ...
随机推荐
- Angular 选项卡
<div ng-init="now=0;" class="nav"> <h4>选项卡</h4> <div > & ...
- WOW.js – 让页面滚动更有趣
演示1 演示2-仿oppo首页 下载 简介 有的页面在向下滚动的时候,有些元素会产生细小的动画效果.虽然动画比较小,但却能吸引你的注意.比如刚刚发布的 iPhone 6 的页面(查看).如果你希望你的 ...
- Access是什么?
一种使用简单的数据库软件,非常实用! 是微软的一个小型数据库,是Microsoft office 中的一个组件. Access数据库能够进行数据表设计.可视查询设计.SQL查询语言.窗体设计.报表设计 ...
- intent详解(一)
摘录自:http://blog.csdn.net/harvic880925/article/details/38399723 前言:通过重新翻看Android入门书籍,才发现原来自己露掉了那么多基础知 ...
- [知了堂学习笔记]_Java代码实现MySQL数据库的备份与还原
通常在MySQL数据库的备份和恢复的时候,多是采用在cmd中执行mysql命令来实现. 例如: mysqldump -h127.0.0.1 -uroot -ppass test > d:/tes ...
- JSTL与EL的区别
JSTL JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的.JSTL只能运行在支持J ...
- 优化 gruop by 语句
默认情况下,mysql对所有的gruop by col1,col2...的字段进行排序.如果查询包含group by但用户想要避免排序结果的消耗,则可以指定order by null禁止排序. exp ...
- js_2_json
js如何使用json? json.stringify(需要序列化对象) // 序列化 josn.parse(已经序列化对象) // 反序列化
- 08_jquery基础应用第一天
视频来源:麦子学院 讲师:李景山
- Unity AssetBundle 游戏资源分类及关系
--刚刚做完一个xlua的的热更项目,对AssetBundle资源分类总结一下.纯理论,闲谈知识,要是有建议,尽管提 ,不掺杂代码. --这里说说,AB是如何打包,如果下载,如何加载. 1.关键词理解 ...