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 相关文章推荐
MySQL中create table语句的基本语法是
Jan 15 PHP
PHP与SQL注入攻击[三]
Apr 17 PHP
纯真IP数据库的应用 IP地址转化成十进制
Jun 14 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
Sep 29 PHP
php中批量修改文件后缀名的函数代码
Oct 23 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
Nov 02 PHP
PHP动态输出JavaScript代码实例
Feb 12 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
Mar 19 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
Dec 10 PHP
[原创]php实现 data url的图片生成与保存
Dec 04 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
Dec 08 PHP
PHP实现简单用户登录界面
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
绿山咖啡和蓝山咖啡
2021/03/04 新手入门
Zend公司全球首推PHP认证
2006/10/09 PHP
用PHP实现Ftp用户的在线管理
2012/02/16 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
CL vs ForZe BO5 第一场 2.13
2021/03/10 DOTA
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
extjs表格文本启用选择复制功能具体实现
2013/10/11 Javascript
JavaScript制作的可折叠弹出式菜单示例
2014/04/04 Javascript
JavaScript获得表单target属性的方法
2015/04/02 Javascript
JavaScript中的splice()方法使用详解
2015/06/09 Javascript
js中javascript:void(0) 真正含义
2020/11/05 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
Angular 页面跳转时传参问题
2016/08/01 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
jQuery实现页面点击后退弹出提示框的方法
2016/08/24 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
jQuery实现IE输入框完成placeholder标签功能的方法
2017/09/20 jQuery
详解Nodejs mongoose
2018/06/10 NodeJs
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
vue使用exif获取图片经纬度的示例代码
2020/12/11 Vue.js
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
Django中数据库的数据关系:一对一,一对多,多对多
2018/10/21 Python
python实现文本界面网络聊天室
2018/12/12 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
Gloeilampgoedkoop荷兰:在线购买灯泡
2019/02/16 全球购物
饭店工作计划书
2014/01/10 职场文书
高校十八大报告感想
2014/01/27 职场文书
网吧七夕活动策划方案
2014/08/31 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
高三数学复习备考教学反思
2016/02/18 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
MySQL 视图(View)原理解析
2021/05/19 MySQL