微信小程序java后台获取openid

先看官方的流程图 

分为小程序,开发者服务器(java端),微信接口服务(获取openid的接口) 

小程序端:

  var that = this
  wx.login({
        success: function (res) {
          var code = res.code;//发送给服务器的code

              if (code) {
                wx.request({
                  url: that.globalData.ip+'/GetOpenId',//自己的java后台地址
                  data: {
                    code: code
                  },
                  header: {
                    'content-type': 'application/json'
                  },
                  success: function (res) {
                    console.log(res);
                    console.log("获取openid",res)
                  }
                })
              }
              else {
                console.log("获取用户登录态失败!");
              }
        },
        fail: function (error) {
          console.log('login failed ' + error);
        }
  })  

java端:

这里分为两个部分 :1,一个工具类(GetOpenIdUtil.java):将获取到的code 和 session以及appid 按要求结合在一起并查询openid

                                  2,实际处理类(GetOpenId):接受数据,进行处理,返回小程序数据。

工具类(GetOpenIdUtil.java)

package com.util;


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
 
/**
 *
 */
public class GetOpenIdUtil {
	
	 public String getopenid(String appid,String code,String secret) {  
	        BufferedReader in = null;  
	        //appid和secret是开发者分别是小程序ID和小程序密钥,开发者通过微信公众平台-》设置-》开发设置就可以直接获取,
	        String url="https://api.weixin.qq.com/sns/jscode2session?appid="
	        +appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code";
	        try {  
				URL weChatUrl = new URL(url);  
	            // 打开和URL之间的连接  
	            URLConnection connection = weChatUrl.openConnection();  
	            // 设置通用的请求属性  
	            connection.setConnectTimeout(5000);  
	            connection.setReadTimeout(5000);  
	            // 建立实际的连接  
	            connection.connect();  
	            // 定义 BufferedReader输入流来读取URL的响应  
	            in = new BufferedReader(new InputStreamReader(connection.getInputStream()));  
	            StringBuffer sb = new StringBuffer();  
	            String line;  
	            while ((line = in.readLine()) != null) {  
	                sb.append(line);  
	            }  
	            return sb.toString();  
	        } catch (Exception e1) {  
	        	throw new RuntimeException(e1);
	        }  
	        // 使用finally块来关闭输入流  
	        finally {  
	            try {  
	                if (in != null) {  
	                    in.close();  
	                }  
	            } catch (Exception e2) {  
	                e2.printStackTrace();  
	            }  
	        }  
	    }  
}

实际处理类(GetOpenId)

采用Servlet(java web 技术)和 小程序通信 (不知道可以学习下再用)



/**
 * Servlet implementation class GetOpenId
 */
@WebServlet("/GetOpenId")
public class GetOpenId extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public GetOpenId() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//response.getWriter().append("Served at: ").append(request.getContextPath());
		doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub  GetOpenId
		
		response.setContentType("text/html;charset=utf-8");
        /*设置响应头允许ajax跨域访问*/
		response.setHeader("Access-Control-Allow-Origin", "*");
		
		/* 星号表示所有的异域请求都可以接受, */
        response.setHeader("Access-Control-Allow-Methods", "GET,POST");
        
        
      //获取微信小程序get的参数值并打印
        String code = request.getParameter("code");
     
        //参数
        String appid = "";//自己找自己的
        // 记得发给别人前删掉这个
        String secret = "";//自己找自己的
        
        // 调用方位微信服务器工具方法 
        

		GetOpenIdUtil getopenid=new GetOpenIdUtil();
		//调用访问微信服务器工具方法,传入三个参数获取带有openid、session_key的json字符串
		String jsonId=getopenid.getopenid(appid,code,secret);
		JSONObject jsonObject = JSONObject.fromObject(jsonId); 
		//从json字符串获取openid和session_key
		String openid=jsonObject.getString("openid");
		String session_key=jsonObject.getString("session_key");
		
		System.out.println("openid"+openid);
		
		//返回值给微信小程序
		response.setCharacterEncoding("UTF-8");
        Writer out = response.getWriter();
        //out.write("进入后台了"+json);
        
        out.write(jsonObject.toString());
        out.flush();

		
		
	}

}

就OK了,有什么不了解的地方请留言 我看到了会第一时间回复。

你可能感兴趣的:(微信小程序)