公众号调用接口

 /*公众号*/public function check_server(){   //校验服务器地址URL 如果第一次需要验证if (isset($_GET['echostr'])) {$this->valid();} else {//公众号正式操作$this->responseMsg();$this->setMenu();}}

一、第一次验证公众号

 //验证private function valid(){$echoStr = $_GET["echostr"];if ($this->checkSignature()) {header('content-type:text');echo $echoStr;exit;} else {echo $echoStr . '+++' . WXTOKEN;exit;}}//验签private function checkSignature(){$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$nonce = $_GET["nonce"];$token = WXTOKEN;$tmpArr = array($token, $timestamp, $nonce);sort($tmpArr, SORT_STRING);$tmpStr = implode($tmpArr);$tmpStr = sha1($tmpStr);if ($tmpStr == $signature) {return true;} else {return false;}}

二、公众号相关操作

 //公众号自动回复消息和关注回复消息public function responseMsg(){//file_get_contents()$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//extract post dataif (!empty($postStr)) {libxml_disable_entity_loader(true);$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);//$file = fopen("/var/www/html/ecshop/api/app/ceshi.log", "a+");//创建文件或打开文件// fwrite($file, '接收类型' . '----'.json_encode($postObj).'-------------------' . date('Y-m-d H:i:s', time()) . "\r\n");$fromUsername = $postObj->FromUserName;$toUsername = $postObj->ToUserName;$keyword = trim($postObj->Content);$time = time();$msgType = $postObj->MsgType; //消息类型$event = $postObj->Event; //时间类型,subscribe(订阅)、unsubscribe(取消订阅)$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";$contentStr = "默认回复的文本";switch ($msgType) {case "event":if ($event == "subscribe") {$contentStr = '<a data-miniprogram-appid="小程序appid" data-miniprogram-path="小程序路径" data-miniprogram-nickname="小程序名可不填" data-miniprogram-type="text" href="">用户关注公众号返回信息</a>';}break;case "text":if (strpos($keyword, '退款') !== false || strpos($keyword, '退钱') !== false) {$contentStr = '检测到对应文本返回';// $again = true;} elseif (strpos($keyword, '客服') !== false || strpos($keyword, '投诉') !== false || strpos($keyword, '订单') !== false) {$contentStr = '检测到对应文本返回';}break;}if ($event == "CLICK" && $postObj->EventKey == "business_cooperation") {$contentStr = '点击自定义菜单返回';}$msgType = "text";$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);echo $resultStr;} else {echo "";exit;}}//设置自定义菜单private function setMenu(){$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $this->getToken();$data = '{"button":[{"type":"miniprogram", //跳转小程序"name":"菜单名1","url":"备用地址","appid":"小程序appid","pagepath":"小程序页面地址"},{"type":"miniprogram", //跳转小程序"name":"菜单名2","url":"备用地址","appid":"小程序appid","pagepath":"小程序页面地址"},{"type":"click",  //点击回复"name":"菜单名3","key":"business_cooperation" //回复消息时接收的KEY自定义}]}';$resArr = $this->httpRequest($url, $data);var_dump($resArr);}
//获取token
public function getToken($type = 0){$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=appSecret";$res = json_decode($this->httpGet($url));$access_token = $res->access_token;return $access_token;}
//请求借口private function httpGet($url){$curl = curl_init();curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);curl_setopt($curl, CURLOPT_TIMEOUT, 500);curl_setopt($curl, CURLOPT_URL, $url);$res = curl_exec($curl);curl_close($curl);return $res;}private function httpRequest($url, $data = null){$ch = curl_init();//3.设置参数curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //跳过证书验证curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  // 从证书中检查SSL加密算法是否存在//4.调用接口if (!empty($data)) {curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);}$res = curl_exec($ch);if (substr($res, 0, 3) == pack("CCC", 0xEF, 0xBB, 0xBF)) $res = substr($res, 3);$resArr = json_decode($res, true);//5.关闭curlcurl_close($ch);return $resArr;}

关注公众号技术谈论:靳某某的PHP爬坑之旅

PHP微信公众号开发相关推荐

  1. 微信公众号开发本地环境开发_如何在5分钟内使HTTPS在本地开发环境上工作

    微信公众号开发本地环境开发 Almost any website you visit today is protected by HTTPS. If yours isn't yet, it shoul ...

  2. 微信公众号开发用书php,php微信公众号开发(3)php实现简单微信文本通讯

    <PHP实战:PHP微信公众号开发(3)PHP实现简单微信文本通讯>要点: 本文介绍了PHP实战:PHP微信公众号开发(3)PHP实现简单微信文本通讯,希望对您有用.如果有疑问,可以联系我 ...

  3. 【微信公众号开发】获取并保存access_token、jsapi_ticket票据(可用于微信分享、语音识别等等)...

    步骤一:首先得开通公众号(目的是 获得appid.AppSecret.设置安全域名)~ [公众号设置]→[功能设置] 设置相应的域名 步骤二:编写帮助类WeixinLuyinHelper中的代码 #r ...

  4. 微信公众号开发Django-网页授权

    原文链接 对于基础的微信公众号开发,网页授权,JSSDK,图片处理应该是最重要的三部分了 根本上也是按照文档开发,技术含量并不高. (选Django=很多权限控制模块已经做好了,比较省力) 在开始之前 ...

  5. 慕课网_《Java微信公众号开发进阶》学习总结

    时间:2017年08月12日星期六 说明:本文部分内容均来自慕课网.@慕课网:http://www.imooc.com 教学源码:http://img.mukewang.com/down/... 学习 ...

  6. 微信公众号开发之准备工作

    这是微信公众号开发的第一步.是网页授权的那章的前提. 工作室有关一个订餐系统的开发,我对公众号开发比较感兴趣,所以参与这方面的学习. 本章主要讲述两个方面的内容,一是工具的准备,二是环境的配置. -- ...

  7. java微信公众号开发token验证失败的问题及解决办法

    java微信公众号开发token验证失败的问题及解决办法 参考文章: (1)java微信公众号开发token验证失败的问题及解决办法 (2)https://www.cnblogs.com/beardu ...

  8. 微信公众号开发小记(二)--服务器验证

    这篇是微信公众号开发小记的第二篇,承接上一篇,此次将完成如下主要功能 对接微信服务器和自己的服务器 需要的"材料" 到这里需要梳理一下都需要什么东西,以便在整个编码的过程中方便我们 ...

  9. 微信公众号开发小记——4.两种邀请用户的方式 扫码链接

    描述 假设的我们的服务号有这么一些功能,比如底部有按钮,点击会有一些复杂的功能,这时候可能就需要一个用户系统,有用户系统就经常想要做什么分享邀请新用户之类的,这时候就又有几种方式,1.直接一个连接,让 ...

  10. 微信公众号开发入门教程第一篇

    微信公众号开发入门教程第一篇 关键字:微信公众平台开发 作者:方倍工作室 在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/ ...

最新文章

  1. leetcoder reverse polish notation解题笔记
  2. Python: tkinter实例改名小工具
  3. PAT1050 螺旋矩阵 (25 分)【全部通过 关于段错误的原因 以及测试点7】
  4. arduino编程时加{}报错_使用Arduino开发板时最常见的10个错误
  5. 算法学习(四)——alphago模型
  6. java代码编写 银行存取款_用Java编写银行账户存取款业务,急求!!
  7. 流程图,NS图,伪代码
  8. Android矢量绘图
  9. 经典英文歌曲,爆好听!
  10. 使用C++实现CE中的代码注入
  11. 【斯坦福公开课-机器学习】1.机器学习的动机和应用(吴恩达 Andrew Ng)
  12. alertmanager 钉钉告警配置
  13. 从零开始的Java再学习-DAY10
  14. EPS坐标点格式转换
  15. 小程序毕设作品之微信校园浴室预约小程序毕业设计成品(6)开题答辩PPT
  16. 微信企业号_智能机器人_python3
  17. 科普_10MB宽带上传下载速度达到多少才算达标
  18. USB运动控制 (五轴雕刻机系统)全部开源
  19. 如何降低直通车推广的费用花销?影响因素有哪些?
  20. android升级刷机,安卓系统怎么升级 怎么刷机安卓系统

热门文章

  1. php octet stream,为什么上传图片时,type 显示application/octet-stream 呢? 原
  2. 计算机常见的运算符,常见运算符
  3. 全球与中国滴眼液和润滑剂市场深度研究分析报告
  4. 【论文分享】ACL 2020 立场检测相关研究
  5. 金蝶显示数据无法连接服务器,金蝶连接云服务器异常怎么回事
  6. 【Leetcode】打气球的最大分数 (暴力递归+动态规划)
  7. FLV格式转换成MP4格式使用什么软件好
  8. GB码和BIG5码的互换技术-foxpro版-摘自csdn-faq
  9. 奇迹服务器gs无响应,奇迹gs远程连接服务器
  10. html基础学习笔记