微信公众号的配置方法

1.把项目部署到 服务器 

2.配置


先获取 到 APPID  APPSECRET 和  token  就是令牌 (qin66)


ip地址/RepairSystem/weixindevelop  地址用来验证 


源码 weixindevelop 的路径 就是 下面这个class


package com.bytech.controller;

import com.bytech.pojo.AccessToken;
import com.bytech.pojo.Button;
import com.bytech.pojo.CommonButton;
import com.bytech.pojo.ComplexButton;
import com.bytech.pojo.Menu;
import com.bytech.pojo.ViewButton;
import com.bytech.utiltool.SignUtil;
import com.bytech.utiltool.WeixinUtil;
import com.jfinal.core.Controller;

public class WeiXinServerController extends Controller {

	public WeiXinServerController() {
		// TODO Auto-generated constructor stub
	}
	public void index()
	{
		String method = this.getRequest().getMethod();
		if("GET".equals(method))
		{
			WeiXinGet();
		}
		if("POST".equals(method))
		{
			WeiXinPost();
		}
	}
	private void WeiXinGet()
	{
		// 微信加密签名  
        String signature = this.getPara("signature");  
        // 时间戳  
        String timestamp = this.getPara("timestamp");  
        // 随机数  
        String nonce =     this.getPara("nonce");  
        // 随机字符串  
        String echostr =   this.getPara("echostr");  
   
        // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败  
        if (SignUtil.checkSignature(signature, timestamp, nonce)) 
        {  
        	  AccessToken accessToken = WeixinUtil.getAccessToken(WeixinUtil.APPID, WeixinUtil.APPSECRET);
        	  CommonButton b1 = new CommonButton();
        	  b1.setName("点我试试");
        	  b1.setType("click");
        	  b1.setKey("1");
        	  ViewButton b31 = new ViewButton();
        	  ViewButton b32 = new ViewButton();
        	  ViewButton b33 = new ViewButton();
        	  b31.setName(" 客户登录 ");
        	  b31.setType("view");
        	  b31.setUrl("http://(IP地址)/RepairSystem/wx_cusmenu.html");
        	  b32.setName(" 员工登录 ");
        	  b32.setType("view");
        	  b32.setUrl("http://(IP地址)/RepairSystem/wx_repmenu.html");
        	  b33.setName(" 驻场登录 ");
        	  b33.setType("view");
        	  b33.setUrl("http://(IP地址)/RepairSystem/wx_boongIndex.html");
        	  Button[] btns3 = {b31,b32,b33};
        	  ComplexButton btn3 = new ComplexButton();
        	  btn3.setName("登录");
        	  btn3.setSub_button(btns3);
        	  
        	  Button[] btns = {b1,btn3};
        	  Menu menu = new Menu();
        	  menu.setButton(btns);
              WeixinUtil.createMenu(menu, accessToken.getToken());
              this.renderText(echostr);
        }
        else
        {
        	WeiXinPost();

        }
	}
	
	private void WeiXinPost()
	{
    	String respMessage = Service.processRequest(this.getRequest());
    	this.renderText(respMessage);
	}
}



package com.bytech.utiltool;

import java.security.MessageDigest;  
import java.security.NoSuchAlgorithmException;  
import java.util.Arrays;  
  
public class SignUtil {
	// 与接口配置信息中的Token要一致  
    private static String token = "qin66";  
  
    /** 
     * 验证签名 
     *  
     * @param signature 
     * @param timestamp 
     * @param nonce 
     * @return 
     */  
    public static boolean checkSignature(String signature, String timestamp, String nonce) {  
        String[] arr = new String[] { token, timestamp, nonce };  
        // 将token、timestamp、nonce三个参数进行字典序排序  
        Arrays.sort(arr);  
        StringBuilder content = new StringBuilder();  
        for (int i = 0; i < arr.length; i++) {  
            content.append(arr[i]);  
        }  
        MessageDigest md = null;  
        String tmpStr = null;  
  
        try {  
            md = MessageDigest.getInstance("SHA-1");  
            // 将三个参数字符串拼接成一个字符串进行sha1加密  
            byte[] digest = md.digest(content.toString().getBytes());  
            tmpStr = byteToStr(digest);  
        } catch (NoSuchAlgorithmException e) {  
            e.printStackTrace();  
        }  
  
        content = null;  
        // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信  
        return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;  
    }  
  
    /** 
     * 将字节数组转换为十六进制字符串 
     *  
     * @param byteArray 
     * @return 
     */  
    private static String byteToStr(byte[] byteArray) {  
        String strDigest = "";  
        for (int i = 0; i < byteArray.length; i++) {  
            strDigest += byteToHexStr(byteArray[i]);  
        }  
        return strDigest;  
    }  
  
    /** 
     * 将字节转换为十六进制字符串 
     *  
     * @param mByte 
     * @return 
     */  
    private static String byteToHexStr(byte mByte) {  
        char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };  
        char[] tempArr = new char[2];  
        tempArr[0] = Digit[(mByte >>> 4) & 0X0F];  
        tempArr[1] = Digit[mByte & 0X0F];  
  
        String s = new String(tempArr);  
        return s;  
    }  
}



package com.bytech.utiltool;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ConnectException;
import java.net.URL;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.bytech.pojo.AccessToken;
import com.bytech.pojo.Menu;

import net.sf.json.JSONException;
import net.sf.json.JSONObject;  

public class WeixinUtil {
	private static Logger log = LoggerFactory.getLogger(WeixinUtil.class);  
	public static String APPID = "";
	public static String APPSECRET = "";
    /** 
     * 发起https请求并获取结果 
     *  
     * @param requestUrl 请求地址 
     * @param requestMethod 请求方式(GET、POST) 
     * @param outputStr 提交的数据 
     * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值) 
     */  
    public static JSONObject httpRequest(String requestUrl, String requestMethod, String outputStr) {  
        JSONObject jsonObject = null;  
        StringBuffer buffer = new StringBuffer();  
        try {  
            // 创建SSLContext对象,并使用我们指定的信任管理器初始化  
            TrustManager[] tm = { new MyX509TrustManager() };  
            SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");  
            sslContext.init(null, tm, new java.security.SecureRandom());  
            // 从上述SSLContext对象中得到SSLSocketFactory对象  
            SSLSocketFactory ssf = sslContext.getSocketFactory();  
  
            URL url = new URL(requestUrl);  
            HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();  
            httpUrlConn.setSSLSocketFactory(ssf);  
  
            httpUrlConn.setDoOutput(true);  
            httpUrlConn.setDoInput(true);  
            httpUrlConn.setUseCaches(false);  
            // 设置请求方式(GET/POST)  
            httpUrlConn.setRequestMethod(requestMethod);  
  
            if ("GET".equalsIgnoreCase(requestMethod))  
                httpUrlConn.connect();  
  
            // 当有数据需要提交时  
            if (null != outputStr) {  
                OutputStream outputStream = httpUrlConn.getOutputStream();  
                // 注意编码格式,防止中文乱码  
                outputStream.write(outputStr.getBytes("UTF-8"));  
                outputStream.close();  
            }  
  
            // 将返回的输入流转换成字符串  
            InputStream inputStream = httpUrlConn.getInputStream();  
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");  
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);  
  
            String str = null;  
            while ((str = bufferedReader.readLine()) != null) {  
                buffer.append(str);  
            }  
            bufferedReader.close();  
            inputStreamReader.close();  
            // 释放资源  
            inputStream.close();  
            inputStream = null;  
            httpUrlConn.disconnect();  
            jsonObject = JSONObject.fromObject(buffer.toString());  
        } catch (ConnectException ce) {  
            ce.printStackTrace(); 
        } catch (Exception e) {  
            e.printStackTrace();
        }  
        return jsonObject;  
    }  
    
    
    
   // 获取access_token的接口地址(GET) 限200(次/天)  
    public final static String access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";  
    /** 
     * 获取access_token 
     * @param appid 凭证 
     * @param appsecret 密钥 
     * @return 
     */  
    public static AccessToken getAccessToken(String appid, String appsecret) {  
        AccessToken accessToken = null;  
      
        String requestUrl = access_token_url.replace("APPID", appid).replace("APPSECRET", appsecret);  
        JSONObject jsonObject = httpRequest(requestUrl, "GET", null);  
        // 如果请求成功  
        if (null != jsonObject) {
            try {  
                accessToken = new AccessToken();  
                accessToken.setToken(jsonObject.getString("access_token"));  
                accessToken.setExpiresIn(jsonObject.getInt("expires_in"));  
            } catch (JSONException e) {  
                accessToken = null;  
                // 获取token失败  
                log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));  
            }  
        }  
        return accessToken;  
    }  
    
 // 菜单创建(POST) 限100(次/天)  
    public static String menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";  
    /** 
     * 创建菜单 
     * @param menu 菜单实例 
     * @param accessToken 有效的access_token 
     * @return 0表示成功,其他值表示失败 
     */  
    public static int createMenu(Menu menu, String accessToken) {  
        int result = 0;
      
        // 拼装创建菜单的url  
        String url = menu_create_url.replace("ACCESS_TOKEN", accessToken);  
        // 将菜单对象转换成json字符串  
        String jsonMenu = JSONObject.fromObject(menu).toString();  
        // 调用接口创建菜单  
        JSONObject jsonObject = httpRequest(url, "POST", jsonMenu);  
      
        if (null != jsonObject) {  
            if (0 != jsonObject.getInt("errcode")) {  
                result = jsonObject.getInt("errcode");  
                log.info("创建菜单失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));  
            }  
        }  
      
        return result;  
    }  
    
    //删除菜单
    public final static String menu_delete_url = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN";
    /** 
     * 删除菜单 
     * @param accessToken 有效的access_token 
     * @return 0表示成功,其他值表示失败 
     */  
    public static int deleteMenu(String accessToken) {  
        int result = 0;
      
        // 拼装创建菜单的url  
        String url = menu_delete_url.replace("ACCESS_TOKEN", accessToken);  
        // 调用接口创建菜单  
        JSONObject jsonObject = httpRequest(url, "GET", null);  
      
        if (null != jsonObject) {
            if (0 != jsonObject.getInt("errcode")) {  
                result = jsonObject.getInt("errcode");  
                log.info("创建菜单失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));  
            }  
        }
        return result;  
    }
    //获取素材列表 post url
    public final static String get_material_list = "https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=ACCESS_TOKEN";
    /** 
     * 创建菜单 
     * @param menu 菜单实例 
     * @param accessToken 有效的access_token 
     * @return 0表示成功,其他值表示失败 
     */  
    public static int getMaterial(String type , String count,String accessToken) {  
        int result = 0;
      
        // 拼装创建菜单的url  
        String url = get_material_list.replace("ACCESS_TOKEN", accessToken);  
        // 将菜单对象转换成json字符串  
        String   reqstr = "{\"type\":"+type+",\"offset\":0,\"count\":"+count+"}";
        // 调用接口创建菜单  
        JSONObject jsonObject = httpRequest(url, "POST", reqstr);  
      
        if (null != jsonObject) {  
            if (0 != jsonObject.getInt("item_count")) {  
                 
            }  
        }  
      
        return result;  
    }  
}




ps:我自己能看懂。










猜你喜欢

转载自blog.csdn.net/qq_36073929/article/details/78502171
今日推荐