php获取微信用户(粉丝)的openid和基本信息

    微信公众平台获取微信用户(粉丝)的openid在公众号的开发中有很多用途,包括给用户发送消息,包括各种消息、模版消息等。在这里向需要获取openid的开发人员分享一下简单的流程及部分代码,和一些问题的解决方式,给初次接触微信openid的朋友们一个参考。目的只在于获取openid,至于优化及应用上请自由发挥。

    openid是公众号的普通用户(粉丝)的一个唯一的标识,只针对当前的公众号有效。

     下面以php语言为例介绍如何获取微信用户openid。

一、准备工作

    首先你要有一个公众号,类型为服务号,还有一个外网可访问的域名(如果要映射公网服务器,需备案)。获取openid需要的公众号的 appid 和 secret(登录微信公众平台,在【开发】——>【基本配置】中的开发者ID(AppID)和 开发者密码(AppSecret)就是)。其次是设置网页授权域名(登陆微信公众平台,在【设置】——>【公众号设置】——>【功能设置】——>网页授权域名中按步骤操作并设置就好),这个域名就是你获取openid的web项目发布的域名,这里注意服务器请一定跑在80端口。

二、调用https://open.weixin.qq.com/connect/oauth2/authorize接口获取到code

public function getcode(){
        //基本配置
        $appid=**************;//这里填写你的appid
        $redirect_uri=urlencode("http://*********/getuserinfo");//这里用你的网页授权回调地址替换一下
        $url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
        header("location:".$url);
}

当用户用微信进入我们的网页并调用到getcode方法之后,若参数无误,设置的网页授权域名正确,微信就会重定向页面到我们提交的回调地址,同时我们想要的code也会被传过来。

三、得到code作为一个参数调用https://api.weixin.qq.com/sns/oauth2/access_token接口获取到openid

//回调函数
public function getuserinfo(){
        $appid  = "***********";//这里添加你的微信公众号appid
        $secret = "***********";//这里添加你的微信公众号secret
        //这里获取到了code
        $code   = $_GET['code'];
        //第一步:取得openid
        $oauth2Url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$secret."&code=".$code."&grant_type=authorization_code";
        $oauth2 = $this->http_curl($oauth2Url);
        //accestoken
        $access_token = $oauth2["access_token"];
        //openid
        $openid = $oauth2['openid'];
        
        //第二步:根据全局access_token和openid查询用户信息
        $get_user_info_url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
        $userinfo = $this->http_curl($get_user_info_url);

        dump($userinfo);
}

function http_curl($url){
        //用curl传参
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        //关闭ssl验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch,CURLOPT_HEADER, 0);
        $output = curl_exec($ch);
        curl_close($ch);
        return json_decode($output, true);
}

四、注意事项

1.网页授权域名设置如果与提交的回调地址的域名不对应,微信是无法回调到的。

2.单纯的获取openid使用的授权方式是静态授权,不需要经过用户许可的(用户看不到授权的过程),而想要获取用户的头像昵称等信息是另一种授权(用户端会弹出授权窗口)。

猜你喜欢

转载自blog.csdn.net/fuhanghang/article/details/82918163
今日推荐