PHP微信公众号服务器配置

  • 配置微信公众号
  • 代码

配置微信公众号

启用安全模式,详细文档可根据微信文档,这里提供了验证代码和接收信息怎么处理

代码

请注意,完全验证之后,输出echostr参数内容,记住请不要输出其他值,否则验证失败,还是不喜勿喷哈

<?phpclass Test
{private static $appEncodingAESKey = '';//消息加解密密钥(EncodingAESKey)private static $appToken = '';//令牌(Token)private static $appkey = '';//开发者ID(AppID)public function index(){try {/************ 公众号服务器验证 ************/$encodingAesKey = self::$appEncodingAESKey;$token = self::$appToken;$appId = self::$appkey;if (isset($_GET['echostr'])) {$echoStr = $_GET['echostr'];if (self::checkSignature($token)) {//完全验证之后,输出echostr参数内容,记住请不要输出其他值,否则验证失败echo $echoStr;die;}}/************ 以下接收公众号用户输入信息 ************///require_once引入微信官方PHP示例代码,下载地址:https://res.wx.qq.com/op_res/-serEQ6xSDVIjfoOHcX78T1JAYX-pM_fghzfiNYoD8uHVd3fOeC0PC_pvlg4-kmPrequire_once dirname(dirname(dirname(__DIR__))) . '/extend/wxserverdecryption/wxBizMsgCrypt.php';// 第三方发送消息给公众平台$timeStamp = (isset($_GET['timestamp'])) ? $_GET['timestamp'] : '';$nonce = (isset($_GET['nonce'])) ? $_GET['nonce'] : '';$pc = new \wxBizMsgCrypt($token, $encodingAesKey, $appId);// 第三方收到公众号平台发送的消息$msg = '';$msg_sign = (isset($_GET['msg_signature'])) ? $_GET['msg_signature'] : '';$from_xml = file_get_contents('php://input');$errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg);if ($errCode == 0) {$json = json_encode(simplexml_load_string($msg, 'SimpleXMLElement', LIBXML_NOCDATA));$json = json_decode($json, true);if (isset($json['MsgType']) && !empty($json['MsgType'])) {switch ($json['MsgType']) {case 'text'://接收到文本break;case 'image'://接收到图片break;case 'voice'://接收到语音break;case 'video'://接收到视频break;case 'music'://接收到音乐break;case 'news'://接收到图文break;case 'event'://接收到事件if (isset($json['Event']) && !empty($json['Event'])) {switch ($json['Event']) {case 'SCAN'://用户已关注公众号echo self::reply('text', $json, '你已关注');break;case 'subscribe'://用户关注公众号break;case 'unsubscribe'://用户取消关注公众号break;case 'CLICK'://自定义菜单事件break;case 'VIEW'://点击菜单跳转链接时的事件推送break;case 'LOCATION'://接收到位置$data['latitude'] = $json['Latitude'];//纬度$data['longitude'] = $json['Longitude'];//经度$data['precision'] = $json['Precision'];//精确度break;default:break;}}break;default:break;}}} else {file_put_contents('./err.log', $errCode . PHP_EOL, 8);}} catch (\Exception $e) {file_put_contents('./err.log', $e->getMessage() . PHP_EOL, 8);}}private static function reply($msgType, $json, $contentStr = ''){//FromUserName来自谁//ToUserName发给谁$time = $_SERVER['REQUEST_TIME'];$resultStr = '';if ($msgType == 'text') {$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>";$resultStr = sprintf($textTpl, $json['FromUserName'], $json['ToUserName'], $time, $msgType, $contentStr);} elseif ($msgType == 'image') {$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Image><MediaId><![CDATA[%s]]></MediaId></Image><FuncFlag>0</FuncFlag></xml>";$MediaId = '';$resultStr = sprintf($textTpl, $json['FromUserName'], $json['ToUserName'], $time, $msgType, $MediaId);} elseif ($msgType == 'voice') {$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Voice><MediaId><![CDATA[%s]]></MediaId></Voice><FuncFlag>0</FuncFlag></xml>";$MediaId = '';$resultStr = sprintf($textTpl, $json['FromUserName'], $json['ToUserName'], $time, $msgType, $MediaId);} elseif ($msgType == 'video') {$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Video><MediaId><![CDATA[%s]]></MediaId><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description></Video><FuncFlag>0</FuncFlag></xml>";$MediaId = '';$Title = '';$Description = '';$resultStr = sprintf($textTpl, $json['FromUserName'], $json['ToUserName'], $time, $msgType, $MediaId, $Title, $Description);} elseif ($msgType == 'music') {$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Music><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><MusicUrl><![CDATA[%s]]></MusicUrl><HQMusicUrl><![CDATA[%s]]></HQMusicUrl><ThumbMediaId><![CDATA[%s]]></ThumbMediaId></Music><FuncFlag>0</FuncFlag></xml>";$Title = '';$Description = '';$MusicUrl = '';$HQMusicUrl = '';$ThumbMediaId = '';$resultStr = sprintf($textTpl, $json['FromUserName'], $json['ToUserName'], $time, $msgType, $Title, $Description, $MusicUrl, $HQMusicUrl, $ThumbMediaId);} elseif ($msgType == 'news') {$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><ArticleCount>%s</ArticleCount><Articles><item><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><PicUrl><![CDATA[%s]]></PicUrl><Url><![CDATA[%s]]></Url></item></Articles><FuncFlag>0</FuncFlag></xml>";$ArticleCount = '';$Title = '';$Description = '';$PicUrl = '';$Url = '';$resultStr = sprintf($textTpl, $json['FromUserName'], $json['ToUserName'], $time, $msgType, $ArticleCount, $Title, $Description, $PicUrl, $Url);}return $resultStr;}//验证消息加解密private static function checkSignature($token){$signature = $_GET['signature'];$timestamp = $_GET['timestamp'];$nonce = $_GET['nonce'];$tmpArr = array($token, $timestamp, $nonce);sort($tmpArr);$tmpStr = implode($tmpArr);$tmpStr = sha1($tmpStr);if ($tmpStr == $signature) {return true;} else {return false;}}
}

PHP微信公众号服务器配置相关推荐

  1. 微信公众号自动回复服务器数据,[终极方案]解决微信公众号服务器配置启用后无法自动回...

    在配置服务器配置时Token验证通过后,遇到给公众号发信息,提示:提示该公众号提供的服务出现故障,请稍后再试 的问题,一直实现不了自动回复的功能.百度了大量的资料,参考了开发文档,尝试了n种办法,检查 ...

  2. SpringBoot微信公众号服务器配置案例

    前言 进行微信公众号开发,进行服务器配置是必不可少的,通过配置,公众号粉丝与公众号交互的消息将发送至开发者服务器,开发者对消息进行处理,例如:配置后,用户关注公众号或取关时,消息将发送至开发者配置的U ...

  3. 微信公众号服务器配置清空,微信公众号服务器配置(校验)(示例代码)

    简介这篇文章主要介绍了微信公众号服务器配置(校验)(示例代码)以及相关的经验技巧,文章约685字,浏览量290,点赞数9,值得推荐! public function serve() { $echoSt ...

  4. php 微信公众号服务器配置首次验证

    php 微信公众号服务器配置首次验证 首先要确定你有微信公众号和服务器: 登录微信公众号平台,左侧最下方的 开发->基本配置 我这里用了get_event方法接受验证,既你在服务器的丢出来一个可 ...

  5. Java微信公众号服务器配置/硬件平台服务器配置-验证Token

    最近在做微信硬件平台的东东,刚开始,没搞过, 先踩微信公众号服务器配置的坑吧! 首先进入微信公众平台->开发基本配置. 看看都需要啥子参数(先不填写): 1.你的服务器地址, 2.令牌Token ...

  6. 微信公众平台停用服务器配置,1.微信公众号服务器配置启用

    微信公众号开发首先要配置服务器,否则你只能使用一些简单功能,比如自动回复. 1.登录微信公众号并且进入开发的基本配置 image.png 2.微信开发中所有服务器配置是以get请求请求你所配置的服务器 ...

  7. java微信公众号服务器配置

    1.微信公众号配置 2.java端验证 /** * 微信公众号验证 * @return */ @RequestMapping(value = "/wechatAuth") @Res ...

  8. 微信公众号服务器配置详解一览

    我们在进行微信公众平台开发,基本都会遇到一个问题:配置服务器.....这个问题不大不小,还是挺繁琐的.......下图是配置完成后的样子,后面给大家详细介绍每一步的步骤: 下图为微信公众号开发验证机制 ...

  9. 微信公众号服务器配置 | Token失败问题 | 获取access_token

    自己申请了个公众号玩一下,需要配置服务器url地址.有的同学没域名,没服务器,想要测试下公众号功能怎么办,然后在网上找了下 有好多内网穿透软件- 花生壳,ngrok, natapp什么的- 比较了下, ...

  10. 微信公众号服务器配置token验证失败问题及菜单创建失败问题小结

    如果微信公众号的菜单需要调用我们自己后台代码接口的话,那么公众号后台的基本信息配置这里要启用服务器配置,如图: 如果在修改配置时提示token验证失败时,需要从两方面查找问题: ①.查看我们服务器上的 ...

最新文章

  1. 常见基本不等式的几何解释
  2. 300万奖金池,第二届“中国版ImageNet”开赛
  3. python中bytearray和java中byte[]的区别_Python经典面试题:说说Python中xrange和range的区别?...
  4. 一起来学Spring Cloud | 第五章:熔断器 ( Hystrix)
  5. MariaDB exists 学习
  6. 我国数据中心产业发展“渐入佳境” 服务是重中之重
  7. 如何在 ASP.NET CORE 中获取客户端 IP ?
  8. WebSocket 实现原理
  9. 正向运动学和反向运动学
  10. 全国计算机信息高新技术办公软件应用模块,全国计算机信息高新技术办公软件应用模块(Windows系列)教案.doc...
  11. vue安装axios以及如何使用axios
  12. Comsol学习——经典案例:水净化反应器
  13. 开源版禅道与jira bug关联
  14. 我们分析了10000条视频,终于知道了今日头条推荐系统的秘密
  15. 中华通史.上古史-夏
  16. Docker 如何安全地进入到容器内部
  17. MLO/uboot-spl.bin和uboot.img/uboot.bin
  18. 梁冬一席演讲:人生的最高境界是“不二”
  19. 《大象 Thinking in UML》学习笔记(一)——为什么需要UML?
  20. PLS-00103: 出现符号 在需要下列之一时 ( ; is with oracle利用存储过程设计定时器的问题

热门文章

  1. pycharm 输入法光标跟随
  2. 全民WIFI上网计划
  3. PreparedStatement 用法
  4. VUE生成二维码或条形码
  5. 中小学网络中心机房建设标准(试行)
  6. 智芯传感ZXP0电容式大气压力传感器 拓展多领域创新应用
  7. 用C++开发的双人对战五子棋
  8. 微信小程序开发相关资料
  9. 为什么使用工作流引擎,什么是工作流引擎,工作流引擎选型以及如何使用
  10. 索爱小蜜蜂扩音器怎么样啊~