PHP微信API的接入和关键字自动回复

https://blog.csdn.net/self_realian/article/details/70849159

公众账号的使用模式分类

1,编辑模式:有微信公众平台,提供给微信公众账号管理者的一个简单的,可视化操作的界面,主要是方便

微信公众账号管理者,能够进行一些简单的微信运营 

2,开发者模式:就是调用一些微信的公用接口,来完成一些自身业务

应用中接入API接口步骤

1,填写服务器URL,token(注意:只支持80端口   也就是http服务必须在80端口打开,才能接收发送过来的消息

这里的url就是指第三方服务器的url,它的作用主要是接收微信推送的消息

这里的token是开发者与微信公众平台之间约定的口令,主要是用来验证第三方服务器真正的合法性

2,验证服务器地址的有效性,加密/校验流程如下:

(1)将token、timestamp、nonce三个参数进行字典序排序(这三个都是微信通过get方法传送过来的三个参数,通过这三个参数可以来验证请求是否来自于微信)

(2)将三个参数字符串拼接成一个字符串进行sha1加密

(3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

3,关于access_token

 

(1)access_token与appid,appsecred的关系

    当你在微信公众平台注册微信公众账号时,微信公众平台为你生成了一个appid和appsecred,这两个值就是你在微信公众平台上的一个唯一标识

    appid和appsecred(edd7d19a4d8c625ed1244d17f78a9165)就是用来产生access_token,access_token其实就是一个动态口令,它有时间性,一段时间内有效

也可以将access_token理解成调用微信公众平台的一些接口的钥匙

特点:(1)唯一有效性(2)全局有效性   (至于access_token的详解,可以进入微信,查看“开发者文档”)

微信开放接口

1,获取access_token

2,获取微信服务器地址

说完这些之后,下边就是代码部分。首先提醒大家,要想添加自己的这些功能,首先要有一个自己的公网可以访问的域名,没有的可以在腾讯云或阿里云上申请一个(我用的框架是ThinkPHP3.2.2的)

[php]   view plain  copy
  1. <?php  
  2. namespace Home\Controller;  
  3. use Think\Controller;  
  4. class IndexController extends Controller {  
  5.     public function index(){  
  6.         $timestamp = $_GET['timestamp'];//timestamp其实就是一个时间戳  
  7.         $nonce     = $_GET['nonce'];//nonce是一个随机参数  
  8.         $token     = "weixin";//这个token填写你在微信公众平台上写的那个值  
  9.         $signature = $_GET['signature'];//这个signature其实就是在微信公众平台已经加密好的字符串  
  10.         $echostr   = $_GET['echostr'];  
  11.         $array     = array$timestamp$nonce$token);  
  12.         sort($array);  
  13.   
  14.         $tmpstr = implode(''$array);  
  15.         $tmpstr = sha1($tmpstr);  
  16.   
  17.     if$tmpstr == $signature && $echostr){  
  18.       
  19.             echo $echostr;  
  20.             exit;  
  21.         }else{  
  22.             $this->reponseMsg();  
  23.         }  
  24.     }  
  25.     public function reponseMsg(){  
  26.         $postArr = $GLOBALS['HTTP_RAW_POST_DATA'];  
  27.         $postObj = simplexml_load_string( $postArr );  
  28.         ifstrtolower$postObj->MsgType) == 'event'){  
  29.             //如果是关注事件(subscribe)  
  30.             ifstrtolower($postObj->Event == 'subscribe') ){  
  31.                 //回复用户消息  
  32.                 $toUser   = $postObj->FromUserName;  
  33.                 $fromUser = $postObj->ToUserName;  
  34.                 $time     = time();  
  35.                 $msgType  =  'text';  
  36.                 $content  = '欢迎关注 书旅and良玉 微信公众账号'.$postObj->FromUserName.'-'.$postObj->ToUserName;  
  37.                 $template = "<xml>  
  38.                             <ToUserName><![CDATA[%s]]></ToUserName>  
  39.                             <FromUserName><![CDATA[%s]]></FromUserName>  
  40.                             <CreateTime>%s</CreateTime>  
  41.                             <MsgType><![CDATA[%s]]></MsgType>  
  42.                             <Content><![CDATA[%s]]></Content>  
  43.                             </xml>";  
  44.                 $info     = sprintf($template$toUser$fromUser$time$msgType$content);  
  45.                 echo $info;  
  46.             }  
  47.         }  
  48. //回复纯文本或单图文消息  
  49.         if(($postObj->MsgType) == 'text' && trim($postObj->Content) == '夏目友人帐'){  
  50.             $toUser   = $postObj->FromUserName;  
  51.             $fromUser = $postObj->ToUserName;  
  52.             $arr = array(  
  53.                 array(  
  54.                     'title'=>'夏目友人帐',  
  55.                     'description'=>"此生无悔入夏目",  
  56.                     'picUrl'=>'http://img4.duitang.com/uploads/item/201508/16/20150816015528_X8dKY.jpeg',  
  57.                     'url'=>'http://www.shulvchen.cn',  
  58.                 ),  
  59.             );    
  60.             $template = "<xml>  
  61.                         <ToUserName><![CDATA[%s]]></ToUserName>  
  62.                         <FromUserName><![CDATA[%s]]></FromUserName>  
  63.                         <CreateTime>%s</CreateTime>  
  64.                         <MsgType><![CDATA[%s]]></MsgType>  
  65.                         <ArticleCount>".count($arr)."</ArticleCount>  
  66.                         <Articles>";  
  67.             foreach($arr as $k=>$v){  
  68.                 $template .="<item>  
  69.                             <Title><![CDATA[".$v['title']."]]></Title>   
  70.                             <Description><![CDATA[".$v['description']."]]></Description>  
  71.                             <PicUrl><![CDATA[".$v['picUrl']."]]></PicUrl>  
  72.                             <Url><![CDATA[".$v['url']."]]></Url>  
  73.                             </item>";  
  74.             }  
  75.             $template .="</Articles>  
  76.                         </xml> ";  
  77.             echo sprintf($template$toUser$fromUser, time(), 'news');  
  78.         }else{  
  79.             switch( trim($postObj->Content) ){  
  80.                 case 'bb':  
  81.                     $content = '我喜欢你';  
  82.                 break;  
  83.                 case '良玉':  
  84.                     $content = '我喜欢你';  
  85.                 break;  
  86.                 case '书旅':  
  87.                     $content = '加油';  
  88.                 break;  
  89.                 case 'dsdf':  
  90.                     $content = '不愿错过他';  
  91.                 break;  
  92.                 case '垒哥':  
  93.                     $content = '垒哥已死,有事儿烧纸';  
  94.                 break;  
  95.                 case '书旅and良玉':  
  96.                     $content = 'Forever with you';  
  97.                 break;  
  98.                 case '学弟':  
  99.                     $content = '书旅是你学长';  
  100.                 break;  
  101.                 default:  
  102.                     $content = "<a href='http://www.baidu.com'>百度一下,你就知道(点击文字,进入百度)</a>";  
  103.   
  104.             }     
  105.                 $template1 = "<xml>  
  106.                             <ToUserName><![CDATA[%s]]></ToUserName>  
  107.                             <FromUserName><![CDATA[%s]]></FromUserName>  
  108.                             <CreateTime>%s</CreateTime>  
  109.                             <MsgType><![CDATA[%s]]></MsgType>  
  110.                             <Content><![CDATA[%s]]></Content>  
  111.                             </xml>";  
  112.                 $fromUser = $postObj->ToUserName;//消息从哪里来  
  113.                 $toUser   = $postObj->FromUserName;//发送给谁  
  114.                 $time     = time();   
  115.                 //$content  = '我喜欢你';  
  116.                 $msgType  = 'text';  
  117.                 echo sprintf($template1$toUser$fromUser,$time$msgType$content);  
  118.         }  
  119.     }     
  120. }  

希望这篇博客对跟我一样喜欢微信开发的小菜鸟们有所帮助


猜你喜欢

转载自blog.csdn.net/a9925/article/details/79801561