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


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+css 网页每次加载不同样式的实现方法
Dec 27 Javascript
JQuery验证工具类搜集整理
Jan 16 Javascript
理解jQuery stop()方法
Nov 21 Javascript
JavaScript学习笔记之数组的增、删、改、查
Mar 23 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
Oct 10 Javascript
JS中用三种方式实现导航菜单中的二级下拉菜单
Oct 31 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
Dec 21 Javascript
jQuery扩展+xml实现表单验证功能的方法
Dec 25 Javascript
JS作用域深度解析
Dec 29 Javascript
详解Koa中更方便简单发送响应的方式
Jul 20 Javascript
对layui中表单元素的使用详解
Aug 15 Javascript
vue中提示$index is not defined错误的解决方式
Sep 02 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实现随机发扑克牌
2020/04/22 PHP
Gambit vs CL BO3 第二场 2.13
2021/03/10 DOTA
js下弹出窗口的变通
2007/04/18 Javascript
jquery 表单进行客户端验证demo
2009/08/24 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
解析jQuery与其它js(Prototype)库兼容共存
2013/07/04 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
简单的React SSR服务器渲染实现
2018/12/11 Javascript
JavaScript事件对象深入详解
2018/12/30 Javascript
JavaScript享元模式原理与用法实例详解
2020/03/09 Javascript
小程序实现可拖动的悬浮按钮
2020/09/07 Javascript
通过滑动翻页效果实现和移动端click事件问题
2021/01/26 Javascript
[04:48]DOTA2亚洲邀请赛林书豪为VGJ加油
2017/04/01 DOTA
python 中文乱码问题深入分析
2011/03/13 Python
python&amp;MongoDB爬取图书馆借阅记录
2016/02/05 Python
Python实现命令行通讯录实例教程
2016/08/18 Python
使用matplotlib中scatter方法画散点图
2019/03/19 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
在django-xadmin中APScheduler的启动初始化实例
2019/11/15 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
python使用建议技巧分享(三)
2020/08/18 Python
Python+kivy BoxLayout布局示例代码详解
2020/12/28 Python
Banana Republic欧盟:美国都市简约风格的代表品牌
2018/05/09 全球购物
档案检查欢迎词
2014/01/13 职场文书
信息技术培训感言
2014/03/06 职场文书
产品质量承诺书范文
2014/03/27 职场文书
社区义诊活动总结
2014/04/30 职场文书
交通安全横幅标语
2014/10/07 职场文书
2015年大学教师工作总结
2015/05/20 职场文书
企业法人任命书
2015/09/21 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书
Vue vee-validate插件的简单使用
2021/06/22 Vue.js
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers