1. 程式人生 > >微信公眾號開發工具類

微信公眾號開發工具類

package jvm;
import sun.net.www.http.HttpClient;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import net.sf.json.JSONObject;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import 
org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.RequestEntity; import org.apache.commons.httpclient.methods.StringRequestEntity; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node;
import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import javax.servlet.http.HttpServletRequest; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import java.io.*;
import java.net.HttpURLConnection; import java.net.URL; import java.util.HashMap; import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; /** * Created by HuiSheng1 on 2016/12/15. */ public class WeiXinUtil { public static final String APPID = "APPID"; public static final String SECRET = "SECRET"; public static final int TIME_WAIT = 10 * 1000; public static long expires_in = 7200; public static long lastSystemCurrentTimeMillis = System.currentTimeMillis(); public static String access_token;// 介面呼叫 public static long lastSystemCurrentTimeMillisOfPage = System.currentTimeMillis(); public static long expires_in_page = 7200; public static String access_token_page; // 網頁授權用 public static long lastSystemCurrentTimeMillisOfPageRefresh = System.currentTimeMillis(); public static long expires_in_refresh = 30 * 24 * 60 * 60; // 30天過期,單位秒 public static String refresh_token;// 網頁授權重新整理用 public static String getAccessToken() { long timeLeft = System.currentTimeMillis() - lastSystemCurrentTimeMillis if (access_token == null || (timeLeft > expires_in * 1000 - TIME_WAIT && timeLeft < expires_in * 1000)) { String at = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + APPID + "&secret=" + SECRET; String result = getDataFromUrl(at); JsonSlurper json = new JsonSlurper().parseText(result); access_token = json.getAt("access_token").toString(); expires_in = Long.parseLong(json.getAt("expires_in").toString()); lastSystemCurrentTimeMillis = System.currentTimeMillis(); } return access_token; } public static String getAccessTokenOfPage(String code) { // 通過code換取網頁授權access_token String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + APPID + "&secret=" + SECRET + "&code=" + code + "&grant_type=authorization_code" String result = getDataFromUrl(url); json = new JsonSlurper().parseText(result); access_token_page = json.getAt("access_token").toString(); expires_in_page = Long.parseLong(json.getAt("expires_in").toString()); refresh_token = json.getAt("refresh_token").toString(); lastSystemCurrentTimeMillisOfPage = System.currentTimeMillis(); lastSystemCurrentTimeMillisOfPageRefresh = System.currentTimeMillis(); // return refresh_token; } /** * 建立選單 */ public static void createMenu() { String access_token = getAccessToken(); //建立新選單 String menu = "";//要建立的微信自定義選單 String menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN"; menu_create_url = menu_create_url.replace("ACCESS_TOKEN", access_token); String result2 = getDataFromUrl(menu_create_url, "POST", menu); System.out.print(result2); } //執行訪問微信介面 public static String getDataFromUrl(String url, String methods, String menu) { String result = ""; try { HttpClient client = new HttpClient(); if ("GET".equals(methods)) { HttpMethod method = new GetMethod(url); client.executeMethod(method); result = method.getResponseBodyAsString(); method.releaseConnection(); } else { PostMethod method = new PostMethod(url); method.setRequestHeader("Content-Type", "text/xml;charset=utf8"); RequestEntity requestEntity = new StringRequestEntity(menu, "text/xml", "utf8"); method.setRequestEntity(requestEntity); client.executeMethod(method); InputStream ins = method.getResponseBodyAsStream(); BufferedReader br = new BufferedReader(new InputStreamReader(ins, "UTF-8")); StringBuffer sbf = new StringBuffer(); String line = null; while ((line = br.readLine()) != null) { sbf.append(line); } br.close(); result = sbf.toString(); } } catch (IOException e) { } return result; } public static String getWxAeecssToken(String code, String appid, String secret) { String openid_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code"; openid_url = openid_url.replaceAll("APPID", appid).replaceAll("SECRET", secret).replaceAll("CODE", code); String result = getDataFromUrl(openid_url, "GET", ""); // System.out.println("openid result: "+result); JSONObject json = new JSONObject().fromObject(result); return json.get("access_token").toString(); } //獲取使用者基本資訊,暫時只獲取是否關注公眾號 public static String getWxUserInfo(String access_token, String openid) { String userInfo_url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN"; userInfo_url = userInfo_url.replaceAll("ACCESS_TOKEN", access_token).replaceAll("OPENID", openid); String result = getDataFromUrl(userInfo_url, "GET", ""); JSONObject json = new JSONObject().fromObject(result); //獲取其他基本資訊的時候需要先判斷是否關注,即subscribe是否為0,如果subscribe為0,則只能得到subscribe和openid,獲取其他資訊會報空指標 return json.get("subscribe").toString(); } public static void main(String[] args) { createMenu(); } }