微信小程序静默登录的实现代码
程序员文章站
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了
总结
以上所述是小编给大家介绍的微信小程序静默登入的实现代码,希望对大家有所帮助
下一篇: 简介AngularJS的视图功能应用