版权声明:本文为博主原创文章,未经博主允许不得转载。如需转载请带上我的链接哟 https://blog.csdn.net/lzy0613/article/details/79026205
好久没有发过博文了,恰好这两天做了一个关于微信公众号开发的东东,拿出来和大家分享一下。
需要做一套微信签到、抽奖系统,我要在后台存储微信用户的相关信息,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;
- }
- }
ok,将http://你的域名/接口,这个地址复制到草料二维码,生成二维码后扫一扫,你就能看到结果信息了,按我的绝对没问题哦。如果有用的话,就点个赞吧。
予人玫瑰,手有余香