php微信公眾號開發簡單記錄


開發前准備:1、服務器 2、微信公眾號測試號(有真實的賬號更好)

測試號申請地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

開發前首先要配置微信公眾號后台URL和Token,我這里是驗證通過后顯示的

驗證代碼:新建了一個wx.php,放入以下代碼,點擊后台配置,

 

//define your token
define("TOKEN", "aabbc_lzpt");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();

class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];

//valid signature , option
if($this->checkSignature()){
echo $echoStr;
exit;
}
}

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)){

$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;
}
}

private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];

$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}

 

將上面的文件清空,放入以下代碼,這個案例有文本消息、事件消息(訂閱和click)和自定義菜單,其余的大家可以看開發文檔

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432

<?php
header("Content-type: text/html; charset=utf-8");
//自定義token,要跟微信平台定義的一樣
    define("TOKEN", "lilili");
    //獲取微信發送數據
    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 
    $wx=new Wx;
    $wx->menu();
    $wx->msg($postStr);
    

class Wx{
    
    //消息處理函數
    function msg($postStr){

    //返回回復數據
    if (!empty($postStr))
    {        
        //解析數據
        $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);       
        //發送消息方ID
        $fromUsername = $postObj->FromUserName;
       //接送消息方ID
        $toUsername = $postObj->ToUserName;       
        //消息類型
        $form_MsgType = $postObj->MsgType; 
        
        //事件消息
        if($form_MsgType=="event")
        {        
            //獲取事件類型
            $form_Event = $postObj->Event;           
            //訂閱事件
            if($form_Event=="subscribe")
            {                            
                
                //回復歡迎圖文信息
                /*
                $resultStr = "<xml>
                                <ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
                                <FromUserName><![CDATA[".$toUsername."]]></FromUserName>
                                <CreateTime>".time()."</CreateTime>
                                <MsgType><![CDATA[news]]></MsgType>
                                <ArticleCount>2</ArticleCount>
                                <Articles>
                                    <item>
                                        <Title><![CDATA[  歡迎關注***微信服務平台,****]]></Title> 
                                        <Description><![CDATA[這是簡短描述文字]]></Description>
                                       <PicUrl><![CDATA[http://a.hiphotos.baidu.com/baike/c0%3Dbaike116%2C5%2C5%2C116%2C38/sign=5cae7405f21f3a294ec5dd9cf84cd754/32fa828ba61ea8d32de5a1df950a304e241f5822.jpg]]></PicUrl>
                                        <Url><![CDATA[http://www.baidu.com]]></Url> </item>
                                    <item>
                                        <Title><![CDATA[最新動態]]></Title>
                                        <Description><![CDATA[]]></Description>
                                       <PicUrl><![CDATA[http://a.hiphotos.baidu.com/baike/c0%3Dbaike116%2C5%2C5%2C116%2C38/sign=5cae7405f21f3a294ec5dd9cf84cd754/32fa828ba61ea8d32de5a1df950a304e241f5822.jpg]]></PicUrl>
                                        <Url><![CDATA[http://www.baidu.com]]></Url> </item>
                                   
                                </Articles>
                               </xml> ";                
                */
                //回復歡迎文字信息               
                
                $reply="您好,歡迎關注****微信公眾平台";
                $resultStr="<xml>
                                <ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
                                <FromUserName><![CDATA[".$toUsername."]]></FromUserName>
                                <CreateTime>".time()."</CreateTime>
                                <MsgType><![CDATA[text]]></MsgType>
                                <Content><![CDATA[".$reply."]]></Content>
                            </xml>";     
            }
            
            
            else if($form_Event=="CLICK")
            {
                $form_Event_Key = $postObj->EventKey; 
                if($form_Event_Key=="V3002_CONTACT")
                {
                    /*
                     $resultStr = "<xml>
                                <ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
                                <FromUserName><![CDATA[".$toUsername."]]></FromUserName>
                                <CreateTime>".time()."</CreateTime>
                                <MsgType><![CDATA[news]]></MsgType>
                                <ArticleCount>1</ArticleCount>
                                <Articles>
                                    <item>
                                        <Title><![CDATA[如何成為本站會員]]></Title> 
                                        <Description><![CDATA[本欄目介紹詳細的加入流程!]]></Description>
                                        <PicUrl><![CDATA[http://a.hiphotos.baidu.com/baike/c0%3Dbaike116%2C5%2C5%2C116%2C38/sign=5cae7405f21f3a294ec5dd9cf84cd754/32fa828ba61ea8d32de5a1df950a304e241f5822.jpg]]></PicUrl>
                                        <Url><![CDATA[http://www.baidu.com]]></Url>
                                    </item>                                                                     
                                </Articles>
                               </xml> ";                
                    */
                    $reply="我們的地址:黃河東路222號\n我們的熱線:0510-88888888";
                    $resultStr="<xml>
                                <ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
                                <FromUserName><![CDATA[".$toUsername."]]></FromUserName>
                                <CreateTime>".time()."</CreateTime>
                                <MsgType><![CDATA[text]]></MsgType>
                                <Content><![CDATA[".$reply."]]></Content>
                            </xml>";     
                } 
            } 
            
           
        }
        //文本消息
        else if($form_MsgType=="text"){
                $content=$postObj->Content;
                if($content=='測試'){
                    $reply="愛你";
                    $resultStr="<xml>
                                <ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
                                <FromUserName><![CDATA[".$toUsername."]]></FromUserName>
                                <CreateTime>".time()."</CreateTime>
                                <MsgType><![CDATA[text]]></MsgType>
                                <Content><![CDATA[".$reply."]]></Content>
                            </xml>";  
                            
                            
                    
                    
                }
                
                
            }
        //地理位置消息
        else if($form_MsgType=="location"){
            $lng1=$postObj->Location_X;
            $lat1=$postObj->Location_Y;    
            $from_Location_Label=$postObj->Label;
            $reply="地理位置:";
            $reply.="緯度".$lat1."\t經度".$lng1."位置".$from_Location_Label;
            $resultStr = "<xml>
                            <ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
                            <FromUserName><![CDATA[".$toUsername."]]></FromUserName>
                            <CreateTime>".time()."</CreateTime>
                            <MsgType><![CDATA[text]]></MsgType>
                            <Content><![CDATA[".$reply."]]></Content>
                           </xml> ";               
            
        } 
        echo $resultStr;
        exit; 
    }
    else
    {
        echo "";
        exit;
    }
    
    
    }
    
    //自定義菜單函數
    function menu(){
        /**
 * 自定義菜單--創建
 * 文檔地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141013
 */
//獲取access_token,寫入文件保存

$accessTokenInfo = file_get_contents("access_token.log");
if($accessTokenInfo){
    $tokenArr = json_decode($accessTokenInfo,true);
    //var_dump($tokenArr);
    if((time() + $tokenArr['expires_in'] -200) >time()){//保證不過期,減去200秒,做緩沖
        $access_token = $tokenArr['access_token'];
        $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $access_token;
        $postArr['button'] = [
            [
                'type'=>'click',
                'name'=>urlencode('地址'),//中文得處理一下,否則報錯
                'key'=>'V3002_CONTACT'
            ],//第一個一級菜單
            [
                'name'=>urlencode('菜單'),
                'sub_button'=>[
                        [
                            "type"=>"view",
                            "name"=>urlencode('搜索'),
                            "url"=>"http://www.soso.com/"
                        ],
                        [
                            "type"=>"view",
                            "name"=>urlencode('百度'),
                            "url"=>"http://www.baidu.com/"
                        ]
                    ]
            ],//第二個一級菜單
        ];
        $postJson = urldecode(json_encode($postArr));
        //CURL發送請求
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch,CURLOPT_POST,1);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$postJson);
        $output = curl_exec($ch);
        curl_close($ch);
        var_dump(json_decode($output,true));

    }
}else{
    //重新請求access_token寫入文件
    $ch = curl_init();
    $appId = "填你自己的";
    $appSecret = "填你自己的";
  //通過訪問這個url可以獲取到access_token,微信服務器以json格式返回的
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret; curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $outPut = curl_exec($ch); curl_close($ch); file_put_contents("access_token.log",$outPut); } } } //自定義菜單 ?>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM