文档章节

PHP微信开发, 简单的文本自动回复

liunx_
 liunx_
发布于 2017/09/11 17:49
字数 786
阅读 32
收藏 0

首先,先去微信公众平台注册一个账号(注册要填的东西挺多的),注册好之后,登录进去。

可以看到左侧的“开发者中心”,开启开发者中心前好像还要你完善一些资料,按照步骤完善即可。进入开发者中心之后,先去编辑

 

 

修改配置,修改配置的时候,注意:

 

URL是你自己的域名下的PHP脚本(往下读有该脚本的demo),该脚本用于和微信接口对接。比如http://www.example.com/weixin.php

 

Token是上述脚本里的定义的一个常量,比如你的PHP脚本里定义了:

 

 

[php] view plain copy

  1. define("TOKEN", "my_weixin");  

 

那么,在填写Token时,你就填abcdefgh

 

EncodingAESKey是消息加密用。你可以自己写一个43为的数字和字母的组合,也可以选择“随机生成”,一般选择随机生成即可

 

填好之后,保存(如果保存时,提示Token验证失败,那么请确认token一致并多点几次保存试试)。

保存好之后,点击修改配置旁的:“开启”。

 

然后,就可以编辑你的PHP脚本了。(如果你没有自己的域名,可以使用新浪云的免费的SAE,并最好完成实名认证)

 

demo的脚本如下:关注该公众平台(比如订阅号之后),功能是:输入hehe则返回hello world!!!如果输入其他字符,则返回输入heeh试试。

 

 

[php] view plain copy

  1. header('content-type:text/html;charset=utf-8');  
  2.   
  3. define("TOKEN", "my_weixin"); //define your token  
  4. $wx = new wechatCallbackapiTest();  
  5.   
  6. if($_GET['echostr']){  
  7.     $wx->valid(); //如果发来了echostr则进行验证  
  8. }else{  
  9.     $wx->responseMsg(); //如果没有echostr,则返回消息  
  10. }  
  11.   
  12.   
  13. class wechatCallbackapiTest{  
  14.   
  15.     public function valid(){ //valid signature , option  
  16.   
  17.         $echoStr = $_GET["echostr"];  
  18.         if($this->checkSignature()){ //调用验证字段  
  19.             echo $echoStr;  
  20.             exit;  
  21.         }  
  22.     }  
  23.   
  24.     public function responseMsg(){  
  25.          
  26.         //get post data, May be due to the different environments  
  27.         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //接收微信发来的XML数据  
  28.   
  29.         //extract post data  
  30.         if(!empty($postStr)){  
  31.                   
  32.             //解析post来的XML为一个对象$postObj  
  33.             $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);  
  34.           
  35.             $fromUsername = $postObj->FromUserName; //请求消息的用户  
  36.             $toUsername = $postObj->ToUserName; //"我"的公众号id  
  37.             $keyword = trim($postObj->Content); //消息内容  
  38.             $time = time(); //时间戳  
  39.             $msgtype = 'text'; //消息类型:文本  
  40.             $textTpl = "<xml>  
  41.                         <ToUserName><![CDATA[%s]]></ToUserName>  
  42.                         <FromUserName><![CDATA[%s]]></FromUserName>  
  43.                         <CreateTime>%s</CreateTime>  
  44.                         <MsgType><![CDATA[%s]]></MsgType>  
  45.                         <Content><![CDATA[%s]]></Content>  
  46.                         </xml>";  
  47.   
  48.             if($keyword == 'hehe'){  
  49.                 $contentStr = 'hello world!!!';  
  50.                 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);  
  51.                 echo $resultStr;  
  52.                 exit();                                                 
  53.             }else{  
  54.                 $contentStr = '输入hehe试试';  
  55.                 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);  
  56.                 echo $resultStr;  
  57.                 exit();  
  58.             }  
  59.   
  60.         }else {  
  61.             echo "";  
  62.             exit;  
  63.         }  
  64.     }  
  65.           
  66.     //验证字段  
  67.     private function checkSignature(){  
  68.   
  69.         $signature = $_GET["signature"];  
  70.         $timestamp = $_GET["timestamp"];  
  71.         $nonce = $_GET["nonce"];      
  72.                   
  73.         $token = TOKEN;  
  74.         $tmpArr = array($token, $timestamp, $nonce);  
  75.         sort($tmpArr);  
  76.         $tmpStr = implode( $tmpArr );  
  77.         $tmpStr = sha1( $tmpStr );  
  78.           
  79.         if( $tmpStr == $signature ){  
  80.             return true;  
  81.         }else{  
  82.             return false;  
  83.         }  
  84.     }  
  85. }  

 

如果发送消息,系统提示:该公众平台暂时不能提共服务,请稍后再试。那么多半是代码语法有问题,检查好语法错误再试试。

 

tip:

在新用户关注你的公众号时,自动返回信息:(把这段代码加在判断$keyword之前)。

 

[php] view plain copy

  1. if($postObj->MsgType == 'event'){ //如果XML信息里消息类型为event  
  2.     if($postObj->Event == 'subscribe'){ //如果是订阅事件  
  3.         $contentStr = "欢迎订阅misaka去年夏天!\n更多精彩内容:http://blog.csdn.net/misakaqunianxiatian";  
  4.         $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);  
  5.         echo $resultStr;  
  6.         exit();  
  7.     }  
  8. }  

© 著作权归作者所有

共有 人打赏支持
liunx_
粉丝 0
博文 20
码字总数 29282
作品 0
成都
程序员
私信 提问
微信公众号开发之连简单的自动回复都不能实现

各位网友: 我们公司安排我们做微信公众号接口开发,就是由编辑模式进入开发模式,接入自己的服务器。所以我就去图书馆借了本书《微信公众平台搭建、开发与实践指南》照着搭建环境和敲代码,...

在我的歌声里
2017/02/04
557
2
微信公众平台开发入门教程

关键字:微信公众平台开发 作者:方倍工作室 在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序、MySQL数据库、计算机网络通讯、及HTTP/XML/CSS/JS等基础。 我们将使用微信公众账...

方倍工作室
2013/06/24
0
0
运维APP番外篇

API是个好东西,特别是restful API是个好东西,我不是开发也就不展开讲了,我喜欢新的东西,也喜欢捯饬新的东西,最好是别人没写过的,如果都写了也就没啥意思了~~~ 好吧,进入正题。我想达到...

youerning
2016/03/12
0
0
微信开发:消息管理

一,接收微信消息 上一篇博文是介绍如何进行服务器端配置,配置的相当于为微信的消息接口,微信向服务器端推送消息或者推送用户发送的消息就会推送到该配置的URL中,配置好了过后,我们就需要...

xiaofli007
2016/09/29
194
0
Yii 的微信模块--Yii-wechat

Yii-wechat 是基于 Yii2 实现的微信模块, 集成微信模拟器、多公众号管理、扩展开发接口,只需关注功能,微信开发的强劲引擎. 注意 如果是全新使用和,你可以使用 Yii2-app-wechat 微信应用模板(...

红薯
2015/06/02
16K
1

没有更多内容

加载失败,请刷新页面

加载更多

vue-router的HTML5 History 模式设置

VUE是当下最火爆的前端框架之一,vue-router是vue项目中几乎都会用到的组件,然而体验一时爽,其实坑不少。本篇经验将详细介绍vue-router的两种mode效果和开发测试环境下的问题,并给出解决方...

peakedness丶
23分钟前
1
0
Dubbo 源码分析 - 服务引用

1. 简介 在上一篇文章中,我详细的分析了服务导出的原理。本篇文章我们趁热打铁,继续分析服务引用的原理。在 Dubbo 中,我们可以通过两种方式引用远程服务。第一种是使用服务直联的方式引用...

小刀爱编程
33分钟前
1
0
redis_集群原理

数据分布 数据分布理论 分布式系统数据分区规则:常见的有哈希分区和顺序分区两种。 哈希分区 常见的hash分区规则有:节点取余分区,一致性hash分区,虚拟槽分区. redis数据分区 redis集群功能...

grace_233
33分钟前
0
0
数据库(mysql)业务用户表批量造测试用户密码数据[方案]

博主这几天在配合公司测试做商城商品秒杀场景的压测,由于秒杀需要登录,所以需要为测试创建多个用户密码。此项任务可能在今后还会遇到,先做个笔录。同时,让小伙伴们需要的时候也可以有个参...

em_aaron
48分钟前
2
0
JDK_jvisualvm访问远程weblogic服务

1.首先需要在远程的weblogic的域下面,找到/bin/ setDomainEnv.sh ,需要在此文件下加入如下内容: -Dcom.sun.management.jmxremote.port=1090 ##端口号可以自己指定 -Dcom.sun.management.j...

四年级小学生
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部