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

    好久没有发过博文了,恰好这两天做了一个关于微信公众号开发的东东,拿出来和大家分享一下。

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

    


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

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

填写你的接口信息:

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

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

[php]  view plain  copy
  1. <?php  
  2. define("TOKEN""shiva");  
  3. class Wechatsign extends Back_Controller{  
  4.     private $appId;  
  5.     private $appSecret;  
  6.     public function  __construct($appId$appSecret){  
  7.        $this->appId = '你自己的APPID';    
  8.        $this->appSecret= '你自己的APPSECRET';    
  9.          
  10.     }  
  11.       
  12.     public function getBaseInfo(){  
  13.         //1.获取到code          
  14.         $redirect_uri=urlencode("http://你的域名/Wechatsign/getUserOpenId");//这里的地址需要http://  
  15.         $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";  
  16.         header('location:'.$url);  
  17.     }  
  18.   
  19.     public function getUserOpenId(){  
  20.         //2.获取到网页授权的access_token          
  21.         $code = $_GET['code'];  
  22.         $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$this->appId."&secret=".$this->appSecret."&code=".$code."&grant_type=authorization_code ";  
  23.         //3.拉取用户的openid  
  24.         $res = $this->http_curl($url);  
  25.         echo $res;//打印即可看到用户的openid  
  26.         $data = json_decode($res,true);  
  27.         if(!empty($data['access_token']) && !empty($data['openid'])){  
  28.             $url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$data['access_token']."&openid=".$data['openid']."&lang=zh_CN";   
  29.             $userInfo = $this->http_curl($url);  
  30.             echo $userInfo;  
  31.         }  
  32.     }  
  33.       
  34.     public function valid(){  
  35.         $echoStr = $_GET["echostr"];  
  36.         //valid signature , option  
  37.         if($this->checkSignature()){  
  38.             echo $echoStr;  
  39.             exit;          
  40.         }  
  41.     }  
  42.       
  43.       
  44.     private function checkSignature(){  
  45.         $signature = $_GET["signature"];  
  46.         $timestamp = $_GET["timestamp"];  
  47.         $nonce = $_GET["nonce"];       
  48.         $token = TOKEN;  
  49.         $tmpArr = array($token$timestamp$nonce);  
  50.         sort($tmpArr);  
  51.         $tmpStr = implode( $tmpArr );  
  52.         $tmpStr = sha1( $tmpStr );  
  53.         if$tmpStr == $signature ){  
  54.             return true;  
  55.         }else{  
  56.             return false;  
  57.         }  
  58.   
  59.     }  
  60.       
  61.       
  62.     public function http_curl($url){  
  63.         $curl = curl_init();  
  64.         //设置抓取的url  
  65.         curl_setopt($curl, CURLOPT_URL, $url);  
  66.         //设置头文件的信息作为数据流输出  
  67.         curl_setopt($curl, CURLOPT_HEADER, 0);  
  68.         //设置获取的信息以文件流的形式返回,而不是直接输出。  
  69.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
  70.         //执行命令  
  71.         $data = curl_exec($curl);  
  72.         //关闭URL请求  
  73.         curl_close($curl);  
  74.         //显示获得的数据  
  75.         return $data;  
  76.     }  
  77.       
  78. }  
代码 很简单,不复杂,应该能看懂(如果看不懂去看一下微信的开发者文档)。有一点很重要,如果你要获取用户的基本信息比如性别、昵称,头像,地址之类的信息的话,你要注意我getBaseInfo()方法里的url中有一个参数scope他的值一定是snsapi_userinfo,别直接拿微信开发文档里的url过来用,他给的值是snsapi_base。需要你注意改一下,我已经改好了,但还是写出来让大家了解一下。

ok,将http://你的域名/接口,这个地址复制到草料二维码,生成二维码后扫一扫,你就能看到结果信息了,按我的绝对没问题哦。如果有用的话,就点个赞吧。

予人玫瑰,手有余香

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值