thinkphp5微信公众号二维码扫码关注推广二维码事件实现,

给出实现的全部方法:

获取二维码,让微信公众号跳转到以下代码的code方法即可,用户点击二维码后,通过二维码获取关注用户信息及二维码推广者信息,以及判断用户是否关注,具体代码逻辑在以下代码responseMsg方法,但需要在公众平台url配置接入到以下代码的index方法,用户关注后,则通过index方法访问responseMsg方法。

<?phpnamespace app\home\controller;define("TOKEN", "xieqianghui1234");use think\Controller;
use app\home\model\reIndex;class Index extends Controller{private $appId;private $appSecret;public function  __construct(){$this->appId = 'wx17aaa90e1f107245';  $this->appSecret= '8bd13c549f07c6e365f818e113dee821'; }// 获取codepublic function code(){$appid  = 'wx17aaa90e1f107245';$redirecturl = urlencode("http://www.neophiledesign.com/kfgzh/public/index.php/home/index/member");$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.$redirecturl.'&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';header('location:'.$url);}// 通过ticket换取二维码public function wechatcode($ticket){$url = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket='.urlencode($ticket);return $this->getjson($url);}// 二维码呈现public function member(){$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';$res = $this->curl_post($url);// 用户openid$openid = $res['openid'];$recode = (new reIndex)->reselect($openid); header("Content-Type: image/jpeg;text/html; charset=utf-8");if(!$recode){$rand = mt_rand(0,9).mt_rand(0,9).mt_rand(0,9).mt_rand(0,9);$arr = array();$arr = array('openid' => $openid,'code'   => $rand,);(new reIndex)->readd($arr); $res = $this->reindex();$access_token = $res['access_token'];// 获取ticket$url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$access_token;$list = array();$list = array('action_name'  => 'QR_LIMIT_SCENE','action_info' =>  array('scene' => array('scene_id'  => $rand,),), );// 获取ticket$res = $this->curl_post($url,json_encode($list),'POST');// 通过ticket换取二维码$res = $this->wechatcode($res['ticket']);$file = fopen(dirname(dirname(dirname(__DIR__)))."/image/".$rand."upload.jpg","w");fwrite($file,$res);//写入fclose($file);//关闭$img = "http://www.neophiledesign.com/kfgzh/image/".$rand."upload.jpg";}else{$img = "http://www.neophiledesign.com/kfgzh/image/".$recode."upload.jpg";}echo "<img src=$img />";}// 获取access_tokenpublic function reindex(){$appid  = 'wx17aaa90e1f107245';$secret = '8bd13c549f07c6e365f818e113dee821';$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret;$res = $this->curl_post($url);return  $res;}// 获取用户信息及openidpublic function retest($access_token){$url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$access_token.'&openid=OPENID&lang=zh_CN';return $this->getJson($url);}// token验证public function index(){if ($this->checkSignature()==false) {die('非法请求');}if (isset($_GET["echostr"])) {$echostr = $_GET["echostr"];echo $echostr;exit();} else {$this->responseMsg();}}public function responseMsg(){//get post data, May be due to the different environments$postStr = file_get_contents("php://input");if (!empty($postStr)){libxml_disable_entity_loader(true);$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$fromUsername = $postObj->FromUserName;$toUsername = $postObj->ToUserName;//  $keyword = trim($postObj->Content);$time = time();$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";     if($postObj->MsgType == 'event'){$res = $this->reindex();// 获取access_token$access_token = $res['access_token'];$msgType = "text";// 通过二维码进入if(isset($postObj->EventKey) && $postObj->EventKey != ''){$tgzid = $postObj->EventKey;if(substr($tgzid,8)){$retgzid = substr($tgzid,8);$openid = (new reIndex)->rereselect($retgzid);if($openid != $fromUsername){$sharesum = (new reIndex)->reupdate($openid);$url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$access_token.'&openid='.$fromUsername.'&lang=zh_CN';$re = json_decode($this->getjson($url),true);$contentStr = '你好,'.$re['nickname'].'欢迎关注香港葵芳!';    $url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$access_token;$data = array();$data = array("touser"  => $openid,"msgtype" => "text","text" =>array("content" => "已成功分享给用户".$re['nickname']."已成功分享".$sharesum.'次'));$res = $this->getjson($url,json_encode($data,JSON_UNESCAPED_UNICODE));var_dump($res);}}else{$url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$access_token.'&openid='.$fromUsername.'&lang=zh_CN';$re = json_decode($this->getjson($url),true);$contentStr = '你好,'.$re['nickname'].'欢迎关注香港葵芳!'; }}else{if($postObj->Event == 'subscribe'){$url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$access_token.'&openid='.$fromUsername.'&lang=zh_CN';$re = json_decode($this->getjson($url),true);$contentStr = '你好,'.$re['nickname'].'欢迎关注香港葵芳!';  }    }$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);echo $resultStr;}}else {exit;}}// public function curl_post($url, $data=null,$method='GET', $https=true){// 创建一个新cURL资源 $ch = curl_init();   // 设置URL和相应的选项 curl_setopt($ch, CURLOPT_URL, $url);  //要访问的网站 //启用时会将头文件的信息作为数据流输出。curl_setopt($ch, CURLOPT_HEADER, false);   //将curl_exec()获取的信息以字符串返回,而不是直接输出。 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);     if($https){ //FALSE 禁止 cURL 验证对等证书(peer's certificate)。 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //验证主机 } if($method == 'POST'){ curl_setopt($ch, CURLOPT_POST, true); //发送 POST 请求  //全部数据使用HTTP协议中的 "POST" 操作来发送。 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); }    // 抓取URL并把它传递给浏览器 $content = curl_exec($ch);   //关闭cURL资源,并且释放系统资源 curl_close($ch);   return json_decode($content,true);}}public function getjson($url,$data=null){$curl = curl_init();curl_setopt($curl,CURLOPT_URL,$url);curl_setopt($curl, CURLOPT_HEADER,false);   curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false);//不为空,使用post传参数,否则使用getif($data){curl_setopt($curl,CURLOPT_POST,1);curl_setopt($curl,CURLOPT_POSTFIELDS,$data);}curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);$output = curl_exec($curl);curl_close($curl);return $output;}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;}}}

thinkphp5+php微信公众号二维码扫码关注推广二维码事件实现相关推荐

  1. PHP curl模拟表单上传文件 微信公众号素材管理接口crul文件上传核心源码

    PHP curl模拟表单上传文件  微信公众号素材管理接口crul文件上传核心源码 /*** curl 上传文件* @param $url* @param $filePath* @param stri ...

  2. ThinkPHP5.0微信公众号开发之 微信公众号接入

    ThinkPHP5.0 微信公众号接入 第一步:准备工作 首先,要有自己的公众号(这句是废话),个人可以申请微信公众号的订阅号,企业才可以申请服务号,其次要有云空间或者服务器,并且将服务器IP添加至微 ...

  3. 关注微信公众号使其自动发送欢迎你关注消息

    关注微信公众号使其自动发送欢迎你关注消息 一般我们关注微信公众号时.他都会自动推送一条消息.欢迎您关注了某公众号.而今天我们所做的就是这个功能. 关注公众号时我们需要获取到用户的一些个人基本信息. 而 ...

  4. 微信公众号页面如何跳转至关注公众号页面

    微信公众号页面如何跳转至关注公众号页面 1.获取微信公众号biz字段 a.点击公众号 历史文章,在浏览器中打开 b.鼠标右键,查看网页源代码 c.复制红框的字段 即为biz字段 2.拼接biz字段成完 ...

  5. wechat-0051,微信公众号,第三方登录—扫码绑定

    声明:这边所谓的第三方登录,不是通过网页授权的方式,而是利用生成带参数的二维码,将微信号和平台账号绑定实现.如果你要做的是授权登录,请查看 https://blog.csdn.net/wrongyao ...

  6. 微信公众号如何配置关键词自动回复小程序链接和太阳码?

    一.如何配置微信公众号关键词回复小程序链接? 1. 首先登录想要配置的公众号,找到关键词回复,点击添加回复. 2. 填写规则名称.填写关键词按需求选择全匹配或半匹配,点击文字 3. 填写如下代码,确认 ...

  7. 微信公众号开发中遇到的问题——支付(二)

    第一次开发微信公众号,也是第一次接触微信公众号的支付,我使用的是jssdk,用h5页面调用的支付,后台使用的是java.首先声明,我不是一个愤世嫉俗的人,也不喜欢吐槽,我认为别人提供接口就已经很不错了 ...

  8. 基于Spring Boo微信公众号授权登录获取用户信息(附带完整源码)

    简介 微信公众号开发中,必不少可少的一环:公众号授权登录.获取微信用户信息. 本地完整运行环境准备 内网渗透=>生成本地指定端口映射的外网域名 传送门:内网渗透工具Natapp使用详解 域名生成 ...

  9. java微信公众平台接口封装源码_微信公众号对接第三方平台(全网发布 java)源码 含 jar...

    [实例简介] 微信公众号对接第三方平台(全网发布 java)源码+jar 里面有完成全网发布的源码直接tomcat部署运行和所需的jar 具体对接流程,关注我们的博客 http://blog.csdn ...

最新文章

  1. HDU-1789-Doing Homework again
  2. 特斯联再获20亿元融资,跻身AIoT独角兽,光大京东讯飞万达入股
  3. Web前端开发css基础样式总结
  4. Py之pyquery:pyquery的简介、安装、使用方法之详细攻略
  5. Thinkphp 逻辑与,逻辑或的复合查询
  6. nyoj 1216 整理图书(dp)
  7. 27岁博士毕业,32岁成清华博导!黄高助理教授:DenseNet发明者
  8. 关于三星某些系列笔记本电脑无法安装Windows10的原因及解决办法
  9. java 蓝桥杯算法训练 筛选号码(题解)
  10. 费纸箱手工制作机器人_环保手工:怎么把纸箱废物利用制作立体小猫(步骤图解)...
  11. linux用命令行运行matlab的.mat文件
  12. 如何在前端中使用protobuf(vue篇)
  13. Spring MVC @JsonView注解使用
  14. 服务器显示A40故障码,奔驰E400L仪表显示“主动车道保持系统停止运作”
  15. lycos搜索引擎_Lycos中国推出全新搜索引擎
  16. linux系统打开m3u8文件,Linux下载m3u8流视频并合并ts文件
  17. gma 教程 | 气候气象 | 基于 彭曼-蒙提斯法(Penman-Monteith)计算日作物参考蒸散量(ET0)
  18. 放弃了灰色轨迹的人,放弃了木马帝国的人(ALLyeSNO)
  19. 「机密计算-隐私计算」科普
  20. Linux命令卸载谷歌浏览器,linux系统安装和卸载google浏览器

热门文章

  1. dns提供商主机名_Android Pie 私人 DNS 使用教程
  2. 【mssql】SQL Server2012编程入门经典(第四版)(上) 读书笔记
  3. python搭建微信小程序卖货要收费用吗_开发一个微信小程序需要多少钱?
  4. 取消pycharm双击shift出现搜索框,但新版找不到ide.suppress.double.click.handler的问题解决
  5. 光阴似锦,关于身体保养的那些事
  6. MySQL性能优化(三)Buffer Pool实现原理
  7. 理解网络交换机的原理
  8. image失败 安装scikit_安装SciKitImage错误127
  9. Windows下的扩展文件名
  10. Not an managed type