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


Posted in Javascript onJanuary 08, 2020

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

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

2.在此处获得

appid 和 secret :https://developers.weixin.qq.com/sandbox

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

如图

3.小程序端

http://127.0.0.1:8080/jeecg-boot 这一段是自己的访问路径

//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了

总结

以上所述是小编给大家介绍的微信小程序静默登入的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
javascript-简单的日历实现及Date对象语法介绍(附图)
May 30 Javascript
IE6已终止操作问题的2种情况及解决
Apr 23 Javascript
JS获取CSS样式(style/getComputedStyle/currentStyle)
Jan 19 Javascript
jQuery实现的分子运动小球碰撞效果
Jan 27 Javascript
js改变style样式和css样式的简单实例
Jun 28 Javascript
JS简单生成两个数字之间随机数的方法
Aug 03 Javascript
解决node.js安装包失败的几种方法
Sep 02 Javascript
jQuery模拟爆炸倒计时功能实例代码
Aug 21 jQuery
JS原生带缩略图的图片切换效果
Oct 10 Javascript
Vue加载json文件的方法简单示例
Jan 28 Javascript
Vue从TodoList中学父子组件通信
Feb 05 Javascript
vuex(vue状态管理)的特殊应用案例分享
Mar 03 Javascript
微信小程序wxs实现吸顶效果
Jan 08 #Javascript
微信小程序实现吸顶特效
Jan 08 #Javascript
nuxt配置通过指定IP和端口访问的实现
Jan 08 #Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
Jan 08 #Javascript
js判断浏览器的环境(pc端,移动端,还是微信浏览器)
Dec 24 #Javascript
你可能从未使用过的11+个JavaScript特性(小结)
Jan 08 #Javascript
你知道JavaScript Symbol类型怎么用吗
Jan 08 #Javascript
You might like
PHP中的加密功能
2006/10/09 PHP
PHP 字符串操作入门教程
2006/12/06 PHP
PHP 学习路线与时间表
2010/02/21 PHP
PHP中extract()函数的定义和用法
2012/08/17 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
PHP如何将XML转成数组
2016/04/04 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
php抽象类和接口知识点整理总结
2019/08/02 PHP
json 入门基础教程 推荐
2009/10/31 Javascript
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
关于document.cookie的使用javascript
2010/10/29 Javascript
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
2018/09/07 Javascript
vue的hash值原理也是table切换实例代码
2020/12/14 Vue.js
[38:23]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第二场 11.01
2020/11/02 DOTA
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
2014/11/19 Python
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
理解python中生成器用法
2017/12/20 Python
Django中多种重定向方法使用详解
2019/07/17 Python
python使用原始套接字发送二层包(链路层帧)的方法
2019/07/22 Python
使用OpenCV实现仿射变换—旋转功能
2019/08/29 Python
python中return的返回和执行实例
2019/12/24 Python
Python实现AI换脸功能
2020/04/10 Python
Python 如何批量更新已安装的库
2020/05/26 Python
Python如何创建装饰器时保留函数元信息
2020/08/07 Python
东方红海科技面试题软件测试方面
2012/02/08 面试题
宗教学大学生职业生涯规划范文
2014/02/08 职场文书
《在山的那边》教学反思
2014/02/23 职场文书
园艺师求职信
2014/03/10 职场文书
卫生厅领导班子党的群众路线教育实践活动整改措施
2014/09/20 职场文书
政审证明材料
2015/06/19 职场文书
2016年六一儿童节开幕词
2016/03/04 职场文书
html css3不拉伸图片显示效果
2021/06/07 HTML / CSS