用户关注公众号获取用户的openid

在微信公众平台基础设置里面设置服务器配置
在这里插入图片描述
服务器里面的代码

 public function checkSignature(){
        if(isset($_GET['echostr'])){
            $signature = $_GET["signature"];
            $timestamp = $_GET["timestamp"];
            $nonce = $_GET["nonce"];
            $token = '自己设置的令牌(token)';
            $EncodingAESKey = '消息加密秘钥';
            $tmpArr = array($token, $timestamp, $nonce);
            sort($tmpArr, SORT_STRING);
            $tmpStr = implode( $tmpArr );
            $tmpStr = sha1( $tmpStr );
            if( $tmpStr == $signature ){
                echo $_GET['echostr'];
            }
        }
        $xml = file_get_contents('php://input', 'r');
        $data = $this->toArray($xml);  
        // $postStr = isset($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : file_get_contents("php://input");
        Cache::set('checkSignature',$data);
        
        $fromUsername = $data['FromUserName']; //请求消息的用户
        $toUsername = $data['ToUserName']; //"我"的公众号id
        if(isset($data['Content'])){
            $keyword = trim($data['Content']); //消息内容
        }
        $time = time(); //时间戳
        $msgtype = 'text'; //消息类型:文本
        $textTpl = "<xml>
        <ToUserName><![CDATA[%s]]></ToUserName>
        <FromUserName><![CDATA[%s]]></FromUserName>
        <CreateTime>%s</CreateTime>
        <MsgType><![CDATA[%s]]></MsgType>
        <Content><![CDATA[%s]]></Content>
        </xml>"; 
        // Cache::set('checkSignature1','1');
        if($data['MsgType']=='event'){
            $contentStrq = "你好,欢迎关注E家陪诊! 请输入手机号 进行身份绑定";
            $resultStrq = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStrq);
            echo $resultStrq;
            exit();
        }else if($data['MsgType']=='text'){
        // Cache::set('checkSignature1','2--'.$keyword);
            // 这是绑定的手机号
            if(is_mobile($keyword)){
                $user=Db::name('user')->where(array('phone'=>$keyword))->find();
                if($user){
                    // Cache::set('checkSignature1','3--');
                    Db::name('user')->where(array('phone'=>$keyword))->update(array('fromUsername'=>$fromUsername));
                    //查询是否是商家
                    $AdminModel=new AdminModel;
                    if($AdminModel->where(array('uid'=>$user['id']))->find()){
                        $contentStrq = "你好,手机号绑定成功 用户下单后 可接受订单消息";
                        $resultStrq = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStrq);
                        echo $resultStrq;
                        exit();
                    }
                    $contentStrq = "你好,手机号绑定成功 开通小程序消息 接单开关 可接受订单消息";
                    $resultStrq = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStrq);
                    echo $resultStrq;
                    exit();
                }else{
                    Cache::set('checkSignature1','4');
                    $contentStrq = "你好,手机号绑定失败 可能无法获得消息提醒";
                    $resultStrq = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStrq);
                    echo $resultStrq;
                    exit();
                }
            }
            
            
        }
        // $this->sendmsg();
    }
在微信平台上,OpenID(简称openid)是用来标识微信用户的一个唯一标识。对于开发者来说,获取用户openid通常需要用户关注公众号或者绑定小程序。但是,如果你想要在用户关注公众号的情况下获取openid,你可以通过微信的网页授权来实现。 网页授权通常是通过引导用户进入微信公众号并点击一个带参数的链接来完成的。用户点击链接后,如果还没有关注公众号,系统会提示用户关注。一旦用户关注公众号,或者用户已经关注,系统就会根据回调地址重定向,并附带一个code参数。开发者可以通过这个code参数来换取用户openid和会话密钥(session_key)。 具体步骤如下: 1. 引导用户访问授权链接,例如使用以下格式的URL: ``` https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect ``` 其中,`appid` 是公众号的唯一标识,`redirect_uri` 是授权后重定向的回调链接地址,`scope` 是应用授权作用域(如 snsapi_base 或 snsapi_userinfo),`state` 可以防止CSRF攻击,是一个随机字符串。 2. 用户点击链接后,按提示操作,如果用户关注公众号,则会引导关注。 3. 关注公众号后,用户会被重定向回 `redirect_uri`,并带上一个code参数。 4. 开发者通过这个code参数向微信服务器请求access_token,同时也可以得到openid。 需要注意的是,用户必须至少有一次关注公众号的行为,或者曾经绑定过小程序,才能完成上述流程。如果用户从未与公众号有过任何互动,那么直接获取openid是不可能的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值