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使之能同时支持GIF和JPEG
Oct 09 PHP
对javascript和select部件的结合运用
Oct 09 PHP
让PHP以ROOT权限执行系统命令的方法
Feb 10 PHP
redis 队列操作的例子(php)
Apr 12 PHP
用php实现选择排序的解决方法
May 04 PHP
PHP迭代器的内部执行过程详解
Nov 12 PHP
Yii数据库缓存实例分析
Mar 29 PHP
Linux平台PHP5.4设置FPM线程数量的方法
Nov 09 PHP
php 一维数组的循环遍历实现代码
Apr 10 PHP
浅析PHP数据导出知识点
Feb 17 PHP
PHP常用的类封装小结【4个工具类】
Jun 28 PHP
PHP判断是否是json字符串
Apr 01 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
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
eclipse php wamp配置教程
2016/06/30 PHP
PHP检测接口Traversable用法详解
2017/12/29 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
JQuery 拾色器插件发布-jquery.icolor.js
2010/10/20 Javascript
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
html+css+js实现xp window界面及有关功能
2013/03/26 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
2013/12/29 Javascript
jQuery插件passwordStrength密码强度指标详解
2016/06/24 Javascript
javascript数组去重方法分析
2016/12/15 Javascript
用jquery获取select标签中选中的option值及文本的示例
2018/01/25 jQuery
JS实现模糊查询带下拉匹配效果
2018/06/21 Javascript
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
Python中使用装饰器时需要注意的一些问题
2015/05/11 Python
Python中的列表生成式与生成器学习教程
2016/03/13 Python
Python 自动化表单提交实例代码
2017/06/08 Python
python实现飞机大战小游戏
2019/11/08 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
css3进行截取替代js的substring
2013/09/02 HTML / CSS
HTML5仿微信聊天界面、微信朋友圈实例代码
2018/01/29 HTML / CSS
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
荷兰浴室和卫浴网上商店:Badkamerxxl.nl
2020/10/06 全球购物
护理职业应聘自荐书
2013/09/29 职场文书
《风筝》教学反思
2014/04/10 职场文书
接待员岗位职责范本
2015/04/15 职场文书
军训结束新闻稿
2015/07/17 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
go 原生http web 服务跨域restful api的写法介绍
2021/04/27 Golang
golang 接口嵌套实现复用的操作
2021/04/29 Golang
python迷宫问题深度优先遍历实例
2021/06/20 Python
springboot 多数据源配置不生效遇到的坑及解决
2021/11/17 Java/Android
DE1103使用报告
2022/04/05 无线电
python开发制作好看的时钟效果
2022/05/02 Python