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编写PDF文档生成器
Oct 09 PHP
php中文本操作的类
Mar 17 PHP
Discuz! Passport 通行证整合
Mar 27 PHP
PHP 数据库树的遍历方法
Feb 06 PHP
php 高效率写法 推荐
Feb 21 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
Jun 05 PHP
php读取目录所有文件信息dir示例
Mar 18 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 PHP
PHP实现webshell扫描文件木马的方法
Jul 31 PHP
Laravel框架使用Redis的方法详解
May 30 PHP
PHP实现支持CURL字符串证书传输的方法
Mar 23 PHP
php 的多进程操作实践案例分析
Feb 28 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学习之PHP运算符
2006/10/09 PHP
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
ThinkPHP实现ajax仿官网搜索功能实例
2014/12/02 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
php事务回滚简单实现方法示例
2017/03/28 PHP
javascript脚本编程解决考试分数统计问题
2008/10/18 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
一个小例子解释如何来阻止Jquery事件冒泡
2014/07/17 Javascript
jQuery实现表格颜色交替显示的方法
2015/03/09 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
js实现拖拽功能
2017/03/01 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
JavaScript实现区块链
2018/03/14 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
vue 进阶之实现父子组件间的传值
2019/04/26 Javascript
iview form清除校验状态的实现
2019/09/19 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
2019/09/23 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
[01:20]辉夜杯背景故事宣传片《辉夜传说》
2015/12/25 DOTA
[47:43]完美世界DOTA2联赛PWL S3 Magama vs GXR 第二场 12.19
2020/12/24 DOTA
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
详解Python的单元测试
2015/04/28 Python
Python处理Excel文件实例代码
2017/06/20 Python
Python程序运行原理图文解析
2018/02/10 Python
Pipenv一键搭建python虚拟环境的方法
2018/05/22 Python
Python numpy.array()生成相同元素数组的示例
2018/11/12 Python
pygame实现打字游戏
2021/02/19 Python
Django全局启用登陆验证login_required的方法
2020/06/02 Python
利用python进行文件操作
2020/12/04 Python
简历上的自我评价
2014/02/03 职场文书
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
HR求职自荐信范文
2014/06/21 职场文书
2014年信访维稳工作总结
2014/12/08 职场文书
吴仁宝观后感
2015/06/09 职场文书
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang