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 相关文章推荐
分页显示Oracle数据库记录的类之一
Oct 09 PHP
php桌面中心(一) 创建数据库
Mar 11 PHP
phpMyadmin 用户权限中英对照
Apr 02 PHP
php中日期加减法运算实现代码
Dec 08 PHP
php遍历目录与文件夹的多种方法详解
Nov 14 PHP
一个好用的PHP验证码类实例分享
Dec 27 PHP
php上传中文文件名乱码问题处理方案
Feb 03 PHP
微信API接口大全
Apr 15 PHP
PHP验证码生成原理和实现
Jan 24 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
Nov 25 PHP
php中实现字符串翻转的方法
Feb 22 PHP
TP5框架实现签到功能的方法分析
Apr 05 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运行模式的深入理解
2013/06/03 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
thinkPHP交易详情查询功能详解
2016/12/02 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
js验证表单第二部分
2006/11/25 Javascript
js 利用className得到对象的实现代码
2011/11/15 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
2014/06/12 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
nodejs导出excel的方法
2015/06/30 NodeJs
javascript如何实现暂停功能
2015/11/06 Javascript
javascript 中的console.log和弹出窗口alert
2016/08/30 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
React实现点击删除列表中对应项
2017/01/10 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
JavaScript函数中的this四种绑定形式
2017/08/15 Javascript
解决vue attr取不到属性值的问题
2018/09/18 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
2018/12/05 Javascript
JS高阶函数原理与用法实例分析
2019/01/15 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
[19:24]DOTA2客户端使用指南 一分钟快速设置轻松超神
2013/09/24 DOTA
[54:41]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VGJ.T VS paiN
2018/03/31 DOTA
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
对python中的装包与解包实例详解
2019/08/24 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
JAVA和C++区别都有哪些
2015/03/30 面试题
4s店机修工岗位职责
2013/12/20 职场文书
《傅雷家书》教学反思
2014/04/20 职场文书
人事专员岗位说明书
2014/07/29 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书
餐厅营销的秘密:为什么老顾客会流水?
2019/08/08 职场文书