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 imagecreatefrombmp 从BMP文件或URL新建一图像
Jul 16 PHP
php session劫持和防范的方法
Nov 12 PHP
php显示指定目录下子目录的方法
Mar 20 PHP
php实现改变图片直接打开为下载的方法
Apr 14 PHP
symfony2.4的twig中date用法分析
Mar 18 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
Mar 25 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
Sep 22 PHP
CI框架数据库查询缓存优化的方法
Nov 21 PHP
php微信公众号开发模式详解
Nov 28 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
Jun 05 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
PHP中关于php.ini参数优化详解
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中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
社区(php&amp;&amp;mysql)一
2006/10/09 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
JQuery datepicker 使用方法
2011/05/20 Javascript
jquery聚焦文本框与扩展文本框聚焦方法
2012/10/12 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
js验证上传图片的方法
2015/05/12 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
Node.js微信 access_token ( jsapi_ticket ) 存取与刷新的示例
2017/09/30 Javascript
JavaScript实现异步图像上传功能
2018/07/12 Javascript
vue如何解决循环引用组件报错的问题
2018/09/22 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
浅谈vue异步数据影响页面渲染
2019/10/29 Javascript
Python脚本实现代码行数统计代码分享
2015/03/10 Python
解读Django框架中的低层次缓存API
2015/07/24 Python
python 的列表遍历删除实现代码
2020/04/12 Python
python编程实现12306的一个小爬虫实例
2017/12/27 Python
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
纯css3显示隐藏一个div特效的具体实现
2014/02/10 HTML / CSS
英国最大的户外商店:Go Outdoors
2019/04/17 全球购物
怎样声明子类
2013/07/02 面试题
《雷雨》教学反思
2014/02/20 职场文书
个人课题方案
2014/05/08 职场文书
行政求职信
2014/07/04 职场文书
小学教师师德整改措施
2014/09/29 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
课外活动实习计划
2015/01/19 职场文书
合作意向书范本
2019/04/17 职场文书