微信公众号开发获取openID以及用户详细信息

本文介绍如何搭建一套微信签到、抽奖系统。主要内容包括前期准备步骤,如授权权限设置及填写接口信息,并提供源码实现,涵盖获取用户OpenID、验证签名等关键功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载文章,做一个记录,以备不时之需

    需要做一套微信签到、抽奖系统,我要在后台存储微信用户的相关信息,openIDNickname之类的信息。在开发前有一点准备工作,先去授权权限,在权限表里进行设置,如图:

    

填写这个网站地址的时候一定要注意填写域名路径,没有http头,就是你的域名而已,在该域名下的所有页面都可访问到,被授权。

好了初期的准备工作做好了,下来填写公众测试号的一些信息。

填写你的接口信息:

这里的url须填写你的接口地址,(在我下面的代码里调用valid()方法),在代码里设置一个token,和此处你填写的token保持一致。不然你会发现总是设置失败。

接下来就是源码,直接上代码吧:

<?php
define("TOKEN", "shiva");
class Wechatsign extends Back_Controller{
    private $appId;
    private $appSecret;
    public function  __construct($appId, $appSecret){
       $this->appId = '你自己的APPID';  
       $this->appSecret= '你自己的APPSECRET';  
       
    }
    
    public function getBaseInfo(){
        //1.获取到code        
        $redirect_uri=urlencode("http://你的域名/Wechatsign/getUserOpenId");//这里的地址需要http://
        $url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$this->appId."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect";
        header('location:'.$url);
    }
 
    public function getUserOpenId(){
        //2.获取到网页授权的access_token        
        $code = $_GET['code'];
        $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$this->appId."&secret=".$this->appSecret."&code=".$code."&grant_type=authorization_code ";
        //3.拉取用户的openid
        $res = $this->http_curl($url);
        echo $res;//打印即可看到用户的openid
        $data = json_decode($res,true);
        if(!empty($data['access_token']) && !empty($data['openid'])){
            $url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$data['access_token']."&openid=".$data['openid']."&lang=zh_CN"; 
            $userInfo = $this->http_curl($url);
            echo $userInfo;
        }
    }
    
    public function valid(){
        $echoStr = $_GET["echostr"];
        //valid signature , option
        if($this->checkSignature()){
            echo $echoStr;
            exit;        
        }
    }
    
    
    private function checkSignature(){
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];     
        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
 
    }
    
    
    public function http_curl($url){
        $curl = curl_init();
        //设置抓取的url
        curl_setopt($curl, CURLOPT_URL, $url);
        //设置头文件的信息作为数据流输出
        curl_setopt($curl, CURLOPT_HEADER, 0);
        //设置获取的信息以文件流的形式返回,而不是直接输出。
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        //执行命令
        $data = curl_exec($curl);
        //关闭URL请求
        curl_close($curl);
        //显示获得的数据
        return $data;
    }
    
}

 
  1.  
### 通过 UnionID 获取微信公众号用户信息 为了利用 UnionID 来获取微信公众号中的用户信息,开发者需遵循特定流程来实现这一目标。UnionID 是指当同一开放平台账号下的不同应用被同一个微信用户关注或绑定时,这些应用间可以获取到该用户的统一标识符——即 UnionID。 #### 准备工作 确保已获得用户的同意并通过 OAuth2.0 授权码模式获得了 `code` 参数以及对应的 OpenID 和 Access Token。对于已经绑定了相同开放平台账户的应用程序来说,在获取到了某个用户OpenID 后还可以进一步得到其 UnionID[^2]。 #### 正确构建 API 请求 URL 一旦拥有了必要的参数(如 AppID, Secret, Code),就可以向微信服务器发送请求以换取 access_token: ```http GET https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code ``` 接着使用返回的结果中的 openid 或者 unionid 构建如下形式的信息查询URL: ```http GET https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN ``` 如果要基于 UnionID 查询,则替换其中的 OPENID 字段为 UNIONID 即可[^1]。 需要注意的是,并不是所有的场景下都能直接拿到 UnionID;只有在同一开放平台内的多个应用之间共享数据时才会涉及到此字段。因此,在设计应用程序逻辑前应当确认当前环境是否满足条件[^3]。 另外值得注意的一点是在本地环境中调试可能会遇到一些权限上的限制,建议按照官方指南完成相应的配置调整以便顺利进行开发测试工作[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值