微信公众号开发系列

版权声明:转载请注明出处 https://blog.csdn.net/k183000860/article/details/52174848
花了两天时间看了微信公众号开发,大致了解了下。
网上关于开发公众号的资料挺多的,官网的api接口可以多看看

简单说下,微信公众号开发就两种模式,一个是傻瓜式开发,不涉及任何代码,另一种就是使用后台语言,搭建自己服务器,灵活写业务逻辑来处理用户对公众号的请求。
https://mp.weixin.qq.com/wiki
官方的开发者文档写的非常详细,不过初次接触可能会懵逼,特别像我这种常年不用微信的人,为了学微信公众号开发,还特意去使用微信。。。
按照文档说明,基本配置弄完之后,成功接入后台开发。


官方给的demo能展示给你最初的基本自动回复消息。

public function responseMsg()
    {
		//get post data, May be due to the different environments
		$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];


      	//extract post data
		if (!empty($postStr)){
                /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
                   the best way is to check the validity of xml by yourself */
                libxml_disable_entity_loader(true);
              	$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                $keyword = trim($postObj->Content);
                $time = time();
                $textTpl = "<xml>
							<ToUserName><![CDATA[%s]]></ToUserName>
							<FromUserName><![CDATA[%s]]></FromUserName>
							<CreateTime>%s</CreateTime>
							<MsgType><![CDATA[%s]]></MsgType>
							<Content><![CDATA[%s]]></Content>
							<FuncFlag>0</FuncFlag>
							</xml>";             
				if(!empty( $keyword ))
                {
              		$msgType = "text";
                	$contentStr = "Welcome to wechat world!";
                	$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                	echo $resultStr;
                }else{
                	echo "Input something...";
                }


        }else {
        	echo "";
        	exit;
        }
    }



服务器和官方微信服务器每次通信都是通过封装好的xml文件进行交流
所以,在文档里面展示给我们的都是各种xml接口,你要做的就是在后台处理好业务逻辑
然后把参数通过xml文件传输给微信服务器,相应的你从用户那里获取的信息也都通过xml格式传递。


下面,我分享一个自己封装图灵机器人的接口

//robot.php

<?php
	
	function MyRobot($info) {


		$key = "";
		$apiUrl = "http://www.tuling123.com/openapi/api?key=".$key."&info=".$info;

		$result = file_get_contents($apiUrl);
		$result = json_decode($result,true);

		switch ($result['code']) {
			case '100000':
				return $result['text'];
				break;

			case '200000':
				$text = $result['text'] . ',<a href="' . $result['url'] . '">点击进入</a>';
				return $text;
				break;

			case '302000':
				$length = count($result['list']);
				for ($i=0; $i < $length; $i++) { 
					
					$article[$i] = array(
						'Title' => $result['list'][$i]['article'],
						'Description' => $result['list'][$i]['source'],
						'Icon' => $result['list'][$i]['icon'],
						'Url' => $result['list'][$i]['detailurl']
						);
				}
				return $article;
				break;

			case '308000':
				$length = count($result['list']) > 3?3:count($result['list']);
				for ($i=0; $i < $length; $i++) { 
					
					$article[$i] = array(
						'Name' => $result['list'][$i]['name'],
						'Info' => $result['list'][$i]['info'],
						'Icon' => $result['list'][$i]['icon'],
						'Url' => $result['list'][$i]['detailurl']
						);
				}
				return $article;
				break;	
			
			default:
				return $result['text'];
				break;
		}

		
	}

?>

<?php
/**  index.php
  * wechat php test
  */

//define your token
define("TOKEN", "yefeng");
$access_token = "";

$wechatObj = new wechat();

$wechatObj->responseMsg();
//$wechatObj->setMenu();

class wechat
{
	
  /*  public function setMenu() {

        $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=BeIkRCHJpK8o0Af3UR1xKALpdeATwKAeo7xuS41yBWQUHpaRfrUStkaZhm7paTunXXVC62rpfNCOqJdlR3oJHRSHBHX4oejwrrjhwx_xs0AAidjYK8wtY76bB3k_xUbRYIAdAFAUEW";

        

        $ch = curl_init($url) ;
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

        $result = curl_exec($ch) ;
        curl_close($ch) ;
        return $result;
    }
*/

    public function responseMsg()
    {

		$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

		if (!empty($postStr)){
               
                libxml_disable_entity_loader(true);
              	$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $this->getContentFromMsgType($postObj);            
				
        }else {
        	echo "post提交为空~";
        	exit;
        }
    }

    public function getContentFromMsgType($postObj) {

        $fromUsername = $postObj->FromUserName;
        $toUsername = $postObj->ToUserName;
        $msgType = $postObj->MsgType;
        $time = time();

        switch ($msgType) {

            case 'text':
                $keyword = trim($postObj->Content);

                include('./robot.php'); 
                $contentStr = MyRobot($keyword);

                if(is_array($contentStr)) {

                        $length = count($contentStr);

                        for ($i=0; $i < $length; $i++) { 
                           
                           $con = $contentStr[$i];
                        
                           foreach ($con as $key => $value) {                           
                                if(!($value)) {

                                }
                                else {
                                   $con_array = $con_array.$value."\n\n";
                            }
                           }
                        }
                        $contentStr = $con_array;
                    }                   
                $resultStr = $this->responseText($postObj,$contentStr);
                echo $resultStr;
                break;
            case 'image':
                $imageUrl = $postObj->PicUrl;
                $textTpl = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>   
                            <Content><![CDATA[%s]]></Content>                         
                            <FuncFlag>0</FuncFlag>
                            </xml>";
                                                 
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $imageUrl);
                echo $resultStr;
                break;
            case 'voice':
                echo "voice";
                break;
            case 'shortvideo':
                $resultStr = $this->responseText($postObj,"你发的是视频文件~");                
                echo $resultStr;
                break;
            case 'location':
                echo "location";
                break;
            case 'link':
                echo "link";
                break;
            case 'event':
                $this->getContentFromEvent($postObj);
                break;
            default:
                $resultStr = $this->responseText($postObj,"我是图灵机器人,不信你可以发消息给我咯~~");
                echo $resultStr;
                break;
        }
        
    }

    public function getContentFromEvent($postObj) {

        $fromUsername = $postObj->FromUserName;
        $toUsername = $postObj->ToUserName;
        $creatTime = $postObj->CreateTime;
        $event = $postObj->Event;

        $time = time();

        switch ($event) {
            case 'subscribe':
                echo $this->responseText($postObj,"欢迎关注~~我是图灵机器人,不信你发消息给我看看咯~~");
                break;
            case 'unsubscribe':
                echo $this->responseText($postObj,"亲~你要离开我了,好舍不得啊~~");
                break;
            default:
                echo $this->responseText($postObj,"信不信我揍你~~");
                break;
        }

    }

    public function responseText($postObj,$contentStr) {

        $fromUsername = $postObj->FromUserName;
        $toUsername = $postObj->ToUserName;
        $creatTime = $postObj->CreateTime;
        $time = time();
        $textTpl = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <Content><![CDATA[%s]]></Content>
                            <FuncFlag>0</FuncFlag>
                            </xml>";
                                                 
        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, "text", $contentStr);
        return $resultStr;
    }
	
    public function getImageId() {

        $access_token = getAccessToken();
        $url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=".$access_token."&type=thumb";
        $filepath = dirname(__FILE__)."/crazy.jpg";
        $data = array('media' =>"@".filepath);

        $cur = curl_init();
        curl_setopt($cur,CURLOPT_URL,$url);
        curl_setopt($cur,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($cur,CURLOPT_PORT,1);
        curl_setopt($cur,CURLOPT_POSTFIELDS,$data);
        $media_res = curl_exec($cur);
        curl_close($cur);

        $thumb_res = json_decode($media_res,true);
        $thumb_media_id = $thumb_res['thumb_media_id'];
        return $thumb_media_id;
    }

    public function getAccessToken() {

        define("APPID","wx53736436e359345d");
        define("APPSECRET","41ab99dbda8b8b4250919e9e23058ba1");


        $access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".APPID."&secret=".APPSECRET;

        $result = file_get_contents($access_token_url);
        $result = json_encode($result,true);
        $access_token = $result['access_token'];
        return $access_token;
    }
	


}
    
    




猜你喜欢

转载自blog.csdn.net/k183000860/article/details/52174848