潍坊网站制作公司哪家比较好,wordpress 站内通知,杭州 网站建站,襄阳网站seo诊断关注微信公众号使其自动发送欢迎你关注消息
一般我们关注微信公众号时。他都会自动推送一条消息。欢迎您关注了某公众号。而今天我们所做的就是这个功能。 关注公众号时我们需要获取到用户的一些个人基本信息。 而获取基本信息就要看他的运行原理。到底是怎么运行。 当我们申请…关注微信公众号使其自动发送欢迎你关注消息
一般我们关注微信公众号时。他都会自动推送一条消息。欢迎您关注了某公众号。而今天我们所做的就是这个功能。 关注公众号时我们需要获取到用户的一些个人基本信息。 而获取基本信息就要看他的运行原理。到底是怎么运行。 当我们申请了一个微信号时关注公众号公众号会推送我们的关注事件给我们服务器。而我们服务器又没有用户信息。但是当我们注册微信号时。一些信息会存放再腾讯服务器上。而腾讯服务器为了方便我们也给我们提供了一个获取用户信息的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服务器给要链接的客户端授权
mysqlGRANT 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_typeclient_credentialappid.$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-Eventsubscribe){//获取用户信息$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.langzh_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-status1;$check-save();$content欢迎你再次关注我们的微信公众号;}}else{//不为空表示失败$content 关注失败;}}//取消订阅事件if($obj-Eventunsubscribe){//获取用户信息$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];
}