PHP TP模板下的微信登录(PC)

2024-05-09 17:48
文章标签 模板 微信 登录 php tp pc

本文主要是介绍PHP TP模板下的微信登录(PC),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.微信开发者账号的申请就不说,企业级;官网域名回跳地址。(微信开放平台APPID)

      还有注意点:很多应用是放在微信公众号中的,此地微信登录是:微信公众平台APPID

2.请求代码构

<?phpclass ui_login_weixin_login extends ui
{public function __construct(){parent::__construct();//当前由用户if (empty($this->uid)) {$biz_weixin_loginapi = new biz_weixin_loginapi();$weixin_login_url = $biz_weixin_loginapi->get_url_code();//请求到地址栏header('location:' . $weixin_login_url);} else {header('location:' . WWW_DOMAIN);}}
}
public function get_url_code(){$url = self::WEIXIN_URL;//回调地址$code_redirect_uri = urlencode(self::CODE_REDIRECT_URI); // self::CODE_REDIRECT_URI 回调地址需要urlencode ;$state = md5(uniqid(mt_rand(), true));$_SESSION['weixin_login_state'] = $state;//请求地址$url .= 'connect/qrconnect?appid='.self::APPID.'&redirect_uri='.$code_redirect_uri.'&response_type=code&scope=snsapi_login&state='.$state.'#wechat_redirect';return $url;}

这两部代码即可完成对微信的请求

2.编写回调代码:

步骤:

2.1  判断是不是有返回值;

2.2  获取access_token open_id;

2.3  获取微信用户信息;

2.4  检验微信token是否有效;

2.5  根据unionid查询查询本地 是否有数据 有得话,执行本地登录方法,成功或者失败 ;

2.6  没有得话 写入weixin_login user 表各一份数据 微信登陆表 用户表,执行本地登录方法,成功或者失败;

<?phpclass ui_login_weixin_logincallback extends ui
{public function __construct($S, $param){parent::__construct();// 如果已登陆 跳转到首页if (! empty($this->uid)) {header('location:' . WWW_DOMAIN);return null;}$header = loadMod('glob/header');$footer = loadMod('glob/footer');$S->assign('header', $header);$S->assign('footer', $footer);$info = $this->login_callback($param['code'], $param['state']);$S->assign('info', $info);}/*** 微信登陆扫码后 访问得方法*/protected function login_callback($code, $state){// 如果返回值无code 或者state不对 跳转到首页if (empty($code) || $state !== $_SESSION['weixin_login_state']) {return array('title' => '登陆失败,请重新尝试!','url' => '/','sec' => 5,'msg' => 'alert');}// 获取access_token open_id$biz_weixin_loginapi = new biz_weixin_loginapi();$result_access_token = $biz_weixin_loginapi->get_access_token($code);if ($result_access_token['msg'] !== 'success') {return array('title' => '登陆失败,请重新尝试!','url' => '/','sec' => 5,'msg' => 'alert');}$access_token = $result_access_token['data']['access_token'];$open_id = $result_access_token['data']['openid'];// 获取用户信息$result_user_info = $biz_weixin_loginapi->get_user_info($access_token, $open_id);if ($result_user_info['msg'] !== 'success' || empty($result_user_info['data']['unionid'])) {return array('title' => '登陆失败,请重新尝试!','url' => '/','sec' => 5,'msg' => 'alert');}// 检验token是否有效$check_token_res = $biz_weixin_loginapi->check_token($access_token, $open_id);if ($check_token_res['msg'] !== 'success') {return array('title' => '登陆失败,请重新尝试!','url' => '/','sec' => 5,'msg' => 'alert');}// 登陆成功 根据unionid查询weixin_login user 是否有数据 有得话 直接读取 没有得话$biz_login_weixin = new biz_login_weixin();$user_id = $biz_login_weixin->get_userid_by_weixin_unionid($result_user_info['data']['unionid']);if (is_id($user_id['data'])) {$biz_login = new biz_login();$biz_login->login($user_id['data'], 'is_login');return array('title' => '登陆成功!','url' => '/home/welcome','sec' => 3,'msg' => 'success');}// 没有得话 写入weixin_login user 表各一份数据 微信登陆表 用户表$openid = $result_user_info['data']['openid'];$nickname = $result_user_info['data']['nickname'];$sex = $result_user_info['data']['sex'];$language = $result_user_info['data']['language'];$city = $result_user_info['data']['city'];$province = $result_user_info['data']['province'];$country = $result_user_info['data']['country'];$headimgurl = $result_user_info['data']['headimgurl'];$unionid = $result_user_info['data']['unionid'];$insert_res = $biz_login_weixin->add_weixin($openid, $nickname, $sex, $language, $city, $province, $country, $headimgurl, $unionid);if ($insert_res['msg'] !== 'success' || ! is_id($insert_res['data']['user_id'])) {return array('title' => '登陆失败,请重新尝试!','url' => '/','sec' => 5,'msg' => 'alert');}$biz_login = new biz_login();$biz_login->login($insert_res['data']['user_id'], 'is_login');return array('title' => '登陆成功!','url' => '/home/welcome','sec' => 3,'msg' => 'success');}
}

public function get_access_token($code, $type = 1){if(empty($code)){return array('msg' => 'code_error');}$url = self::API_URL;if($type === 1){$appid = self::APPID;$secret = self::APP_SECRET;}else{$appid = self::APPID_GZ;$secret = self::APP_SECRET_GZ;}$url .= 'sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code';//获取access_token$res_json = runCurl($url);if(!$res_json){return array('msg' => 'runCurl_error');	}$res_arr = json_decode($res_json, true);if(isset($res_arr['errcode'])){return array('msg' => $res_arr['errmsg']);}return array('msg' => 'success', 'data' => $res_arr);}

public function get_user_info($access_token, $open_id){if(empty($access_token) || empty($open_id)){return array('msg' => 'empty_token_or_openid');}$url = self::API_URL;$url .= 'sns/userinfo?access_token='.$access_token.'&openid='.$open_id;$res_json = runCurl($url);if(!$res_json){return array('msg' => 'runCurl_error');}$res_arr = json_decode($res_json, true);if(isset($res_arr['errcode'])){return array('msg' => $res_arr['errmsg']);}return array('msg' => 'success', 'data' => $res_arr);}

public function check_token($access_token, $open_id){if(empty($access_token) || empty($open_id)){return array('msg' => 'empty_token_or_openid');}$url = self::API_URL;$url .= 'sns/auth?access_token='.$access_token.'&openid='.$open_id;$res_json = runCurl($url);if(!$res_json){return array('msg' => 'runCurl_error');}$res_arr = json_decode($res_json, true);if( $res_arr['errcode'] !== 0 ){return array('msg' => $res_arr['errmsg']);}return array('msg' => 'success');}




这篇关于PHP TP模板下的微信登录(PC)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/974071

相关文章

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

Redis迷你版微信抢红包实战

《Redis迷你版微信抢红包实战》本文主要介绍了Redis迷你版微信抢红包实战... 目录1 思路分析1.1hCckRX 流程1.2 注意点①拆红包:二倍均值算法②发红包:list③抢红包&记录:hset2 代码实现2.1 拆红包splitRedPacket2.2 发红包sendRedPacket2.3 抢

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo

Java如何根据word模板导出数据

《Java如何根据word模板导出数据》这篇文章主要为大家详细介绍了Java如何实现根据word模板导出数据,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... pom.XML文件导入依赖 <dependency> <groupId>cn.afterturn</groupId>

Python中Flask模板的使用与高级技巧详解

《Python中Flask模板的使用与高级技巧详解》在Web开发中,直接将HTML代码写在Python文件中会导致诸多问题,Flask内置了Jinja2模板引擎,完美解决了这些问题,下面我们就来看看F... 目录一、模板渲染基础1.1 为什么需要模板引擎1.2 第一个模板渲染示例1.3 模板渲染原理二、模板

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获