1. 前端(html)

 <button onclick="getcode()">一键微信登录</button><script>function getcode(){location.href="{:url('/getcode')}";}</script>

2. 后端PHP

<?php
namespace app\index\controller;use app\model\Users;
use think\facade\Config;
use think\facade\Session;/*** 登录*/class Login extends Common
{private $appid = '';private $appsecret = '';private $redirect_uri = 'http://域名/get_userinfo';/*** @return void* 初始化参数*/public function  initialize(){parent::initialize();$this->appid = config('weixin.appid');$this->appsecret = config('weixin.appsecret');}/*** 登录页*/public function login() {return view();}/*** 微信登录 获取code*/public function getcode(){$code_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$this->appid."&redirect_uri=".urlencode($this->redirect_uri)."&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";$this->redirect($code_url);}/***  微信登录 获取openid以及用户信息*/public function get_userinfo(){//获取code$code = $this->getinput('code');//获取access_token openid$return_data = json_decode($this->curl_get_contents("https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$this->appid."&secret=".$this->appsecret."&code=".$code."&grant_type=authorization_code"),true);$access_token = $return_data['access_token'];$openid = $return_data['openid'];//查询是否已绑定$users_id = Users::where('openid',$openid)->value('users_id');if($users_id){//已绑定直接登录 保存sessionSession::set('users_id',$users_id);$this->redirect('/');}else{//获取信息$user_info = json_decode($this->curl_get_contents("https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN"),true);$insert_data = ['openid'=>$user_info['openid'],'users_name'=>$user_info['nickname'],'img_url'=>$user_info['headimgurl']];//新增$insert_status = Users::create($insert_data);if (!$insert_status){$this->error('绑定失败','/login');}//保存sessionSession::set('users_id',$insert_status->id);$this->redirect('/');}}/*** 远程获取*/public function curl_get_contents($url) {$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($curl);curl_close($curl);return $output;}}

微信登录步骤

1. 根据appid 获取code

2. 根据code 获取 access_token openid

3.检测access_token 是否有效。 无效刷新access_token、

4. 根据access_token openid 拉去用户信息

TP5.1 微信一键登录相关推荐

  1. 前端微信一键登录和微信小程序支付总结

    微信一键登录和微信小程序支付总结 微信一键登录 现在小程序都是微信一键登录,下面是我的使用方法和总结,仅供参考 需要调用微信小程序的api wx.login() 使用wx.login() 调用获取凭证 ...

  2. 使用 apifm 插件进行 Flutter 云开发——微信一键登录/注册

    在你的 App 中集成手机微信一键授权(注册)登录功能,达到快速注册.快速登录功能 按照本教程的操作指引,预计5分钟即可帮你实现并掌握微信登录的实现 用户管理 微信开放平台创建应用 https://o ...

  3. uni-app中使用微信一键登录

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.微信一键登录是什么? 二.使用步骤 1.在onLoad获取用户登录信息code 2.编写页面button按钮 3. ...

  4. 移动端h5页面微信一键登录

    在移动端的 H5 页面中,微信一键登录是一种常见的方式,可以方便地让用户使用已有的微信账号进行登录,并且提高用户的使用效率和体验.具体实现方法如下: 1.在页面中引入微信 JS-SDK,并初始化 ht ...

  5. uniapp微信一键登录微信授权

    前言 现在小程序逐渐成为主流,常用的微信授权登录很重要很常见的一个功能,今天自己总结了一下. 准备工作 1.如果你想自己想试一下这个功能首先你需要有一个开发中的项目并且你在开发成员里面. 2.配置自己 ...

  6. 微信一键登录解密手机号出现javax.crypto.BadPaddingException: pad block corrupted错误

    <button class="weui-btn btn-login" open-type="getPhoneNumber" bindgetphonenum ...

  7. uniapp微信一键登录

    详细步骤: 1. 安装uni-login插件 打开HBuilderX,点击左侧工具栏里的"插件市场",在搜索框中输入"uni-login"进行搜索,找到该插件并 ...

  8. 微信一键登录遇到的坑

    前两天公司业务需要集成微信一键登录功能和手机号一键登录功能,刚好一段时间没熟悉微信开发文档了,趁着这次时间再次实现一下. 首先呢,去微信开放平台注册账号,创建对应项目的移动应用,获取业务接口 微信开放 ...

  9. 公众号微信一键登录 app微信一键登录

    公众号微信一键登录 app微信一键登录 1.公众号微信一键登录 getCode() { // 非静默授权,第一次有弹框this.code = ''var local = location.href;/ ...

最新文章

  1. 如果有人问你新冠肺炎是什么?请这样告诉他
  2. openNebula 搭建
  3. SQLServer自增变量修复
  4. 进程间的通信IPC(无名管道和命名管道)
  5. Webpack 2 视频教程 002 - NodeJS 安装与配置
  6. 31 SD配置-主数据-信用管理-定义自动信贷控制
  7. json无法解析的字符
  8. ORACLE坏块检查
  9. C# 生成验证码 方法一
  10. 编程珠玑笔记-第12章习题
  11. PBRT 学习:安装编译
  12. 解题报告——-2018级2016第二学期第三周作业
  13. JAVA Map集合类简介
  14. C语言中用二进制输出一个数字
  15. Docker Alpine安装oracle客户端
  16. html5游戏 搭积木,搭积木游戏
  17. STM32之BKP原理
  18. 【IoT】产品设计之结构设计:3D打印表面处理之喷油
  19. 客户端与服务器端通信方式总结
  20. RDD.repartition

热门文章

  1. tomcat和jvm是什么关系
  2. 饥荒单机,强大的斧子
  3. SpringMVC流程的具象
  4. python中的pass是什么意思_python中的pass代表什么意思呢?
  5. jquery flot图表插件
  6. win10更新错误代码0x800700c1的解决方法
  7. echart示例 ---大量
  8. 32.java_注解(Annotation)
  9. 中汇(天津)税务师事务所
  10. PyQt教程(1)——最简单的PyQt程序