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 相关文章推荐
GBK的页面输出JSON格式的php函数
Feb 16 PHP
PHP连接Access数据库的方法小结
Jun 20 PHP
PHP正则提取不包含指定网址的图片地址的例子
Apr 21 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
May 28 PHP
PHPMailer发送HTML内容、带附件的邮件实例
Jul 01 PHP
php中adodbzip类实例
Dec 08 PHP
windows8.1下Apache+Php+MySQL配置步骤
Oct 30 PHP
php中引用符号(&amp;)的使用详细介绍
Dec 06 PHP
PHP+JavaScript实现无刷新上传图片
Feb 21 PHP
php中实现字符串翻转的方法
Feb 22 PHP
php实现数据库的增删改查
Feb 26 PHP
Laravel修改验证提示信息为中文的示例
Oct 23 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学习笔记汇总
2014/10/05 PHP
PHP Swoole异步Redis客户端实现方法示例
2019/10/24 PHP
js 页面执行时间计算代码
2009/03/04 Javascript
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
js获取当前页面路径示例讲解
2014/01/08 Javascript
获取当前点击按钮的id用this.id实现
2014/03/17 Javascript
javascript学习笔记(五)原型和原型链详解
2014/10/08 Javascript
js 左右悬浮对联广告代码示例
2014/12/12 Javascript
JavaScript声明变量名的语法规则
2015/07/10 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
js封装成插件_Canvas统计图插件编写实例
2017/09/12 Javascript
vue2.0 axios跨域并渲染的问题解决方法
2018/03/08 Javascript
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
Vue 的双向绑定原理与用法揭秘
2020/05/06 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
动态创建类实例代码
2009/10/07 Python
Python 命令行非阻塞输入的小例子
2013/09/27 Python
初步探究Python程序的执行原理
2015/04/11 Python
Python函数返回值实例分析
2015/06/08 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
2019/06/13 Python
python实现输入三角形边长自动作图求面积案例
2020/04/12 Python
Python定义函数实现累计求和操作
2020/05/03 Python
Django静态资源部署404问题解决方案
2020/05/11 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
python3字符串输出常见面试题总结
2020/12/01 Python
HTML5标签与HTML4标签的区别示例介绍
2013/07/18 HTML / CSS
面向对象设计的原则是什么
2013/02/13 面试题
党员群众路线对照检查材料思想汇报
2014/09/17 职场文书
社会心理学学习心得体会
2016/01/22 职场文书
高中体育课教学反思
2016/02/16 职场文书
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js