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


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 相关文章推荐
巧妙破除网页右键禁用的十大绝招
Aug 12 Javascript
javascript dom代码应用 简单的相册[firefox only]
Jun 12 Javascript
基于javascript实现句子翻牌网页版小游戏
Mar 23 Javascript
AngularJS 购物车全选/取消全选功能的实现方法
Aug 14 Javascript
vue2实现可复用的轮播图carousel组件详解
Nov 27 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
Dec 04 Javascript
Vue中添加手机验证码组件功能操作方法
Dec 07 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
Jul 12 Javascript
详解React 服务端渲染方案完美的解决方案
Dec 14 Javascript
微信小程序渲染性能调优小结
Jul 30 Javascript
taro小程序添加骨架屏的实现代码
Nov 15 Javascript
基于JS实现操作成功之后自动跳转页面
Sep 25 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
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
2015/02/12 PHP
thinkphp框架下实现登录、注册、找回密码功能
2016/04/06 PHP
PHP常用的三种设计模式汇总
2016/08/28 PHP
Laravel 实现数据软删除功能
2019/08/21 PHP
js里的prototype使用示例
2010/11/19 Javascript
jquery ajax return没有返回值的解决方法
2011/10/20 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
NodeJS学习笔记之网络编程
2014/08/03 NodeJs
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
2015/07/27 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
jquery实现手机端单店铺购物车结算删除功能
2017/02/22 Javascript
前端自动化开发之Node.js的环境搭建教程
2017/04/01 Javascript
深入浅析var,let,const的异同点
2018/08/07 Javascript
微信小程序如何再次获取用户授权的方法
2019/05/10 Javascript
Python functools模块学习总结
2015/05/09 Python
Python 爬取携程所有机票的实例代码
2018/06/11 Python
详解python实现识别手写MNIST数字集的程序
2018/08/03 Python
使用Python的toolz库开始函数式编程的方法
2018/11/15 Python
python实现自动解数独小程序
2019/01/21 Python
Python Numpy库datetime类型的处理详解
2019/07/13 Python
python如何将两个txt文件内容合并
2019/10/18 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
CSS3中设置3D变形的transform-style属性详解
2016/05/23 HTML / CSS
基于HTML5的WebSocket的实例代码
2018/08/15 HTML / CSS
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
英国高街电视:High Street TV
2018/05/22 全球购物
投标承诺书范本
2014/03/27 职场文书
关于迟到的检讨书
2015/05/06 职场文书
护士旷工检讨书
2015/08/15 职场文书
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android