PHP微信开发之文本自动回复


Posted in PHP onJune 23, 2016

首先,先去微信公众平台注册一个账号(注册要填的东西挺多的),注册好之后,登录进去。可以看到左侧的“开发者中心”,开启开发者中心前好像还要你完善一些资料,按照步骤完善即可。进入开发者中心之后,先去编辑

PHP微信开发之文本自动回复

修改配置,修改配置的时候,注意:

PHP微信开发之文本自动回复

URL是你自己的域名下的PHP脚本(往下读有该脚本的demo),该脚本用于和微信接口对接。比如http://www.example.com/weixin.php 

Token是上述脚本里的定义的一个常量,比如你的PHP脚本里定义了: 

define("TOKEN", "my_weixin"); 

 那么,在填写Token时,你就填abcdefgh

EncodingAESKey是消息加密用。你可以自己写一个43为的数字和字母的组合,也可以选择“随机生成”,一般选择随机生成即可。

填好之后,保存(如果保存时,提示Token验证失败,那么请确认token一致并多点几次保存试试)。 

保存好之后,点击修改配置旁的:“开启”。

然后,就可以编辑你的PHP脚本了。(如果你没有自己的域名,可以使用新浪云的免费的SAE,并最好完成实名认证)
 demo的脚本如下:关注该公众平台(比如订阅号之后),功能是:输入hehe则返回hello world!!!如果输入其他字符,则返回输入heeh试试。 

header('content-type:text/html;charset=utf-8');

define("TOKEN", "my_weixin"); //define your token
$wx = new wechatCallbackapiTest();

if($_GET['echostr']){
 $wx->valid(); //如果发来了echostr则进行验证
}else{
 $wx->responseMsg(); //如果没有echostr,则返回消息
}


class wechatCallbackapiTest{

 public function valid(){ //valid signature , option

  $echoStr = $_GET["echostr"];
  if($this->checkSignature()){ //调用验证字段
   echo $echoStr;
   exit;
  }
 }

 public function responseMsg(){
  
 //get post data, May be due to the different environments
  $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //接收微信发来的XML数据

  //extract post data
 if(!empty($postStr)){
    
   //解析post来的XML为一个对象$postObj
   $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
  
   $fromUsername = $postObj->FromUserName; //请求消息的用户
   $toUsername = $postObj->ToUserName; //"我"的公众号id
   $keyword = trim($postObj->Content); //消息内容
   $time = time(); //时间戳
   $msgtype = 'text'; //消息类型:文本
   $textTpl = "<xml>
  <ToUserName><![CDATA[%s]]></ToUserName>
  <FromUserName><![CDATA[%s]]></FromUserName>
  <CreateTime>%s</CreateTime>
  <MsgType><![CDATA[%s]]></MsgType>
  <Content><![CDATA[%s]]></Content>
  </xml>";

  if($keyword == 'hehe'){
    $contentStr = 'hello world!!!';
    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);
    echo $resultStr;
    exit();            
   }else{
    $contentStr = '输入hehe试试';
    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);
    echo $resultStr;
    exit();
   }

  }else {
   echo "";
   exit;
  }
 }
 
 //验证字段
 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;
 }
 }
}

如果发送消息,系统提示:该公众平台暂时不能提共服务,请稍后再试。那么多半是代码语法有问题,检查好语法错误再试试。

附:

在新用户关注你的公众号时,自动返回信息:(把这段代码加在判断$keyword之前)。

if($postObj->MsgType == 'event'){ //如果XML信息里消息类型为event
    if($postObj->Event == 'subscribe'){ //如果是订阅事件
     $contentStr = "欢迎订阅misaka去年夏天!\n更多精彩内容:http://blog.csdn.net/misakaqunianxiatian";
     $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);
     echo $resultStr;
     exit();
    }
   }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php HtmlReplace输入过滤安全函数
Jul 03 PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
Jul 31 PHP
Apache下禁止php文件被直接访问的解决方案
Apr 25 PHP
数组与类使用PHP的可变变量名需要的注意的问题
Jun 20 PHP
ThinkPHP项目分组配置方法分析
Mar 23 PHP
PHP 生成微信红包代码简单
Mar 25 PHP
php提交过来的数据生成为txt文件
Apr 28 PHP
PHP实践教程之过滤、验证、转义与密码详解
Jul 24 PHP
PHP实现的回溯算法示例
Aug 15 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
PHP简单实现解析xml为数组的方法
May 02 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
Aug 03 PHP
php微信高级接口群发 多客服
Jun 23 #PHP
php英文单词统计器
Jun 23 #PHP
php抽奖概率算法(刮刮卡,大转盘)
Apr 17 #PHP
Yii2 rbac权限控制之rule教程详解
Jun 23 #PHP
[原创]php使用curl判断网页404(不存在)的方法
Jun 23 #PHP
PHP生成静态HTML文档实现代码
Jun 23 #PHP
PHP微信支付开发实例
Jun 22 #PHP
You might like
PHP伪静态写法附代码
2008/06/20 PHP
浅析PHP中的i++与++i的区别及效率
2016/06/15 PHP
php微信公众号开发之二级菜单
2018/10/20 PHP
使用CSS和jQuery模拟select并附提交后取得数据的代码
2013/10/18 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
JQuery中serialize()、serializeArray()和param()方法示例介绍
2014/07/31 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
Vue实现动态显示textarea剩余字数
2017/05/22 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
JavaScript实现全选取消效果
2017/12/14 Javascript
代码分析vue中如何配置less
2018/09/28 Javascript
JS异步宏队列微队列原理详解
2020/09/09 Javascript
python中将字典转换成其json字符串
2014/07/16 Python
Python判断字符串与大小写转换
2015/06/08 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
Python遍历pandas数据方法总结
2018/02/09 Python
Python中XlsxWriter模块简介与用法分析
2018/04/24 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
Python中is和==的区别详解
2018/11/15 Python
python实现字符串加密 生成唯一固定长度字符串
2019/03/22 Python
django rest framework serializer返回时间自动格式化方法
2020/03/31 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
css3 box-shadow阴影(外阴影与外发光)图示讲解
2017/08/11 HTML / CSS
法国体育用品商店:GO Sport
2019/10/23 全球购物
可以使用抽象函数重写基类中的虚函数吗
2013/06/02 面试题
中学生国旗下讲话稿
2014/04/26 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
免职通知
2015/04/23 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers