> 백엔드 개발 > PHP 튜토리얼 > PHP WeChat API 액세스 및 키워드 자동 응답

PHP WeChat API 액세스 및 키워드 자동 응답

不言
풀어 주다: 2023-03-23 08:30:02
원래의
1831명이 탐색했습니다.

이 기사의 내용은 PHP WeChat API 액세스 및 키워드 자동 응답에 관한 것입니다. 이제 모든 사람과 공유합니다. 도움이 필요한 친구들은 이 기사의 내용을 참조할 수 있습니다

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


공개 계정의 사용 모드 분류

1. 편집 모드: 주로 WeChat 공개 계정 관리자에게 간단하고 시각적인 운영 인터페이스를 제공하는 WeChat 공개 플랫폼이 있습니다.

WeChat 공개 계정 관리자가 간단한 WeChat 작업을 수행합니다

2. 개발자 모드: WeChat의 일부 공개 인터페이스를 호출하여 자체 비즈니스를 완료합니다

애플리케이션에서 API 인터페이스에 액세스하는 단계

1 . 서버 URL과 토큰을 입력하세요. (참고: 포트 80만 지원합니다. 즉, 보낸 메시지를 받으려면 포트 80에서 http 서비스를 열어야 합니다.

여기서 URL은 타사 서버의 URL을 나타냅니다. 주요 기능은 WeChat에서 푸시한 메시지를 수신하는 것입니다

여기에 있는 토큰은 개발자와 WeChat 공개 플랫폼 간에 합의된 비밀번호입니다. 주로 제3자 서버의 진정한 적법성을 확인하는 데 사용됩니다

2. 서버 주소의 유효성, 암호화/검증 프로세스는 다음과 같습니다.

(1) 세 가지 매개변수 token, timestamp, nonce를 사전순으로 정렬합니다. (이 세 가지는 WeChat이 get 메소드를 통해 전송하는 세 가지 매개변수입니다. 3개의 매개변수를 사용하여 요청이 (WeChat에서)에서 오는지 확인할 수 있습니다

(2) sha1 암호화를 위해 3개의 매개변수 문자열을 하나의 문자열로 결합합니다

(3) 개발자는 암호화된 문자열을 서명과 비교하여 다음을 식별할 수 있습니다. the request is from WeChat

3 , About access_token

(1) access_token과 appid의 관계, appsecred

WeChat 공개 플랫폼에 WeChat 공개 계정을 등록하면 WeChat 공개 플랫폼에서 appid가 생성됩니다. 및 appsecred에 따르면 이 두 값은 귀하의 WeChat 공개 플랫폼

appid 및 appsecred(edd7d19a4d8c625ed1244d17f78a9165)의 고유 식별자입니다. Access_token은 실제로 시간에 민감하고 유효한 비밀번호입니다.

Access_token은 플랫폼 일부 인터페이스의 WeChat 공개 키를 호출하는 것으로 이해될 수도 있습니다.

특징: (1) 고유 유효성 (2) 전역 유효성(access_token에 대한 자세한 설명은 다음을 입력할 수 있습니다. WeChat 및 "개발자 문서" 보기)

WeChat 오픈 인터페이스

1, access_token

2 받기, WeChat 서버 주소 받기

이렇게 말한 후 우선 코드 부분을 알려드리겠습니다. 이러한 기능을 직접 추가하려면 먼저 자신의 공용 네트워크에서 액세스할 수 있는 도메인 이름이 있어야 한다는 점을 모두에게 상기시켜 주세요. Tencent Cloud나 Alibaba Cloud에 신청할 수는 없습니다. 제가 사용하는 프레임워크는 ThinkPHP3.2.2)



[php] view입니다 plaincopy

<?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);  
        }  
    }     
}
로그인 후 복사

나처럼 WeChat 개발을 좋아하는 초보자에게 이 블로그가 도움이 되기를 바랍니다


관련 추천:

Python+Slack API 설명에 대한 자세한 예 chatbot

PHP 호출 인터페이스 API


메소드 구현

위 내용은 PHP WeChat API 액세스 및 키워드 자동 응답의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿