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


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 相关文章推荐
网站被黑的假象--ARP欺骗之页面中加入一段js
May 16 Javascript
用jQuery实现检测浏览器及版本的脚本代码
Jan 22 Javascript
仿迅雷焦点广告效果(JQuery版)
Nov 19 Javascript
js运动框架_包括图片的淡入淡出效果
May 11 Javascript
javascript获取当前鼠标坐标的方法
Jan 10 Javascript
DOM基础教程之事件对象
Jan 20 Javascript
jQuery实现购物车计算价格功能的方法
Mar 25 Javascript
javascript消除window.close()的提示窗口
May 20 Javascript
javascript中不易分清的slice,splice和split三个函数
Mar 29 Javascript
8个有意思的JavaScript面试题
Jul 30 Javascript
js生成1到100的随机数最简单的实现方法
Feb 07 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
Dec 08 Vue.js
微信小程序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单例模式应用详解
2013/06/03 PHP
PHP动态输出JavaScript代码实例
2015/02/12 PHP
FormValidate 表单验证功能代码更新并提供下载
2008/08/23 Javascript
javascrip关于继承的小例子
2013/05/10 Javascript
javascript如何动态加载表格与动态添加表格行
2013/11/27 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
2015/08/21 Javascript
jquery+CSS3实现淘宝移动网页菜单效果
2015/08/31 Javascript
jQuery插件编写步骤详解
2016/06/03 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
微信小程序  audio音频播放详解及实例
2016/11/02 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
2017/02/10 Javascript
基于node下的http小爬虫的示例代码
2018/01/11 Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
2019/07/03 Javascript
详解在Vue.js编写更好的v-for循环的6种技巧
2020/04/14 Javascript
JavaScript中Object、map、weakmap的区别分析
2020/12/15 Javascript
详解Django中Request对象的相关用法
2015/07/17 Python
python学习教程之使用py2exe打包
2017/09/24 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
python2.7的flask框架之引用js&amp;css等静态文件的实现方法
2019/08/22 Python
python中树与树的表示知识点总结
2019/09/14 Python
超实用的 30 段 Python 案例
2019/10/10 Python
Python中BeautifuSoup库的用法使用详解
2019/11/15 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
简单了解Python write writelines区别
2020/02/27 Python
Python自动重新加载模块详解(autoreload module)
2020/04/01 Python
python golang中grpc 使用示例代码详解
2020/06/03 Python
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
高分子材料个人求职信范文
2013/09/25 职场文书
超市促销活动方案
2014/03/05 职场文书
最新结婚典礼主持词
2014/03/14 职场文书
法人授权委托书
2014/04/03 职场文书
安全生产目标责任书
2014/04/14 职场文书
学校党的群众路线教育实践活动整改措施
2014/10/25 职场文书
2015学校年度工作总结
2015/05/11 职场文书
一文搞懂redux在react中的初步用法
2021/06/09 Javascript