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

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

PHP微信API的接入和关键字自动回复_第1张图片


你可能感兴趣的:(微信)