首页 >后端开发 >php教程 >PHP微信API的接入和关键字自动回复

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

不言
不言原创
2018-04-04 14:36:461834浏览

本篇文章的内容是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

<?php  
namespace Home\Controller;  
use Think\Controller;  
class IndexController extends Controller {  
    public function index(){  
        $timestamp = $_GET[&#39;timestamp&#39;];//timestamp其实就是一个时间戳  
        $nonce     = $_GET[&#39;nonce&#39;];//nonce是一个随机参数  
        $token     = "weixin";//这个token填写你在微信公众平台上写的那个值  
        $signature = $_GET[&#39;signature&#39;];//这个signature其实就是在微信公众平台已经加密好的字符串  
        $echostr   = $_GET[&#39;echostr&#39;];  
        $array     = array( $timestamp, $nonce, $token);  
        sort($array);  
  
        $tmpstr = implode(&#39;&#39;, $array);  
        $tmpstr = sha1($tmpstr);  
  
    if( $tmpstr == $signature && $echostr){  
      
            echo $echostr;  
            exit;  
        }else{  
            $this->reponseMsg();  
        }  
    }  
    public function reponseMsg(){  
        $postArr = $GLOBALS[&#39;HTTP_RAW_POST_DATA&#39;];  
        $postObj = simplexml_load_string( $postArr );  
        if( strtolower( $postObj->MsgType) == &#39;event&#39;){  
            //如果是关注事件(subscribe)  
            if( strtolower($postObj->Event == &#39;subscribe&#39;) ){  
                //回复用户消息  
                $toUser   = $postObj->FromUserName;  
                $fromUser = $postObj->ToUserName;  
                $time     = time();  
                $msgType  =  &#39;text&#39;;  
                $content  = &#39;欢迎关注 书旅and良玉 微信公众账号&#39;.$postObj->FromUserName.&#39;-&#39;.$postObj->ToUserName;  
                $template = "<xml>  
                            <ToUserName><![CDATA[%s]]></ToUserName>  
                            <FromUserName><![CDATA[%s]]></FromUserName>  
                            <CreateTime>%s</CreateTime>  
                            <MsgType><![CDATA[%s]]></MsgType>  
                            <Content><![CDATA[%s]]></Content>  
                            </xml>";  
                $info     = sprintf($template, $toUser, $fromUser, $time, $msgType, $content);  
                echo $info;  
            }  
        }  
//回复纯文本或单图文消息  
        if(($postObj->MsgType) == &#39;text&#39; && trim($postObj->Content) == &#39;夏目友人帐&#39;){  
            $toUser   = $postObj->FromUserName;  
            $fromUser = $postObj->ToUserName;  
            $arr = array(  
                array(  
                    &#39;title&#39;=>&#39;夏目友人帐&#39;,  
                    &#39;description&#39;=>"此生无悔入夏目",  
                    &#39;picUrl&#39;=>&#39;http://img4.duitang.com/uploads/item/201508/16/20150816015528_X8dKY.jpeg&#39;,  
                    &#39;url&#39;=>&#39;http://www.shulvchen.cn&#39;,  
                ),  
            );    
            $template = "<xml>  
                        <ToUserName><![CDATA[%s]]></ToUserName>  
                        <FromUserName><![CDATA[%s]]></FromUserName>  
                        <CreateTime>%s</CreateTime>  
                        <MsgType><![CDATA[%s]]></MsgType>  
                        <ArticleCount>".count($arr)."</ArticleCount>  
                        <Articles>";  
            foreach($arr as $k=>$v){  
                $template .="<item>  
                            <Title><![CDATA[".$v[&#39;title&#39;]."]]></Title>   
                            <Description><![CDATA[".$v[&#39;description&#39;]."]]></Description>  
                            <PicUrl><![CDATA[".$v[&#39;picUrl&#39;]."]]></PicUrl>  
                            <Url><![CDATA[".$v[&#39;url&#39;]."]]></Url>  
                            </item>";  
            }  
            $template .="</Articles>  
                        </xml> ";  
            echo sprintf($template, $toUser, $fromUser, time(), &#39;news&#39;);  
        }else{  
            switch( trim($postObj->Content) ){  
                case &#39;bb&#39;:  
                    $content = &#39;我喜欢你&#39;;  
                break;  
                case &#39;良玉&#39;:  
                    $content = &#39;我喜欢你&#39;;  
                break;  
                case &#39;书旅&#39;:  
                    $content = &#39;加油&#39;;  
                break;  
                case &#39;dsdf&#39;:  
                    $content = &#39;不愿错过他&#39;;  
                break;  
                case &#39;垒哥&#39;:  
                    $content = &#39;垒哥已死,有事儿烧纸&#39;;  
                break;  
                case &#39;书旅and良玉&#39;:  
                    $content = &#39;Forever with you&#39;;  
                break;  
                case &#39;学弟&#39;:  
                    $content = &#39;书旅是你学长&#39;;  
                break;  
                default:  
                    $content = "<a href=&#39;http://www.baidu.com&#39;>百度一下,你就知道(点击文字,进入百度)</a>";  
  
            }     
                $template1 = "<xml>  
                            <ToUserName><![CDATA[%s]]></ToUserName>  
                            <FromUserName><![CDATA[%s]]></FromUserName>  
                            <CreateTime>%s</CreateTime>  
                            <MsgType><![CDATA[%s]]></MsgType>  
                            <Content><![CDATA[%s]]></Content>  
                            </xml>";  
                $fromUser = $postObj->ToUserName;//消息从哪里来  
                $toUser   = $postObj->FromUserName;//发送给谁  
                $time     = time();   
                //$content  = &#39;我喜欢你&#39;;  
                $msgType  = &#39;text&#39;;  
                echo sprintf($template1, $toUser, $fromUser,$time, $msgType, $content);  
        }  
    }     
}


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


相关推荐:

实例详解Python+Slack API 如何实现聊天机器人

php调用接口api的方法


以上是PHP微信API的接入和关键字自动回复的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn