欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-05-10 07:57:28
...
本篇文章的内容是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['timestamp'];//timestamp其实就是一个时间戳  
        $nonce     = $_GET['nonce'];//nonce是一个随机参数  
        $token     = "weixin";//这个token填写你在微信公众平台上写的那个值  
        $signature = $_GET['signature'];//这个signature其实就是在微信公众平台已经加密好的字符串  
        $echostr   = $_GET['echostr'];  
        $array     = array( $timestamp, $nonce, $token);  
        sort($array);  
  
        $tmpstr = implode('', $array);  
        $tmpstr = sha1($tmpstr);  
  
    if( $tmpstr == $signature && $echostr){  
      
            echo $echostr;  
            exit;  
        }else{  
            $this->reponseMsg();  
        }  
    }  
    public function reponseMsg(){  
        $postArr = $GLOBALS['HTTP_RAW_POST_DATA'];  
        $postObj = simplexml_load_string( $postArr );  
        if( strtolower( $postObj->MsgType) == 'event'){  
            //如果是关注事件(subscribe)  
            if( strtolower($postObj->Event == 'subscribe') ){  
                //回复用户消息  
                $toUser   = $postObj->FromUserName;  
                $fromUser = $postObj->ToUserName;  
                $time     = time();  
                $msgType  =  'text';  
                $content  = '欢迎关注 书旅and良玉 微信公众账号'.$postObj->FromUserName.'-'.$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) == 'text' && trim($postObj->Content) == '夏目友人帐'){  
            $toUser   = $postObj->FromUserName;  
            $fromUser = $postObj->ToUserName;  
            $arr = array(  
                array(  
                    'title'=>'夏目友人帐',  
                    'description'=>"此生无悔入夏目",  
                    'picUrl'=>'http://img4.duitang.com/uploads/item/201508/16/20150816015528_X8dKY.jpeg',  
                    'url'=>'http://www.shulvchen.cn',  
                ),  
            );    
            $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['title']."]]></Title>   
                            <Description><![CDATA[".$v['description']."]]></Description>  
                            <PicUrl><![CDATA[".$v['picUrl']."]]></PicUrl>  
                            <Url><![CDATA[".$v['url']."]]></Url>  
                            </item>";  
            }  
            $template .="</Articles>  
                        </xml> ";  
            echo sprintf($template, $toUser, $fromUser, time(), 'news');  
        }else{  
            switch( trim($postObj->Content) ){  
                case 'bb':  
                    $content = '我喜欢你';  
                break;  
                case '良玉':  
                    $content = '我喜欢你';  
                break;  
                case '书旅':  
                    $content = '加油';  
                break;  
                case 'dsdf':  
                    $content = '不愿错过他';  
                break;  
                case '垒哥':  
                    $content = '垒哥已死,有事儿烧纸';  
                break;  
                case '书旅and良玉':  
                    $content = 'Forever with you';  
                break;  
                case '学弟':  
                    $content = '书旅是你学长';  
                break;  
                default:  
                    $content = "<a href='http://www.baidu.com'>百度一下,你就知道(点击文字,进入百度)</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  = '我喜欢你';  
                $msgType  = 'text';  
                echo sprintf($template1, $toUser, $fromUser,$time, $msgType, $content);  
        }  
    }     
}


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


相关推荐:

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

php调用接口api的方法

以上就是PHP微信API的接入和关键字自动回复的详细内容,更多请关注其它相关文章!

相关标签: php 关键字 api