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


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 相关文章推荐
一段多浏览器的&quot;复制到剪贴板&quot;javascript代码
Mar 27 Javascript
DOM 基本方法
Jul 18 Javascript
JS实现字体选色板实例代码
Nov 20 Javascript
JavaScript变量声明详解
Nov 27 Javascript
JavaScript操作cookie类实例
Mar 31 Javascript
简介JavaScript中的setHours()方法的使用
Jun 11 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
Nov 24 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
Aug 24 Javascript
Node.js进阶之核心模块https入门
May 23 Javascript
webpack4简单入门实例
Sep 06 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
May 22 Javascript
js中switch语句的学习笔记
Mar 25 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
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
如何离线执行php任务
2017/02/21 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
教你如何使用PHP输出中文JSON字符串
2014/05/22 Javascript
html的DOM中document对象forms集合用法实例
2015/01/21 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
2015/12/03 Javascript
基于jQuery的ajax方法封装
2016/07/14 Javascript
js注入 黑客之路必备!
2016/09/14 Javascript
jQuery实现的右下角广告窗体跟随效果示例
2016/09/16 Javascript
jQuery实现select模糊查询(反射机制)
2017/01/14 Javascript
HTML5开发Kinect体感游戏的实例应用
2017/09/18 Javascript
React-Native左右联动List的示例代码
2017/09/21 Javascript
Vue-cli配置打包文件本地使用的教程图解
2018/08/02 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
2019/11/18 Javascript
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
js实现简单扫雷
2020/11/27 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
python ElementTree 基本读操作示例
2009/04/09 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
详解Python_shutil模块
2019/03/15 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
Python Map 函数的使用
2020/08/28 Python
python连接mysql数据库并读取数据的实现
2020/09/25 Python
Scrapy 配置动态代理IP的实现
2020/09/28 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
加拿大当代时尚服饰、配饰和鞋类专业零售商和制造商:LE CHÂTEAU
2017/10/06 全球购物
俄罗斯购买自行车网站:Vamvelosiped
2021/01/29 全球购物
浙大网新C/C++面试解惑
2015/05/27 面试题
大学生学习生活的自我评价
2013/11/01 职场文书
体育教师自我鉴定
2014/02/12 职场文书
养牛场项目建议书
2014/05/13 职场文书
空气的环保标语
2014/06/12 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书