微信订阅号获取用户openid

2020-03-09

服务号有获取用户基本信息的接口,通过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

{/if}