服务号有获取用户基本信息的接口,通过oauth2.0网页授权获取的。但是认证的订阅号也有获取用户基本信息的接口了,但是与服务号不同的是,这个需要用户主动触发才可以获得,需要用户发送任意关键词或者点击菜单。
本文主要说明通过点击菜单获取openid,然后将openid拼接到第三方的url上以达到获取openid的需求。
主要方法:微信自定义菜单跳转链接时,不要选择VIEW事件,而是选择CLICK事件;(VIEW事件是直接跳转url,VIEW事件订阅号是无法将openid拼接到url上的,而CLICK事件是弹出一个图文消息,弹出的图文消息的url是能够拼接openid的,在ur后面拼接一个openid的参数,然后在访问页面时进行获取即可)。
主要展示接收事件消息的CLICK事件代码
//接收事件消息
private function receiveEvent($object)
{
$content = "";
switch ($object->Event)
{
//关注回复
case "subscribe":
$content = '123';
break;
case "unsubscribe":
$content = "取消关注";
break;
case "CLICK":
$eve=$object->EventKey;
$sql = "SELECT * from `zt_wxmenu` where id='$eve'";
$row=$this->find($sql);
$userid=$object->FromUserName;
$sql2 = "SELECT * from `zt_user` where openid='$userid'";
$user=$this->find($sql2);
$con=$row['url'];
#将openid拼接到url上
$url="$con?openid=$userid";
$title=$row['menu'];
$cont=$row['content'];
$pic='http://' . $_SERVER['HTTP_HOST'] . $row['pic'];
$content = array();
$content[] = array("Title"=>"$title", "Description"=>"$cont", "PicUrl"=>"$pic", "Url" =>"$url");
break;
case "VIEW":
$_SESSION['openid'] = $object->FromUserName;
$content = "链接地址为: ".$object->EventKey .'?openid='.$object->FromUserName;
break;
default:
$content = "receive a new event: ".$object->Event;
break;
}
return $result;
}
文章来源于:https://blog.csdn.net/weixin_39927850/article/details/80402565