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


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 相关文章推荐
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
Dec 30 Javascript
JS JSON对象转为字符串的简单实现方法
Nov 18 Javascript
删除节点的jquery代码
Jan 13 Javascript
在Linux上用forever实现Node.js项目自启动
Jul 09 Javascript
在JS数组特定索引处指定位置插入元素的技巧
Aug 24 Javascript
jqueryUI里拖拽排序示例分析
Feb 26 Javascript
详解JavaScript的回调函数
Nov 20 Javascript
基于JavaScript实现简单的随机抽奖小程序
Jan 05 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
Dec 23 Javascript
利用JS实现简单的瀑布流加载图片效果
Apr 22 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
Apr 24 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
Nov 12 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脚本的10个技巧(3)
2006/10/09 PHP
PHP daddslashes 使用方法介绍
2012/10/26 PHP
php读取csv文件并输出的方法
2015/03/14 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
Yii2表单事件之Ajax提交实现方法
2017/05/04 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
PHP children()函数讲解
2019/02/03 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
PHP dirname简单使用代码实例
2020/11/13 PHP
jquery $.ajax入门应用一
2008/11/19 Javascript
基于JQuery的asp.net树实现代码
2010/11/30 Javascript
js中string和number类型互转换技巧(分享)
2016/11/28 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
详解vue 实例方法和数据
2017/10/23 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
2020/09/07 Javascript
JS跨浏览器解析XML应用过程详解
2020/10/16 Javascript
Vue 事件的$event参数=事件的值案例
2021/01/29 Vue.js
python多进程操作实例
2014/11/21 Python
Python排序搜索基本算法之选择排序实例分析
2017/12/09 Python
Python基于递归实现电话号码映射功能示例
2018/04/13 Python
Python3处理HTTP请求的实例
2018/05/10 Python
Python实现堡垒机模式下远程命令执行操作示例
2019/05/09 Python
利用python求积分的实例
2019/07/03 Python
基于Python+Appium实现京东双十一自动领金币功能
2019/10/31 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
2020/04/16 Python
微软中国官方商城:Microsoft Store中国
2018/10/12 全球购物
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
亚洲最大的运动鞋寄售店:KicksCrew
2020/11/26 全球购物
酒店个人培训自我鉴定
2013/12/11 职场文书
餐饮营销方案
2014/02/23 职场文书
出国留学担保书
2014/05/20 职场文书
党员一帮一活动总结
2014/07/08 职场文书
活动费用申请报告
2015/05/15 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书
Java Spring Lifecycle的使用
2022/05/06 Java/Android
CSS link与@import的区别和用法解析
2023/05/07 HTML / CSS