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


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 相关文章推荐
让textarea控件的滚动条怎是位与最下方
Apr 20 Javascript
jquery简单实现滚动条下拉DIV固定在头部不动
Nov 25 Javascript
用js判断输入是否为中文的函数
Mar 10 Javascript
一个js过滤空格的小函数
Oct 10 Javascript
Eclipse引入jquery报错如何解决
Dec 01 Javascript
AngularJS表格详解及示例代码
Aug 17 Javascript
设置jquery UI 控件的大小方法
Dec 12 Javascript
jQuery中DOM节点删除之empty与remove
Jan 20 Javascript
Javascript基础回顾之(三) js面向对象
Jan 31 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
Jun 28 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
Aug 28 Javascript
JS实现的全选、全不选及反选功能【案例】
Feb 19 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/12/25 PHP
一个数据采集类
2007/02/14 PHP
textContent在Firefox下与innerText等效的属性
2007/05/12 Javascript
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
2012/07/26 Javascript
jquery+json实现数据列表分页示例代码
2013/11/15 Javascript
javascript弹出层输入框(示例代码)
2013/12/11 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
2014/06/05 Javascript
JS长整型精度问题实例分析
2015/01/13 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
2015/12/08 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
Vue基于NUXT的SSR详解
2017/10/24 Javascript
webstorm和.vue中es6语法报错的解决方法
2018/05/08 Javascript
vue+elementUI实现图片上传功能
2019/08/20 Javascript
uni-app自定义导航栏按钮|uniapp仿微信顶部导航条功能
2019/11/12 Javascript
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
python2 与python3的print区别小结
2018/01/16 Python
Django项目开发中cookies和session的常用操作分析
2018/07/03 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
华为校园招聘上机笔试题 扑克牌大小(python)
2020/04/22 Python
Python拼接字符串的7种方式详解
2020/03/19 Python
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
应届毕业生个人自我评价
2013/09/20 职场文书
金融专业个人的自我评价
2013/10/18 职场文书
书香校园活动方案
2014/02/28 职场文书
标准版离职证明书
2014/09/12 职场文书
四查四看整改措施
2014/09/19 职场文书
学校领导班子四风问题整改意见
2014/10/02 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
2015年暑假工作总结
2015/07/13 职场文书
JavaScript实现优先级队列
2021/12/06 Javascript