tp5 微信公众号 开发者模式 自定义栏目及获取用户openid 和 unionid

好久没写了 今天更新两篇文章

这次是关于微信公众号的的 用户信息获取

第一个微信公众号方法是对接微信公众平台的

 public function index()
    {
        //获得参数 signature nonce token timestamp echostr
        if (isset($_GET['echostr'])) {
            //1.将timestamp,nonce,toke按字典顺序排序
            $timestamp = $_GET['timestamp'];
            $nonce = $_GET['nonce'];
            $token = 'weixin';
            $signature = $_GET['signature'];
            $array = array($timestamp,$nonce,$token);
//2.将排序后的三个参数拼接之后用sha1加密
            $tmpstr = implode('',$array);
            $tmpstr = sha1($tmpstr);
            if ($tmpstr == $signature) {
                //第一次接入weixin api接口的时候
                ob_clean();
                header('content-type:text');
                echo $_GET['echostr'];
                $this->definedItem();
                exit;
            }
        } else {
            $this->definedItem();
            $this->reponseMsg();


        }


    }

这是在微信公众平台进行配置的

方法 definedItem() 是对应微信公众号自定义栏目 代码如下

public function definedItem(){
        header('content-type:text/html;;charset=utf-8');
        $access_token= $this->getWxAccessToken();

        $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;
        
        $postArr=array(
            'button'=>array(
                array(
                    'name'=>'在线下单',
                    'type'=>'miniprogram',
                    'appid'=>'你的appid',
                     'pagepath'=>'pages/menu/menu',
                    'url'=>'http://www.baidu.com'

                ),
                array(
                    'name'=>'分享好友',
                    'type'=>'miniprogram',
                    'appid'=>'你的appid',
                    'pagepath'=>'pages/index/index',
                    'url'=>'http://www.baidu.com'
                ),//第三个一级菜单

                array(
                    'name'=>'在线咨询',
                    'type'=>'miniprogram',
                    'appid'=>'你的appid',
                    'pagepath'=>'pages/index/index',
                    'url'=>'http://www.baidu.com'
                ),//第三个一级菜单

            )
        );

        echo '<br/>';
        var_dump($postArr);
        echo '<hr/>';

         $postJson = json_encode($postArr,JSON_UNESCAPED_UNICODE);
        var_dump($postJson);
        $res= $this->http_curl($url,'post','json',$postJson);

        var_dump($res);
    }

获取微信AccessToken 的代码

 public function getWxAccessToken(){
        if(Session::has('access_token') && Session::has('expire_time') > time()){
            return  Session::get('access_token');

        }else{
            $appid = '你的id';
            $appsecret =  '你的密匙';
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
            $res=$this->http_curl($url,'get','json');
            $access_token=isset($res['access_token'])?$res['access_token']:'';
            Session::set('access_token',$access_token);
            Session::set('expire_time',time()+7200);
            return $access_token;
        }

    }

方法  http_curl 的代码

function http_curl($url,$type='get',$res='json',$arr=''){
        //获取imooc
        //1.初始化curl
        $ch = curl_init();

        //2.设置curl的参数
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        if($type=='post'){
            curl_setopt($ch,CURLOPT_POST,1);
            curl_setopt($ch,CURLOPT_POSTFIELDS,$arr);
        }

        //3.采集
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        $output = curl_exec($ch);
        //4.关闭
       // curl_close($ch);
        if($res=='json'){
            if(curl_errno($ch)){
                return curl_error($ch);
            }else{
                return json_decode($output,true);
            }


        }

        var_dump($output);
    }

以上是组成 微信公众号自定义栏目的代码

下面是微信公众号关注第一次自动回复代码   reponseMsg 方法

public function reponseMsg()
    {
        //1.获取到微信推送过来post数据(xml格式)
        //$postArr = $GLOBALS['HTTP_RAW_POST_DATA'];//php7以上不能用

        $postArr = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : file_get_contents("php://input");
        //$postArr = file_get_contents("php://input");
        //2.处理消息类型,并设置回复类型和内容
        $postObj = simplexml_load_string($postArr);
        //判断该数据包是否是订阅的事件推送
        if (strtolower($postObj->MsgType) == 'event') {
            //如果是关注 subscribe 事件
            if (strtolower($postObj->Event == 'subscribe')) {
                //回复用户消息(纯文本格式)
                $toUser = $postObj->FromUserName;
                $fromUser = $postObj->ToUserName;
                $time = time();
                $msgType = 'text';
                //$content  = '您好,欢迎关注爱米的微信公众账号'.$postObj->FromUserName.'-'.$postObj->ToUserName;
                $content = 'Hi,你终于来了!
新用户全场商品首件免费,再送新人大券包:
                逐鹿「百万大咖」活动
                正在进行中
                每周消费满7件商品,
                瓜分500万现金!
马上点击下方菜单栏【百万大咖】参与活动+提现
                Good Luck~';
                $template = "<xml><ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <Content><![CDATA[%s]]></Content></xml>";
                $info = sprintf($template, $toUser, $fromUser, $time, $msgType, $content);

               

                echo $info;
            }


        }
}

这一步大家注意了  $toUser 是用户的openid 有了这个可以去换取用户的unionid 

用下面的方法 可以获取到用户的基本信息了

 public function getAccessopenid()
    {
        $openid = '用户的openid' ;
        $access_token= $this->getWxAccessToken();

        $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=$access_token&openid=$openid&lang=zh_CN";

        $res= $this->http_curl($url);

        dump($res) ;
    }

这样就可以获取用户的openid 和 unionid ,可以配合小程序 来实现一些功能了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值