PHP微信公众号服务器配置
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微信公众号服务器配置相关推荐
- 微信公众号自动回复服务器数据,[终极方案]解决微信公众号服务器配置启用后无法自动回...
在配置服务器配置时Token验证通过后,遇到给公众号发信息,提示:提示该公众号提供的服务出现故障,请稍后再试 的问题,一直实现不了自动回复的功能.百度了大量的资料,参考了开发文档,尝试了n种办法,检查 ...
- SpringBoot微信公众号服务器配置案例
前言 进行微信公众号开发,进行服务器配置是必不可少的,通过配置,公众号粉丝与公众号交互的消息将发送至开发者服务器,开发者对消息进行处理,例如:配置后,用户关注公众号或取关时,消息将发送至开发者配置的U ...
- 微信公众号服务器配置清空,微信公众号服务器配置(校验)(示例代码)
简介这篇文章主要介绍了微信公众号服务器配置(校验)(示例代码)以及相关的经验技巧,文章约685字,浏览量290,点赞数9,值得推荐! public function serve() { $echoSt ...
- php 微信公众号服务器配置首次验证
php 微信公众号服务器配置首次验证 首先要确定你有微信公众号和服务器: 登录微信公众号平台,左侧最下方的 开发->基本配置 我这里用了get_event方法接受验证,既你在服务器的丢出来一个可 ...
- Java微信公众号服务器配置/硬件平台服务器配置-验证Token
最近在做微信硬件平台的东东,刚开始,没搞过, 先踩微信公众号服务器配置的坑吧! 首先进入微信公众平台->开发基本配置. 看看都需要啥子参数(先不填写): 1.你的服务器地址, 2.令牌Token ...
- 微信公众平台停用服务器配置,1.微信公众号服务器配置启用
微信公众号开发首先要配置服务器,否则你只能使用一些简单功能,比如自动回复. 1.登录微信公众号并且进入开发的基本配置 image.png 2.微信开发中所有服务器配置是以get请求请求你所配置的服务器 ...
- java微信公众号服务器配置
1.微信公众号配置 2.java端验证 /** * 微信公众号验证 * @return */ @RequestMapping(value = "/wechatAuth") @Res ...
- 微信公众号服务器配置详解一览
我们在进行微信公众平台开发,基本都会遇到一个问题:配置服务器.....这个问题不大不小,还是挺繁琐的.......下图是配置完成后的样子,后面给大家详细介绍每一步的步骤: 下图为微信公众号开发验证机制 ...
- 微信公众号服务器配置 | Token失败问题 | 获取access_token
自己申请了个公众号玩一下,需要配置服务器url地址.有的同学没域名,没服务器,想要测试下公众号功能怎么办,然后在网上找了下 有好多内网穿透软件- 花生壳,ngrok, natapp什么的- 比较了下, ...
- 微信公众号服务器配置token验证失败问题及菜单创建失败问题小结
如果微信公众号的菜单需要调用我们自己后台代码接口的话,那么公众号后台的基本信息配置这里要启用服务器配置,如图: 如果在修改配置时提示token验证失败时,需要从两方面查找问题: ①.查看我们服务器上的 ...
最新文章
- 常见基本不等式的几何解释
- 300万奖金池,第二届“中国版ImageNet”开赛
- python中bytearray和java中byte[]的区别_Python经典面试题:说说Python中xrange和range的区别?...
- 一起来学Spring Cloud | 第五章:熔断器 ( Hystrix)
- MariaDB exists 学习
- 我国数据中心产业发展“渐入佳境” 服务是重中之重
- 如何在 ASP.NET CORE 中获取客户端 IP ?
- WebSocket 实现原理
- 正向运动学和反向运动学
- 全国计算机信息高新技术办公软件应用模块,全国计算机信息高新技术办公软件应用模块(Windows系列)教案.doc...
- vue安装axios以及如何使用axios
- Comsol学习——经典案例:水净化反应器
- 开源版禅道与jira bug关联
- 我们分析了10000条视频,终于知道了今日头条推荐系统的秘密
- 中华通史.上古史-夏
- Docker 如何安全地进入到容器内部
- MLO/uboot-spl.bin和uboot.img/uboot.bin
- 梁冬一席演讲:人生的最高境界是“不二”
- 《大象 Thinking in UML》学习笔记(一)——为什么需要UML?
- PLS-00103: 出现符号 在需要下列之一时 ( ; is with oracle利用存储过程设计定时器的问题