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


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 相关文章推荐
JS记录用户登录次数实现代码
Jan 15 Javascript
如何在MVC应用程序中使用Jquery
Nov 17 Javascript
在JavaScript中处理时间之getHours()方法的使用
Jun 10 Javascript
浅谈javascript获取元素transform参数
Jul 24 Javascript
js图片轮播手动切换效果
Nov 10 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
Apr 12 Javascript
canvas实现图像放大镜
Feb 06 Javascript
详解vue渲染从后台获取的json数据
Jul 06 Javascript
利用node.js爬取指定排名网站的JS引用库详解
Jul 25 Javascript
jQuery实现的导航条点击后高亮显示功能示例
Mar 04 jQuery
js 递归json树实现根据子id查父id的方法分析
Nov 08 Javascript
vue-quill-editor的使用及个性化定制操作
Aug 04 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/13 PHP
php获取flash尺寸详细数据的方法
2016/11/12 PHP
扩展javascript的Date方法实现代码(prototype)
2010/11/20 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
js快速排序的实现代码
2013/12/08 Javascript
浅谈Javascript 执行顺序
2013/12/18 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
JavaScript判断变量是对象还是数组的方法
2014/08/28 Javascript
Vue.js每天必学之过滤器与自定义过滤器
2016/09/07 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
2016/11/07 Javascript
微信小程序 自己制作小组件实例详解
2016/12/22 Javascript
JavaScript定义全局对象的方法示例
2017/01/12 Javascript
node.js 抓取代理ip实例代码
2017/04/30 Javascript
vue v-model表单控件绑定详解
2017/05/17 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
vue中element-ui表格缩略图悬浮放大功能的实例代码
2018/06/26 Javascript
微信小程序实现文字跑马灯
2020/05/26 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
12 种使用Vue 的最佳做法
2020/03/30 Javascript
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
Python实现决策树C4.5算法的示例
2018/05/30 Python
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
Django中使用session保持用户登陆连接的例子
2019/08/06 Python
pytorch 常用线性函数详解
2020/01/15 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
python selenium xpath定位操作
2020/09/01 Python
浅析HTML5的WebSocket与服务器推送事件
2016/02/19 HTML / CSS
Canvas多边形绘制的实现方法
2019/08/05 HTML / CSS
canvas 绘图时位置偏离的问题解决
2020/09/16 HTML / CSS
招标保密承诺书
2015/01/20 职场文书
同学毕业留言寄语
2015/02/27 职场文书
详解Redis集群搭建的三种方式
2021/05/31 Redis
Java内存模型之happens-before概念详解
2021/06/13 Java/Android
《帝国时代4》赛季预告 新增内容编译器可创造地图
2022/04/03 其他游戏