PHP微信公众号开发
公众号调用接口
/*公众号*/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微信公众号开发相关推荐
- 微信公众号开发本地环境开发_如何在5分钟内使HTTPS在本地开发环境上工作
微信公众号开发本地环境开发 Almost any website you visit today is protected by HTTPS. If yours isn't yet, it shoul ...
- 微信公众号开发用书php,php微信公众号开发(3)php实现简单微信文本通讯
<PHP实战:PHP微信公众号开发(3)PHP实现简单微信文本通讯>要点: 本文介绍了PHP实战:PHP微信公众号开发(3)PHP实现简单微信文本通讯,希望对您有用.如果有疑问,可以联系我 ...
- 【微信公众号开发】获取并保存access_token、jsapi_ticket票据(可用于微信分享、语音识别等等)...
步骤一:首先得开通公众号(目的是 获得appid.AppSecret.设置安全域名)~ [公众号设置]→[功能设置] 设置相应的域名 步骤二:编写帮助类WeixinLuyinHelper中的代码 #r ...
- 微信公众号开发Django-网页授权
原文链接 对于基础的微信公众号开发,网页授权,JSSDK,图片处理应该是最重要的三部分了 根本上也是按照文档开发,技术含量并不高. (选Django=很多权限控制模块已经做好了,比较省力) 在开始之前 ...
- 慕课网_《Java微信公众号开发进阶》学习总结
时间:2017年08月12日星期六 说明:本文部分内容均来自慕课网.@慕课网:http://www.imooc.com 教学源码:http://img.mukewang.com/down/... 学习 ...
- 微信公众号开发之准备工作
这是微信公众号开发的第一步.是网页授权的那章的前提. 工作室有关一个订餐系统的开发,我对公众号开发比较感兴趣,所以参与这方面的学习. 本章主要讲述两个方面的内容,一是工具的准备,二是环境的配置. -- ...
- java微信公众号开发token验证失败的问题及解决办法
java微信公众号开发token验证失败的问题及解决办法 参考文章: (1)java微信公众号开发token验证失败的问题及解决办法 (2)https://www.cnblogs.com/beardu ...
- 微信公众号开发小记(二)--服务器验证
这篇是微信公众号开发小记的第二篇,承接上一篇,此次将完成如下主要功能 对接微信服务器和自己的服务器 需要的"材料" 到这里需要梳理一下都需要什么东西,以便在整个编码的过程中方便我们 ...
- 微信公众号开发小记——4.两种邀请用户的方式 扫码链接
描述 假设的我们的服务号有这么一些功能,比如底部有按钮,点击会有一些复杂的功能,这时候可能就需要一个用户系统,有用户系统就经常想要做什么分享邀请新用户之类的,这时候就又有几种方式,1.直接一个连接,让 ...
- 微信公众号开发入门教程第一篇
微信公众号开发入门教程第一篇 关键字:微信公众平台开发 作者:方倍工作室 在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/ ...
最新文章
- leetcoder reverse polish notation解题笔记
- Python: tkinter实例改名小工具
- PAT1050 螺旋矩阵 (25 分)【全部通过 关于段错误的原因 以及测试点7】
- arduino编程时加{}报错_使用Arduino开发板时最常见的10个错误
- 算法学习(四)——alphago模型
- java代码编写 银行存取款_用Java编写银行账户存取款业务,急求!!
- 流程图,NS图,伪代码
- Android矢量绘图
- 经典英文歌曲,爆好听!
- 使用C++实现CE中的代码注入
- 【斯坦福公开课-机器学习】1.机器学习的动机和应用(吴恩达 Andrew Ng)
- alertmanager 钉钉告警配置
- 从零开始的Java再学习-DAY10
- EPS坐标点格式转换
- 小程序毕设作品之微信校园浴室预约小程序毕业设计成品(6)开题答辩PPT
- 微信企业号_智能机器人_python3
- 科普_10MB宽带上传下载速度达到多少才算达标
- USB运动控制 (五轴雕刻机系统)全部开源
- 如何降低直通车推广的费用花销?影响因素有哪些?
- android升级刷机,安卓系统怎么升级 怎么刷机安卓系统
热门文章
- php octet stream,为什么上传图片时,type 显示application/octet-stream 呢? 原
- 计算机常见的运算符,常见运算符
- 全球与中国滴眼液和润滑剂市场深度研究分析报告
- 【论文分享】ACL 2020 立场检测相关研究
- 金蝶显示数据无法连接服务器,金蝶连接云服务器异常怎么回事
- 【Leetcode】打气球的最大分数 (暴力递归+动态规划)
- FLV格式转换成MP4格式使用什么软件好
- GB码和BIG5码的互换技术-foxpro版-摘自csdn-faq
- 奇迹服务器gs无响应,奇迹gs远程连接服务器
- html基础学习笔记