关注微信公众号使其自动发送欢迎你关注消息

关注微信公众号使其自动发送欢迎你关注消息

一般我们关注微信公众号时。他都会自动推送一条消息。欢迎您关注了某公众号。而今天我们所做的就是这个功能。

关注公众号时我们需要获取到用户的一些个人基本信息。 而获取基本信息就要看他的运行原理。到底是怎么运行。
当我们申请了一个微信号时,关注公众号,公众号会推送我们的关注事件给我们服务器。而我们服务器又没有用户信息。但是当我们注册微信号时。一些信息会存放再腾讯服务器上。而腾讯服务器为了方便我们也给我们提供了一个获取用户信息的api。我们调用这个api就可以获取到用户的信息。

在这里插入图片描述

而调用获取用户信息接口的时候。我们发现了有一个必填参数时access_token,所有现在我们就必须要先去获取到access_token。
tips:而我们这里也要注意access_token的一些特性:
access_token的存储至少要保留512个字符空间
access_token的有效期目前为2个小时,需定时刷新
Access_token 每天能被调用的次数很少
重复获取将导致上次获取的access_token失效。
所以我们需要去服务器建一个数据库去用来存放access_token还有一会要获取到的用户基本信息

一、服务器上建立数据库

使用navicat链接linux上的数据库
在这里插入图片描述
建立后测试链接看是否可以正常连接上数据库在这里插入图片描述
如果出现上述的错误。原因是因为我们mysql是一个安全性能较高的软件,不能说任何人都可以连接。我们要想连接需要mysql服务器给我们的客户端进行授权。所以我们要进入linux系统中通过mysql命令进入到mysql服务器中在这里插入图片描述
让mysql服务器给要链接的客户端授权

mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;

如果还有错误在阿里云服务器在安全组中添加一个安全记录
云服务器ecs—找到实例—安全组—配置规则添加即可。

完后建立我们的表就好。

二、获取access_token

在这里插入图片描述
调用access_token接口需要得到三个必须参数
apiid和secret在在这里插入图片描述
之后获取

//获取access_tokenpublic function get_access_token(){//刚进来先判断数据库中是否有access$access = AccessToken::orderBy("id","desc")->first();//数据库中没有或者时间超过了7000s 则重新获取accessif(!$access || time()-$access->access_token_time > 7000){//获取appid$appid = "wx1d72e376cd0e0cea";//获取secret$secret = "bc0f301236d4db2b20db3dc7cea63c14";//调用access_token接口$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret;//get请求接口$result = $this->http_get($url);//得到的json字符串转为数组形式$result = json_decode($result,true);//判断是否请求成功if(isset($result["access_token"])){//表示请求成功  存入数据库$access_token = new AccessToken();//token值$access_token->access_token = $result["access_token"];//获取到的时间$access_token->access_token_time = time();//存入数据库$access_token->save();//返回数据return $result["access_token"];}else{//表示失败,返回falsereturn false;}}else{//直接数据库中获取return $access->access_token;}}

三、获取用户信息

得到了access_token我们直接调用接口去获取

   $obj = $this->receiveMsg();//接收消息//这个在前面文章有定义此方法//判断消息类型switch ($obj->MsgType){//事件类型case "event"://订阅事件if($obj->Event=="subscribe"){//获取用户信息$openid = $obj->FromUserName;//获取access_token$access_token = $this->get_access_token();//获取用户信息接口$url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";//调用接口$result = $this->http_get($url);//返回的是json字符串转为数组$result = json_decode($result,true);//判断是否请求成功if(empty($result["errcode"])){//为空表示成功//查询数据库中是否有此数据$check = Fans::where('openid',$openid)->first();if(!$check){//没有查询到将数据存放到数据库中Fans::create($result);//给出提示$content = "欢迎你关注我们的微信公众号";}else{//查询有此数据修改他的关注状态为1$check->status=1;$check->save();$content="欢迎你再次关注我们的微信公众号";}}else{//不为空表示失败$content = "关注失败";}}//取消订阅事件if($obj->Event=="unsubscribe"){//获取用户信息$openid = $obj->FromUserName;//查询是否有该openid$check = Fans::where('openid',$openid)->first();//如果有则修改状态为0if($check){$check->status = 0;$check->save();$content = "取消订阅成功";}else{$content = "取消订阅失败";}}//发送消息$this->check($content);//这是我的调试方法 没有用$this->responseText($obj,$content);//这个在前面文章有定义此方法break;

我们这里将用户信息保存到数据库中时需要设置Model的白名单

<?phpnamespace App\Model;use Illuminate\Database\Eloquent\Model;class Fans extends Model
{//定义表名protected  $table = "fans";//定义主键protected $primaryKey = "id";//关闭时间戳public $timestamps = false;//设置白名单protected $fillable = ['openid',"nickname","sex","city","province","country","headimgurl","subscribe_time"];
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信公众号——永久素材的上传

微信公众号永久素材的上传 思路&#xff1a;1.需要上传到本地&#xff08;因为后面需要用的本地的绝对路径 2.上传到微信服务器 3.添加信息到本地数据库 一、上传图片到本地 文件上传的方法 以下是我的代码 首先更改文件上传的配置 而后写我们的文件上传方法 if (request…

nodejs在Liunx上的部署生产方式-PM2

先安装&#xff1a;npm install -g pm2 &#xff08;注意&#xff1a;使用它要先安装它&#xff0c;用root账号和全局模式安装一下&#xff09; 安装完成使用&#xff1a;pm2 -v 查看版本信息 安装成功之后&#xff0c;启动nodejs项目&#xff1a;pm2 start app.js --项目名…

安卓逆向之基于Xposed-ZjDroid脱壳 逆向分析(脱壳)

安卓逆向——某力播逆向分析(脱壳) 一、环境 这一步真的头疼&#xff0c;环境很重要&#xff0c;各种测试&#xff0c;一下是我测试的环境&#xff0c;由于没有真机&#xff0c;就拿虚拟机做测试 1. Xposed 2. FDex2 3. fiddler 4. 软件 二、抓包 通过 …

nginx php mysql一些常用命令(windows linux)

Nginx(nginx) 通常安装路径 /usr/local/nginx检查Nginx是否运行 ps aux | grep nginx重启Nginx /usr/local/nginx/sbin/nginx -s reload停止Nginx /usr/local/nginx/sbin/nginx -s stop测试配置 /usr/local/nginx/sbin/nginx -tPHP(php) PHP安装路径 /usr/local/php查看PH…

nodejs图片转换字节保存

fs.readFile(上传图片路径, function(err, data) {if (err) {// 错误处理return;}var base64str new Buffer(data).toString(base64); // 图片转换为字节fs.writeFileSync(copy.jpg, base64str); // 字节流保存为图片});

Apache/Tomcat/JBOSS/Nginx(2)

三.性能测试&#xff1a;将分别测试3种软件在对动态页面和静态页面请求及并发时的响应时间l 静态页面搜狐首页LIGHTTPDn/-c(ab参数)cpu%MemRequestsperSecondTime taken for tests100000/1006460462.7521.6100000/2006760312.0732.4100000/5008360137.2472.8100000/1000出现错误…

安卓逆向代码反混淆 Simplify工具 JEB2反混淆神器

【技术分享】Android程序反混淆利器——Simplify工具 https://www.anquanke.com/post/id/85388 发布时间&#xff1a;2017-01-23 17:21:23 问题背景 Android程序代码混淆是Android开发者经常用来防止app被反编译之后迅速被分析的常见手法。在没有混淆的代码中&#xff0c;被…

nodejs字符与字节之间的转换

new Buffer("Hello World").toString("base64"); /* yields SGVsbG8gV29ybGQNCg */new Buffer("SGVsbG8gV29ybGQNCg").toString("ascii"); /* yields Hello World */

Vmware虚拟机的安装和使用

安装虚拟机 一、安装虚拟机Vmware Workstation 下一步 下一步 如果C盘剩余空间大&#xff08;大于50G&#xff09;&#xff0c;可安装在C盘 二、在虚拟机中安装Linux系统&#xff1a; 准备工作&#xff1a; Linux系统镜像文件&#xff08;ISO文件&#xff09; 1 、新建虚拟机…

XCode快捷键

1. 文件CMD N: 新文件CMD SHIFT N: 新项目CMD O: 打开CMD S: 保存CMD SHIFT S: 另存为CMD W: 关闭窗口CMD SHIFT W: 关闭文件2. 编辑 CMD [: 左缩进CMD ]: 右缩进CMD CTRL LEFT: 折叠CMD CTRL RIGHT: 取消折叠CMD CTRL TOP: 折叠全部函数CMD CTRL BOTTOM:…

pyinstaller 打包python应用为exe后 打包出现failed to execute script

pyinstaller 打包python应用为exe后 打包出现failed to execute script 打包后出现如题问题&#xff0c;只需在打包语句中加入pkg_resources.py2_warn这个包 pyinstaller -F -w xxx.py --hidden-import pkg_resources.py2_warn

【项目经验】如何用TexturePacker Physicseditor开发游戏

首先感谢Andreas的license。先广告一下Andreas。 -----------------------------------------------------------------------------------------http://www.codeandweb.com/texturepacker - The sprite sheet creator turns chaos into orderhttp://www.codeandweb.com/physic…

JSON.stringify转换Date不正确的解決方法

JSON.stringify转换Date不正确的原因&#xff1a;国际时区&#xff08;UTC&#xff09;和中国时区&#xff08;GMT&#xff09;的原因&#xff0c;东八区8等于国际时区。 解决方法&#xff0c;重新Es5的Date.prototype.toJSON方法&#xff0c;代码如下&#xff1a; function d…

smbd的安装与使用

文件共享服务软件 samba 安装与配置 安装了samba服务的主机&#xff0c;可以将文件共享给其它用户&#xff0c;其它用户可以对文件进行读写操作。 安装 以Ubuntu Linux为例 1、 安装 2、 检查是否安装成功 启动 samba服务&#xff1a; 查看samba服务状态&#xff1a; 3、 添…

PyQt5实现点击按钮获取文本框的值

目录 PyQt5笔记&#xff08;01&#xff09; – 创建空白窗体PyQt5笔记&#xff08;02&#xff09; – 按钮点击事件PyQt5笔记&#xff08;03&#xff09; – 消息框PyQt5笔记&#xff08;04&#xff09; – 文本框的使用PyQt5笔记&#xff08;05&#xff09; – 绝对位置 为了…

nodejs MVC

http://www.cnblogs.com/ppoo24/archive/2012/02/08/2343064.html

Laravel-admin 分类避免踩坑

一、模型层引入 use Encore\Admin\Traits\AdminBuilder; use Encore\Admin\Traits\ModelTree; 在方法中使用 use ModelTree,AdminBuilder; 最终代码为 <?phpnamespace App\Model;use Illuminate\Database\Eloquent\Model; use Encore\Admin\Traits\AdminBuilder; use Enco…

设置让TortoiseGit记住账号和密码

方法一&#xff1a;在"C:\Documents and Settings\Administrator\.gitconfig" 文件 或 "项目/.git/config"文件 里增加两行&#xff1a; [credential] helper store 设置好&#xff0c;再次输入用户名和密码之后&#xff0c;以后就不需要输入了。 方法…

python使用python-barcode生成任意长度字符串的条形码(一维码)详细教程

使用python-barcode生成一维码 1.安装python包 pip install Pillow pip install python-barcode2.实例程序 # -*- coding: utf-8 -*-import barcode import random from barcode.writer import ImageWriter import os from PIL import Image#生成一维码的类型的种类 "&…

Objective-C学习笔记(一)–类

1、类的定义与实现1.1说明所有的类都是继承NSObject。类的接口与实现是分开的&#xff0c;一般类的定义是放在.h文件【包含类的名称、成员变量、方法、属性、继承关系 、遵从的协议】&#xff1b;实现部分是放在.m文件中【包含每个属性和方法的具体实现以及协议的方法实现】语法…