java 微信搭建实例

java web 项目 使用微信 实例:

1.准备条件

一个微信开发者账号,如果你没有,请注册一个(如何注册,请百度)

注册后 申请开发者 ,找到开发者中心。

记录下面的AppID和 AppSecret

如下图:



2.创建一个web项目并添加struts应用

3.加入config.properties 配置 AppID 等


4.创建一个初始化方法init 实现 ServletContextListener ,并且加入web.xml的listener 

代码如下:

ServletContextListener.java

public class init implements ServletContextListener{
	private ExecutorService threadService;
	
	private Timer timer;
	
	public init()
	{
		threadService = Executors.newFixedThreadPool(1);
		timer = new Timer();
	}


	public void contextInitialized(ServletContextEvent arg0) {
		InputStream in = init.class.getResourceAsStream("/config.properties");
		Properties p = new Properties();
		
		try {
			p.load(in);
			Constant.Config = (Hashtable) p.clone();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		TimerTask accessTask = new AccessToken();
		TimerTask initMenu = new InitMenu();
		// 提取AccessToken
		threadService.execute(accessTask);
//		// 初始化微信菜单
		threadService.execute(initMenu);
		// 提取自定义回复
		//threadService.execute(synAutoMsg);
		// 定时更新token
		timer.scheduleAtFixedRate(accessTask, 3600000, 3600000);
		
	}

	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub
		
	}
}

不要忘记 web.xml配置 监听

<listener>
	<listener-class>common.init</listener-class>
</listener>

其中:

TimerTask accessTask = new AccessToken();
TimerTask initMenu = new InitMenu();
// 提取AccessToken
threadService.execute(accessTask);
// // 初始化微信菜单
threadService.execute(initMenu);

这段代码 定义了二个初始化线程 ,一个是提取微信的AccessToken 一个是初始化微信菜单

(这个需要交钱才有的功能,否则出现

{errcode=48001, errmsg=api unauthorized hint: [G.k0Ta0030vr19]}

错误提示) 

还有一个定时任务

// 定时更新token
timer.scheduleAtFixedRate(accessTask, 3600000, 3600000);

5.AccessToken.java

public class AccessToken extends TimerTask
{
	
	@Override
	public void run()
	{
		Map<String, String> param = null;
		Map<String, Object> results = null;
		// Log.debug("启动获取AccessToken线程", this);
		try
		{
			// Log.debug("开始获取AccessToken,JS_Ticket ... ", this);
			// 加载AccessToken
			param = new HashMap<String, String>();
			param.put("grant_type", "client_credential");
			param.put("appid", (String) Constant.Config.get("AppID"));
			param.put("secret", (String) Constant.Config.get("AppSecret"));
			results = HttpRequest.sendHttp(
					"https://api.weixin.qq.com/cgi-bin/token", param);
			if (results.get("access_token") != null)
				Constant.AccessToken = (String) results.get("access_token");
			System.out.println("加载AccessToken:" + Constant.AccessToken);
			
			// 加载JS_Ticket
			param = new HashMap<String, String>();
			param.put("access_token", Constant.AccessToken);
			param.put("type", "jsapi");
			results = HttpRequest
					.sendHttp(
							"https://api.weixin.qq.com/cgi-bin/ticket/getticket",
							param);
			if (results.get("ticket") != null)
				Constant.JS_Ticket = (String) results.get("ticket");
			System.out.println("加载JS_Ticket:" + Constant.JS_Ticket);
			
			// 生成JS_SDK调用签名

			
			
			// 创业贷款--未登录
			JsSign jsSign = new JsSign();
			jsSign.setUrl((String) Constant.Config.get("FIELD_URL")
					+ "/u/shellInvate.action");
			Constant.MapJsSign.put("shellInvate-u",
					CoreService.generaSing(Constant.JS_Ticket, jsSign));
			System.out.println("jsSign:" + jsSign.getUrl());
			System.out.println("jsSign:" + jsSign.getSign());
			System.out.println("jsSign:" + jsSign.getNoncestr());
			System.out.println("jsSign:" + jsSign.getTimestamp());
			
			// 微信分享 孵化器 
			jsSign = new JsSign();
			jsSign.setUrl((String) Constant.Config.get("FIELD_URL")
					+ "/invest/weChatHatch.action");
			Constant.MapJsSign.put("weChatHatch-u",
					CoreService.generaSing(Constant.JS_Ticket, jsSign));
			
			System.out.println("weChatHatch:" + jsSign.getUrl());
			System.out.println("weChatHatch:" + jsSign.getSign());
			System.out.println("weChatHatch:" + jsSign.getNoncestr());
			System.out.println("weChatHatch:" + jsSign.getTimestamp());
			
			//微信分享 我要投资
			jsSign = new JsSign();
			jsSign.setUrl((String) Constant.Config.get("FIELD_URL")
					+ "/invest/weChatInvest.action");
			Constant.MapJsSign.put("weChatInvest-u",
					CoreService.generaSing(Constant.JS_Ticket, jsSign));
			
			System.out.println("weChatInvest:" + jsSign.getUrl());
			System.out.println("weChatInvest:" + jsSign.getSign());
			System.out.println("weChatInvest:" + jsSign.getNoncestr());
			System.out.println("weChatInvest:" + jsSign.getTimestamp());
			
			//微信分享 投递项目
			jsSign = new JsSign();
			jsSign.setUrl((String) Constant.Config.get("FIELD_URL")
					+ "/invest/weChatAddPage.action");
			Constant.MapJsSign.put("weChatAddPage-u",
					CoreService.generaSing(Constant.JS_Ticket, jsSign));
			
			System.out.println("weChatAddPage:" + jsSign.getUrl());
			System.out.println("weChatAddPage:" + jsSign.getSign());
			System.out.println("weChatAddPage:" + jsSign.getNoncestr());
			System.out.println("weChatAddPage:" + jsSign.getTimestamp());			
			
			//微信分享 融资项目
			jsSign = new JsSign();
			jsSign.setUrl((String) Constant.Config.get("FIELD_URL")
					+ "/invest/wxInvestPageQuery.action");
			Constant.MapJsSign.put("wxInvestPageQuery-u",
					CoreService.generaSing(Constant.JS_Ticket, jsSign));
			
			System.out.println("wxInvestPageQuery:" + jsSign.getUrl());
			System.out.println("wxInvestPageQuery:" + jsSign.getSign());
			System.out.println("wxInvestPageQuery:" + jsSign.getNoncestr());
			System.out.println("wxInvestPageQuery:" + jsSign.getTimestamp());
			
			
			//主页面分享
			jsSign = new JsSign();
			jsSign.setUrl((String) Constant.Config.get("FIELD_URL")
					+ "/user/sscLocal.action");
			Constant.MapJsSign.put("shellInvateSsc-local",
					CoreService.generaSing(Constant.JS_Ticket, jsSign));
			
			System.out.println("shellInvateSscjsSignLocal:" + jsSign.getUrl());
			System.out.println("shellInvateSscjsSignLocal:" + jsSign.getSign());
			System.out.println("shellInvateSscjsSignLocal:" + jsSign.getNoncestr());
			System.out.println("shellInvateSscjsSignLocal:" + jsSign.getTimestamp());
			
			//weChat 11 活动 分享
			jsSign = new JsSign();
			jsSign.setUrl((String) Constant.Config.get("FIELD_URL")
					+ "/invest/weChatActivityEle.action");
			Constant.MapJsSign.put("weChatActivityEle",
					CoreService.generaSing(Constant.JS_Ticket, jsSign));
			
			System.out.println("weChatActivityEle:" + jsSign.getUrl());
			System.out.println("weChatActivityEle:" + jsSign.getSign());
			System.out.println("weChatActivityEle:" + jsSign.getNoncestr());
			System.out.println("weChatActivityEle:" + jsSign.getTimestamp());
			
			
			
			//weChat 大酬宾活动 分享
			jsSign = new JsSign();
			jsSign.setUrl((String) Constant.Config.get("FIELD_URL")
					+ "/invest/wxActivity.action");
			Constant.MapJsSign.put("wxActivity",
					CoreService.generaSing(Constant.JS_Ticket, jsSign));
			
			System.out.println("wxActivity:" + jsSign.getUrl());
			System.out.println("wxActivity:" + jsSign.getSign());
			System.out.println("wxActivity:" + jsSign.getNoncestr());
			System.out.println("wxActivity:" + jsSign.getTimestamp());

	
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
}

6.InitMenu.java

public class InitMenu extends TimerTask{

	@Override
	public void run() {
		Map<String, String> param = new HashMap<String, String>();
		param.put("access_token", Constant.AccessToken);
		Map<String, Object> results = null;
		List<Button> list = new ArrayList<Button>();
//		(String) Constant.Config.get("FIELD_URL") + "/wx/cyList.jsp")
		
		Button main1 = new Button(); //第一个主菜单
		main1.setName("创业项目");
		//第一个主菜单 创建区域------------------------------------
		List<Button> main1_sub_menus = new ArrayList<Button>();
		Button main1_sub_1 = new Button(); //第一个主菜单的第一个菜单
		main1_sub_1.setType("view");
		main1_sub_1.setUrl((String) Constant.Config.get("FIELD_URL") + "/invest/weChatHatch.action");
		main1_sub_1.setName("孵化器");
		main1_sub_menus.add(main1_sub_1);
		
		Button main1_sub_2 = new Button(); //第一个主菜单的第二个菜单
		main1_sub_2.setType("view");
		main1_sub_2.setUrl((String) Constant.Config.get("FIELD_URL") + "/invest/weChatAddPage.action");
		main1_sub_2.setName("投递项目");
		main1_sub_menus.add(main1_sub_2);
		main1.setSub_button(main1_sub_menus);
		//第一个主菜单 创建区域------------------------------------
		
		
		Button main2 = new Button(); //第二个主菜单
		main2.setName("投资");
		//第二个主菜单 创建区域------------------------------------
		List<Button> main2_sub_menus = new ArrayList<Button>();
		Button main2_sub_1 = new Button(); //第二个主菜单的第一个菜单
		main2_sub_1.setType("view");
		main2_sub_1.setUrl((String) Constant.Config.get("FIELD_URL") + "/wx/investPageQuery.jsp");
		main2_sub_1.setName("融资项目");
		main2_sub_menus.add(main2_sub_1);
		
		Button main2_sub_2 = new Button(); //第二个主菜单的第二个菜单
		main2_sub_2.setType("view");
		main2_sub_2.setUrl((String) Constant.Config.get("FIELD_URL") + "/invest/weChatInvest.action");
		main2_sub_2.setName("我要投资");
		main2_sub_menus.add(main2_sub_2);
		
		Button main2_sub_3 = new Button(); //第二个主菜单的第三个菜单
		main2_sub_3.setType("view");
		main2_sub_3.setUrl((String) Constant.Config.get("FIELD_URL") + "/invest/wxActivity.action");
		main2_sub_3.setName("大酬宾");
		main2_sub_menus.add(main2_sub_3);
		main2.setSub_button(main2_sub_menus);
		
		Button main2_sub_4 = new Button(); //第二个主菜单的第四个菜单
		main2_sub_4.setType("view");
		main2_sub_4.setUrl((String) Constant.Config.get("FIELD_URL") + "/invest/weChatActivityEle.action");
		main2_sub_4.setName("送现金活动");
		main2_sub_menus.add(main2_sub_4);
		main2.setSub_button(main2_sub_menus);
		//第二个主菜单 创建区域------------------------------------
		
		Button main3 = new Button(); //第三个主菜单
		main3.setName("更多");
		//第三个主菜单 创建区域------------------------------------
		List<Button> main3_sub_menus = new ArrayList<Button>();
		Button main3_sub_1 = new Button(); //第二个主菜单的第一个菜单
		main3_sub_1.setType("view");
		main3_sub_1.setUrl("http://renrench.com/app/downApp.action");
		main3_sub_1.setName("下载APP");
		main3_sub_menus.add(main3_sub_1);
				
		Button main3_sub_2 = new Button(); //第二个主菜单的第二个菜单
		main3_sub_2.setType("click");
		main3_sub_2.setName("联系我们");
		main3_sub_2.setKey("KEY_ABOUT");
		main3_sub_menus.add(main3_sub_2);
		main3.setSub_button(main3_sub_menus);
		//第三个主菜单 创建区域------------------------------------
		
		
		list.add(main2);
		list.add(main1);
		list.add(main3);
		Map<String, List<Button>> map = new HashMap<String, List<Button>>();
		map.put("button", list);
		try
		{
			// 先删除菜单
			results = HttpRequest.sendHttp(
					"https://api.weixin.qq.com/cgi-bin/menu/delete", param);
			System.out.println(results);
			// 再创建
			results = HttpRequest
					.sendHttpJson(
							"https://api.weixin.qq.com/cgi-bin/menu/create",
							param, map);
			System.out.println(results);
			if ("0".equals(String.valueOf(results.get("errcode"))))
				System.out.println("创建菜单成功");
			else
				System.out.println("创建菜单失败");
			// 查询菜单
			results = HttpRequest.sendHttp(
					"https://api.weixin.qq.com/cgi-bin/menu/get", param);
			System.out.println(results);
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}

}



7.想要它跑起来 你还需要其他的辅助类

(1) .Constant.java

public class Constant
{

	public static Map Config = null;

	public static String AccessToken = null;

	public static String JS_Ticket = null;

	public static Map<String, JsSign> MapJsSign = new Hashtable<String, JsSign>();

	public static final String About = "人人创,人人创业孵化平台。\r\n联系电话:400-6136358\r\n公司地址:深圳龙华新区梅坂大道城市酒店6楼";
	
	public static final String About2 = "人人创,人人创业孵化平台。\r\n联系电话:400-6136358\r\n公司地址:深圳龙华新区梅坂大道城市酒店6楼";

	public static final String UploadPhoto = "请上传照片!";

	public static final String KEY_ABOUT = "KEY_ABOUT";

	public static final String KEY_PHOTO = "KEY_PHOTO";

	public static Map<String, BaseMessage> AUTO_MSG = new Hashtable<String, BaseMessage>();

	public static Map<String, BaseMessage> KEY_MSG = new Hashtable<String, BaseMessage>();

	public static Map<String, Long> MSG_TIMER = new Hashtable<String, Long>();

	public static final long msgTimeout = 1800000;

	public static final String SearchKeyMainImgUrl = "/images/11.jpg";

	public static final String SearchKeySubImgUrl = "/images/22.jpg";

	public static final String SearchKeyUrl = "/wx/cyList.jsp";

	public static final int SinglePageResultCount = 10;
	
	public static final int LotterPageResultCount = 20;

	public static final int SinglePageResultCountForWeb = 24;

	public static final int RandomSinglePageResultCountForWeb = 5;

	public static final int SinglePageResultCountForInvest = 5;
	/**资讯每页数量*/
	public static final int SinglePageResultCountForNews = 6;
	/**我的项目分页*/
	public static final int SinglePageResultCountForMyProjects = 8;
	
	/**案列每页显示数量*/
	public static final int SinglePageResultCountForSuccProjects = 3;

	public static final String[] charArr = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "v", "b", "n",
			"m", "l", "k", "j", "h", "g", "f", "d", "s", "a", "c", "x", "z", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "V", "B", "N", "M", "L", "K",
			"J", "H", "G", "F", "D", "S", "A", "C", "X", "Z" };

	public static final String[] RandomProjectOrder = { "p.ProjectID desc", "p.ProjectID asc", "p.ProjectName desc", "p.ProjectName asc", "p.MerchantID desc",
			"p.MerchantID asc", "p.CategoryID desc", "p.CategoryID asc", "p.Introduction desc", "p.Introduction asc", "p.TradePrice desc", "p.TradePrice asc",
			"p.SaleCount desc", "p.SaleCount asc", "p.DepositPrice desc", "p.DepositPrice asc", "p.ProductActivityStatus desc", "p.ProductActivityStatus asc",
			"p.IsRecommend desc", "p.IsRecommend asc", "p.RecommendSort desc", "p.RecommendSort asc", "p.IsDelete desc", "p.IsDelete asc", "p.CreateBy desc",
			"p.CreateBy asc", "p.UpdateBy desc", "p.UpdateBy asc", "p.UpdateDT desc", "p.UpdateDT asc", "p.CreateDT desc", "p.CreateDT asc",
			"p.LearningTime desc", "p.LearningTime asc", "p.DefaultImg desc", "p.DefaultImg asc", "p.AttentionCount desc", "p.AttentionCount asc",
			"p.BrowseCount desc", "p.BrowseCount asc" };

	public static final String[] RandomShopOrder = { "t.ID desc", "t.ID asc", "t.Address desc", "t.Address asc", "t.Price desc", "t.Price asc",
			"t.Acreage desc", "t.Acreage asc", "t.AreaId desc", "t.AreaId asc", "t.Nearby desc", "t.Nearby asc", "t.CreateBy desc", "t.CreateBy asc",
			"t.UpdateBy desc", "t.UpdateBy asc", "t.UpdateDT desc", "t.UpdateDT asc", "t.CreateDT desc", "t.CreateDT asc", "t.IsDelete desc", "t.IsDelete asc",
			"t.Introduction desc", "t.Introduction asc", "t.Phone desc", "t.Phone asc", "t.ShopName desc", "t.ShopName asc", "t.Longitude desc",
			"t.Longitude asc", "t.Latitude desc", "t.Latitude asc", "t.CheckStatus desc", "t.CheckStatus asc", "t.CheckRemark desc", "t.CheckRemark asc",
			"t.Contact desc", "t.Contact asc", "t.UpdateUserType desc", "t.UpdateUserType asc", "t.MerchantId desc", "t.MerchantId asc", "t.UpdateUserId desc",
			"t.UpdateUserId asc", "t.EmployeeId desc", "t.EmployeeId asc", "t.DefaultImg desc", "t.DefaultImg asc", "t.AttentionCount desc",
			"t.AttentionCount asc", "t.BrowseCount desc", "t.BrowseCount asc", "t.TransferAmount desc", "t.TransferAmount asc" };

	public static String getConfigValue(String key)
	{
		return (String) Constant.Config.get(key);
	}
}


(2).BaseMessage.java

public class BaseMessage
{
	
	// 接收方帐号(收到的OpenID)
	private String ToUserName;
	
	// 开发者微信号
	private String FromUserName;
	
	// 消息创建时间 (整型)
	private long CreateTime;
	
	// 消息类型(text/music/news)
	private String MsgType;
	
	// 位0x0001被标志时,星标刚收到的消息
	private int FuncFlag;
	
	public String getToUserName()
	{
		return ToUserName;
	}
	
	public void setToUserName(String toUserName)
	{
		ToUserName = toUserName;
	}
	
	public String getFromUserName()
	{
		return FromUserName;
	}
	
	public void setFromUserName(String fromUserName)
	{
		FromUserName = fromUserName;
	}
	
	public long getCreateTime()
	{
		return CreateTime;
	}
	
	public void setCreateTime(long createTime)
	{
		CreateTime = createTime;
	}
	
	public String getMsgType()
	{
		return MsgType;
	}
	
	public void setMsgType(String msgType)
	{
		MsgType = msgType;
	}
	
	public int getFuncFlag()
	{
		return FuncFlag;
	}
	
	public void setFuncFlag(int funcFlag)
	{
		FuncFlag = funcFlag;
	}
	
}

(3).Button.java

public class Button
{
	
	private String name;
	
	private String type;
	
	private String key;
	
	private String url;
	
	private List<Button> sub_button;
	
	
	public List<Button> getSub_button()
	{
		return sub_button;
	}

	
	public void setSub_button(List<Button> sub_button)
	{
		this.sub_button = sub_button;
	}

	public String getName()
	{
		return name;
	}
	
	public void setName(String name)
	{
		this.name = name;
	}
	
	public String getType()
	{
		return type;
	}
	
	public void setType(String type)
	{
		this.type = type;
	}
	
	public String getKey()
	{
		return key;
	}
	
	public void setKey(String key)
	{
		this.key = key;
	}
	
	public String getUrl()
	{
		return url;
	}
	
	public void setUrl(String url)
	{
		this.url = url;
	}
}

(4).CoreService.java

public class CoreService {

	public static JsSign generaSing(String jS_Ticket, JsSign jsSign)
	{
		Map<String, String> map = Sign.sign(jS_Ticket, jsSign.getUrl());
		jsSign.setNoncestr(map.get("nonceStr"));
		jsSign.setTimestamp(map.get("timestamp"));
		jsSign.setSign(map.get("signature"));
		// System.out.println(jsSign.getSign());
		return jsSign;
	}
}

(5).HttpRequest.java

这个类你会用到 


这几个jar包。后面会给出下载链接

http://download.csdn.net/detail/u013929107/9293293

public class HttpRequest
{
	
	public static Map<String, Object> sendHttp(String url,
			Map<String, String> param)
		throws JsonParseException, JsonMappingException, IOException
	{
		String result = "";
		InputStream in = null;
		try
		{
			if (param != null && param.size() > 0)
			{
				Iterator<String> it = param.keySet().iterator();
				int cnt = 0;
				while (it.hasNext())
				{
					String key = it.next();
					if (cnt == 0)
					{
						url += "?" + key + "=" + param.get(key);
					}
					else
					{
						url += "&" + key + "=" + param.get(key);
					}
					cnt++;
				}
			}
			URL realUrl = new URL(url);
			// 打开和URL之间的连接
			URLConnection connection = realUrl.openConnection();
			// 建立实际的连接
			connection.connect();
			// 定义 BufferedReader输入流来读取URL的响应
			in = connection.getInputStream();
			String line;
			byte buffer[] = new byte[1024];
			while ((in.read(buffer, 0, 1024) != -1) && (1024 > 0))
			{
				result += new String(buffer, "UTF-8");
			}
		}
		catch (Exception e)
		{
			System.out.println("发送GET请求出现异常!" + e);
			e.printStackTrace();
		}
		// 使用finally块来关闭输入流
		finally
		{
			try
			{
				if (in != null)
				{
					in.close();
				}
			}
			catch (Exception e2)
			{
				e2.printStackTrace();
			}
		}
		return new ObjectMapper().readValue(result, Map.class);
	}
	
	public static Map<String, Object> sendHttpJson(String url,
			Map<String, String> param, Object json)
		throws JsonParseException, JsonMappingException, IOException
	{
		String result = "";
		InputStream in = null;
		OutputStream out = null;
		try
		{
			if (param != null && param.size() > 0)
			{
				Iterator<String> it = param.keySet().iterator();
				int cnt = 0;
				while (it.hasNext())
				{
					String key = it.next();
					if (cnt == 0)
					{
						url += "?" + key + "=" + param.get(key);
					}
					else
					{
						url += "&" + key + "=" + param.get(key);
					}
					cnt++;
				}
			}
			URL realUrl = new URL(url);
			// 打开和URL之间的连接
			URLConnection connection = realUrl.openConnection();
			connection.setDoOutput(true);
			connection.setDoInput(true);
			// 建立实际的连接
			connection.connect();
			out = connection.getOutputStream();
			ObjectMapper objectMapper = new ObjectMapper();
			objectMapper.writeValue(out, json);
			// 定义 BufferedReader输入流来读取URL的响应
			in = connection.getInputStream();
			byte buffer[] = new byte[1024];
			while ((in.read(buffer, 0, 1024) != -1) && (1024 > 0))
			{
				result += new String(buffer, "UTF-8");
			}
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		// 使用finally块来关闭输入流
		finally
		{
			try
			{
				if (out != null)
					out.close();
				if (in != null)
				{
					in.close();
				}
			}
			catch (Exception e2)
			{
				e2.printStackTrace();
			}
		}
		return new ObjectMapper().readValue(result, Map.class);
	}
	
	public static void main(String[] s)
		throws IOException
	{
		String result = "";
		InputStream in = null;
		OutputStream out = null;
		String param = "{\"userId\":\"0\"\"projectName\":\"\"\"pageNo\":\"1\"\"pageSize\":\"10\"\"typeId\":\"\"\"learnPrice\":\"\"\"areaId\":\"\"}";
		try
		{
			URL realUrl = new URL(
					"http://localhost:8080/rrcpro-api/projectService/GetProjectListForApp");
			// 打开和URL之间的连接
			URLConnection connection = realUrl.openConnection();
			connection.setDoOutput(true);
			connection.setDoInput(true);
			// 建立实际的连接
			connection.connect();
			out = connection.getOutputStream();
			out.write(param.getBytes());
			// 定义 BufferedReader输入流来读取URL的响应
			in = connection.getInputStream();
			byte buffer[] = new byte[1024];
			while ((in.read(buffer, 0, 1024) != -1) && (1024 > 0))
			{
				result += new String(buffer, "UTF-8");
			}
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		// 使用finally块来关闭输入流
		finally
		{
			try
			{
				if (out != null)
					out.close();
				if (in != null)
				{
					in.close();
				}
			}
			catch (Exception e2)
			{
				e2.printStackTrace();
			}
		}
		System.out.println(result);
	}
}

(6).JsSign.java

public class JsSign {

	
	private String noncestr;
	
	private String timestamp;
	
	private String url;
	
	private String sign;
	
	public String getSign()
	{
		return sign;
	}
	
	public void setSign(String sign)
	{
		this.sign = sign;
	}
	
	public String getNoncestr()
	{
		return noncestr;
	}
	
	public void setNoncestr(String noncestr)
	{
		this.noncestr = noncestr;
	}
	
	public String getTimestamp()
	{
		return timestamp;
	}
	
	public void setTimestamp(String timestamp)
	{
		this.timestamp = timestamp;
	}
	
	public String getUrl()
	{
		return url;
	}
	
	public void setUrl(String url)
	{
		this.url = url;
	}


}

(7).Sign.java

public class Sign
{
	
	public static Map<String, String> sign(String jsapi_ticket, String url)
	{
		Map<String, String> ret = new HashMap<String, String>();
		String nonce_str = create_nonce_str();
		String timestamp = create_timestamp();
		String string1;
		String signature = "";
		
		// 注意这里参数名必须全部小写,且必须有序
		string1 = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonce_str
				+ "×tamp=" + timestamp + "&url=" + url;
//		System.out.println(string1);
		
		try
		{
			MessageDigest crypt = MessageDigest.getInstance("SHA-1");
			crypt.reset();
			crypt.update(string1.getBytes("UTF-8"));
			signature = byteToHex(crypt.digest());
		}
		catch (NoSuchAlgorithmException e)
		{
			e.printStackTrace();
		}
		catch (UnsupportedEncodingException e)
		{
			e.printStackTrace();
		}
		
		ret.put("url", url);
		ret.put("jsapi_ticket", jsapi_ticket);
		ret.put("nonceStr", nonce_str);
		ret.put("timestamp", timestamp);
		ret.put("signature", signature);
		
		return ret;
	}
	
	private static String byteToHex(final byte[] hash)
	{
		Formatter formatter = new Formatter();
		for (byte b : hash)
		{
			formatter.format("%02x", b);
		}
		String result = formatter.toString();
		formatter.close();
		return result;
	}
	
	private static String create_nonce_str()
	{
		return UUID.randomUUID().toString();
	}
	
	private static String create_timestamp()
	{
		return Long.toString(System.currentTimeMillis() / 1000);
	}
}


8.config.properties

AppID=wx859f2cyyttta84f
AppSecret=98db57c7c70dsasaaaeea3e100aadd
FIELD_URL=http://192.168.20.204:8080/


我的目录结构



现在我们可以将它部署到服务器并且开启。

当你的日志出现:

加载AccessToken:3klgdSjQQqTHzKjOrUDo3QZVxwJM0Uo19pMIr3SlL-LHDufRn333CUh5pC26U-NQQPt5mwzIMYBF6OR3ZiRkgl-goytkMiAQED7fsjwMUdwWDAjAJAMTQ
加载JS_Ticket:kgt8ON7yVITDhtdwci0qedQJ_QbFkUyhwVy9E79NbwyM_KUXk7xyE0w96ppsMIPSHC-u-1SexIaf9UC7e5uLsA
jsSign:http://192.168.20.204:8080/rrcpro-front/u/shellInvate.action
jsSign:e0bf094d1e6f5ec9e92a45e28ba937bb0700db8b
jsSign:318ef767-d750-4671-8861-ef4b2f64ff42
jsSign:1448265993

等内容说明你已经成功与微信交互。





  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值