欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

微信小程序静默登录的实现代码

程序员文章站 2022-04-28 21:00:04
1.通过 wx.login获取 登录凭证(code) wx.login({ success: function (res) { console.log(res.code);...

1.通过 wx.login获取 登录凭证(code)

wx.login({ success: function (res) { console.log(res.code); } })

2.在此处获得

appid 和 secret :

微信小程序静默登录的实现代码

如图

3.小程序端

这一段是自己的访问路径

 //app.js
app({
 globaldata: {
 appid: '',
 appsecret: '',//
 openid: ''
 }
 onlaunch: function () {
 var that =this;
 // 登录
 wx.login({
  success: function (res) {
  console.log(res.code)
  wx.request({
   url: 'http://127.0.0.1:8080/jeecg-boot/hwork/hworklog/getopenidservlet',
   data: {
   appid: that.globaldata.appid,
   secret: that.globaldata.appsecret,
   js_code: res.code,
   grant_type: 'authorization_code'
   },
   method: 'post',
   header: {
   'content-type': 'application/x-www-form-urlencoded'
   },
   success: function (res) {
   console.log(res)
   //转json
   var j= json.parse(res.data.result)
   //获取到openid
   that.globaldata.openid = j.openid;
   }
  })
  }
 })
  }
})

4.后台代码

工具类

package org.jeecg.modules.hworkorder.util;
import java.io.bufferedreader;
import java.io.inputstream;
import java.io.inputstreamreader;
import java.io.printwriter;
import java.net.httpurlconnection;
import java.net.url;
public class wechatservice {
 /**
  * 调用对方接口方法
  * @param path 对方或第三方提供的路径
  * @param data 向对方或第三方发送的数据,大多数情况下给对方发送json数据让对方解析
  */
 public static string interfaceutil(string path,string data) {
  string openid="";
  try {
   url url = new url(path);
   //打开和url之间的连接
   httpurlconnection conn = (httpurlconnection) url.openconnection();
   printwriter out = null;
   //请求方式
//   conn.setrequestmethod("post");
//   //设置通用的请求属性
   conn.setrequestproperty("accept", "*/*");
   conn.setrequestproperty("connection", "keep-alive");
   conn.setrequestproperty("user-agent", "mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1)");
   //设置是否向httpurlconnection输出,设置是否从httpurlconnection读入,此外发送post请求必须设置这两个
   //最常用的http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在url字串后面,传递给servlet,
   //post与get的 不同之处在于post的参数不是放在url字串里面,而是放在http请求的正文内。
   conn.setdooutput(true);
   conn.setdoinput(true);
   //获取urlconnection对象对应的输出流
   out = new printwriter(conn.getoutputstream());
   //发送请求参数即数据
   out.print(data);
   //缓冲数据
   out.flush();
   //获取urlconnection对象对应的输入流
   inputstream is = conn.getinputstream();
   //构造一个字符流缓存
   bufferedreader br = new bufferedreader(new inputstreamreader(is));
   string str = "";
   while ((str = br.readline()) != null) {
    openid=str;
    system.out.println(str);
   }
   //关闭流
   is.close();
   //断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。
   //固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些。
   conn.disconnect();
   system.out.println("完整结束");
  } catch (exception e) {
   e.printstacktrace();
  }
  return openid;
 }
 public static string getopenid(string appid,string appsecret,string code) {
  //临时登录凭证
  string url = "https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+appsecret+"&js_code="+code+"&grant_type=authorization_code";
  string openid=interfaceutil(url, "");
  return openid;
 }
}
@restcontroller
@requestmapping("/hwork/hworklog")
@slf4j
public class hworklogcontrller {
@requestmapping(value = "/getopenidservlet", method = requestmethod.post)
 public result<string> getopenidservlet(httpservletrequest request, httpservletresponse response){
  result<string> result=new result<string>();
  response.setcontenttype("text/html;charset=utf-8");
  /* 设置响应头允许ajax跨域访问 */
  response.setheader("access-control-allow-origin", "*");
  /* 星号表示所有的异域请求都可以接受, */
  response.setheader("access-control-allow-methods", "get,post");
  //转成json数据
  string appid=request.getparameter("appid");
  string secret=request.getparameter("secret");
  string js_code=request.getparameter("js_code");
  if(appid!=null&&appid!=""&&secret!=null&&secret!=""&&js_code!=null&&js_code!=""){
   wechatservice getopenid=new wechatservice();
   string openid=getopenid.getopenid(appid,secret,js_code);
   result.setresult(openid);
   result.setmessage("后台收到并返回");
  }else{
   result.setmessage("参数为空");
   result.setsuccess(false);
  }
  return result;
 }
}

到这里 就能得到openid了

总结

以上所述是小编给大家介绍的微信小程序静默登入的实现代码,希望对大家有所帮助