IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> php 做公众号获取用户openid -> 正文阅读

[PHP知识库]php 做公众号获取用户openid

先申请测试公众号账号:地址:

微信公众平台

注意下:此处接口配置信息里面url填写的 接口要给公众号响应,代码如下:

$signature = input('signature');
? ? ? ? $timestamp = input('timestamp');
? ? ? ? $nonce = input('nonce');
? ? ? ? $tmp_arr = array(123456, $timestamp, $nonce);//123456和上面的token一致
? ? ? ? sort($tmp_arr);
? ? ? ? $tmp_str = implode($tmp_arr);
? ? ? ? $tmp_str = sha1($tmp_str);
? ? ? ? $echostr = $_GET['echostr'];
? ? ? ? if($echostr)
? ? ? ? {
? ? ? ? ? ? echo $echostr;
? ? ? ? ? ? exit;
? ? ? ? }

?填写域名就行

注意重点:

下面填域名。不要带http和https

前端:

1.请求后端接口例如:参数code

http://xxx.gettoken?code=1

前端的code根据微信公众号提供的接口随机获取

2.后端接收前端code?

后端接收前端code然后请求微信用户权限接口获取openid

?public function getWxCode($code){
? ? ? ? $appid = $this->config['app_id'];
? ? ? ? $secret =$this->config['secret'];
? ? ? ? $curl = new Curl();
? ? ? ? $tokeninfo = $curl->get("https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appid}&secret={$secret}&code={$code}&grant_type=authorization_code");---获取access_token
? ? ? ? $tokeninfo = json_decode($tokeninfo, true);
? ? ? ? $access_token = get_val_array('access_token', $tokeninfo);//有效7200秒
? ? ? ? $openid = get_val_array('openid', $tokeninfo);
? ? ? ? $oauthinfo = $curl->get("https://api.weixin.qq.com/cgi-bin/user/info?access_token={$access_token}&openid={$openid}&lang=zh_CN");--获取用户信息。里面有openid 。每个微信用户唯一的码
? ? ? ? $oauthinfo = json_decode($oauthinfo, true);
? ? ? ? return $openid;
? ? }

3.获取到openid之后。后端加密一下(可以用jwt)

加密之后生成一个token存入缓存
? ??

?$token = md5($openid);

做一下简单加密(可以用jwt也可以)

?Cache::set($token, $openid, 604800);//7天缓存
?return $token;--将这个token传给前端 ,前端存到本地

4.前端拿到这个token(可以理解为令牌,和后端通讯的令牌)

前端请求别的后端接口带上token。表明身份。例如获取某用户的订单

后端根据token取这个用户缓存的openid去数据库获取信息

5.后端接口要鉴权:构造方法里面鉴权判断token有效性

?public function __construct()
? ? {
? ? ? ? parent::__construct();
? ? ? ? $token = input('token');
? ? ? ? if(empty($token)){
? ? ? ? ? ? echo json_encode(['code' => 5003, 'msg' => 'token不为空']);die;
? ? ? ? }
? ? ? ? $openid= Cache::get($token);
? ? ? ? if(empty($openid)){
? ? ? ? ? ? echo json_encode(['code' => 5001, 'msg' => 'token无效,请重新请求.']);die;
? ? ? ? }
? ? ? ? $this->openid=$openid;
? ? }

--这个意思就是前端拿着后端给的token去请求数据接口。如果这个token有效。则后端返回数据


?

当然后端也能获取code:

?public function getcode(){
? ? ? ? $appid = $this->config['app_id'];
? ? ? ? $secret =$this->config['secret'];
? ? ? ? $code = $_GET['code'];
? ? ? ? if (empty($code)) {
? ? ? ? ? ? $redirect_uri = urlencode(request()->url(true));
? ? ? ? ? ? $this->redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid={$appid}&redirect_uri={$redirect_uri}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect");
? ? ? ? }
? ? ? ? return $code;
? ?

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章           查看所有文章
加:2022-04-18 17:20:14  更:2022-04-18 17:22:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 16:01:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码