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); } } } //自定义菜单 ?>

 

posted @ 2019-04-04 13:47  坚持一点点  阅读(1425)  评论(0编辑  收藏  举报