小程序获取openid

大体流程是小程序通过登录获取code(用户登录凭证,官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/api/wx.login.html ),然后访问自己的服务器,注意是自己的服务器,在服务器端按照code2Session的说明返回从服务器端获得的openid给小程序前端(官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/api/code2Session.html)


小程序端代码:

//***.js
wx.login({
        success(res) {
          if (res.code) {
            wx.request({
              url: '自己的服务器地址',
              data: {
                code: res.code
              },
              success: function(res) {
                console.log(res.data.openid)
               //服务器端获得是openid就是一个键值对,这里没有在服务器端处理直接
               //返回前端处理,可以先在服务器端处理只返回openid也是可以的
              },
              fail: function() {
                console.log("请求失败")
              }
            })
          } else {
            console.log('登录失败!')
          }
        }
      })

服务器端(javaweb):

//code就是小程序从前端传过来的
private String login(String code) throws Exception {
       String AppID = "自己的AppID";
       String AppSecret="自己的AppSecret";//这两个都可以从微信公众平台中查找
		String url = "https://api.weixin.qq.com/sns/jscode2session?appid="
				+ AppID + "&secret=" + AppSecret + "&js_code="
				+ code + "&grant_type=authorization_code";
		URL reqURL = new URL(url);
		HttpsURLConnection openConnection = (HttpsURLConnection) reqURL
				.openConnection();
		openConnection.setConnectTimeout(10000);
		//这里我感觉获取openid的时间比较长,不过也可能是我网络的问题,
		//所以设置的响应时间比较长
		openConnection.connect();
		InputStream in = openConnection.getInputStream();

		StringBuilder builder = new StringBuilder();
		BufferedReader bufreader = new BufferedReader(new InputStreamReader(in));
		for (String temp = bufreader.readLine(); temp != null; temp = bufreader
				.readLine()) {
			builder.append(temp);
		}
		
		String result = builder.toString();
		in.close();
		openConnection.disconnect();
		return result;
		//result就是包含openid的键值对,返回给小程序前端即可
	}

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