php下基于百度BAE的微信SDK框架

楼主现在在做一个小项目,特把项目中的文档分享给大家

<?php
/**
 * encode by Charles Zhu
 * hualuo@yinghualuo.cn
 */
//define your token
define("TOKEN", "weixin");
include_once("bae_db.php");

$wechatObj = new wechatCallbackapiTest();

if (!isset($_GET['echostr'])) {
    $wechatObj->responseMsg();
} else {
    $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)) {
            /* 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);
            $this->handlePostObj($postObj);
            exit;
        } else {
            echo "";
            exit;
        }
    }

    private function checkSignature() {
        // you must define TOKEN by yourself
        if (!defined("TOKEN")) {
            throw new Exception('TOKEN is not defined!');
        }

        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];

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

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

    // 区分接收到的消息类型,并导向不同目标函数
    private function handlePostObj($postObj) {
        $msgType = trim($postObj->MsgType);
        // type :  text,image,voice(recognition),video,shortvideo,location,link
        switch ($msgType) {
            case "event":
                $this->receiveEvent($postObj);
                break;

            case "text":
                $this->receiveTextMsg($postObj);
                break;

            case "image":
                $this->receiveImageMsg($postObj);
                break;

            case "voice":
                $this->receiveVoiceMsg($postObj);
                break;

            case "video":
                $this->receiveVideoMsg($postObj);
                break;

            case "shortvideo":
                $this->receiveShortvideoMsg($postObj);
                break;

            case "location":
                $this->receiveLocationMsg($postObj);
                break;

            case "link":
                $this->receiveLinkMsg($postObj);
                break;
            default :
                $this->receiveOtherMsg($postObj);
        }
        // 更新最后一次操作时间
        $this->update($postObj);
        mysql_close($GLOBALS['db_link']);
        exit;
    }

    // 接收事件函数
    private function receiveEvent($postObj) {
        $event = $postObj->Event;
        switch ($event) {
            case "subscribe":
                $this->receiveSubscribeEvent($postObj);
                break;
            case "unsubscribe":
                $this->receiveUnsubscribeEvent($postObj);
                break;
            case "SCAN":
                $this->receiveScanEvent($postObj);
                break;
            case "LOCATION":
                $this->receiveLocationEvent($postObj);
                break;
            case "CLICK":
                $this->receiveClickEvent($postObj);
                break;
            case "VIEW":
                $this->receiveViewEvent($postObj);
                break;
            default :
                $this->receiveOtherEvent($postObj);
        }
    }
    // 更新最后一次交互时间
    private function update($postObj) {
            $time = date("Y-m-d H:i:s", trim($postObj->CreateTime));
            $openid = trim($postObj->FromUserName);

            $sql_update ="UPDATE `{$GLOBALS['db_name']}`.`user` SET `last_interact_time` =  '{$time}' WHERE  `user`.`openid` = '{$openid}';";
            mysql_query($sql_update, $GLOBALS['db_link']);
    }
    // 收到文本消息
    private function receiveTextMsg($postObj) {

        $time = date("Y-m-d H:i:s", trim($postObj->CreateTime));
        $openid = trim($postObj->FromUserName);
        $msg_id = trim($postObj->MsgId);
        $content = trim($postObj->Content);
        $sql_insert = "INSERT INTO  `" . $GLOBALS['db_name'] . "`.`msgRecord` (`time`,`openid`,`msg_id`,`msg_type`,`msg_text`) "
                . "VALUES ('" . $time . "','" . $openid . "','" . $msg_id . "','text','" . $content . "');";
        mysql_query($sql_insert, $GLOBALS['db_link']);
        $this->responseTextMsg("I have received your message:" . $postObj->Content, $postObj);

    }

    // 收到图片消息
    private function receiveImageMsg($postObj) {
        $time = date("Y-m-d H:i:s", trim($postObj->CreateTime));
        $openid = trim($postObj->FromUserName);
        $msg_id = trim($postObj->MsgId);
        $pic_url = trim($postObj->PicUrl);
        $media_id = trim($postObj->MediaId);
        $sql_insert = "INSERT INTO `" . $GLOBALS['db_name'] . "`.`msgRecord`(`time`,`openid`,`msg_id`,`msg_type`,`msg_image_id`,`msg_image_url`)"
                . "VALUES ('" . $time . "','" . $openid . "','" . $msg_id . "','image','" . $media_id . "','" . $pic_url . "');";
        mysql_query($sql_insert, $GLOBALS['db_link']);
        
        // $this->responseTextMsg("I have received your pic,url:" . $pic_url . " ,media_id:" . $media_id, $postObj);
		$this->responseImageMsg($media_id, $postObj);
    }

    // 收到语音消息
    private function receiveVoiceMsg($postObj) {
        $time = date("Y-m-d H:i:s", trim($postObj->CreateTime));
        $openid = trim($postObj->FromUserName);
        $msg_id = trim($postObj->MsgId);
        $media_id = trim($postObj->MediaId);
        $format = trim($postObj->Format);
        $recognition = trim($postObj->Recognition);
        if (empty($recognition) || !isset($recognition)) {
            $recognition = "";
        }
        $sql_insert = "INSERT INTO `" . $GLOBALS['db_name'] . "`.`msgRecord`"
                . "(`time`,`openid`,`msg_id`,`msg_type`,`msg_voice_id`,`msg_voice_format`,`msg_voice_recognition`)values"
                . "('" . $time . "','" . $openid . "','" . $msg_id . "','voice','" . $media_id . "','" . $format . "','" . $recognition . "');";
        mysql_query($sql_insert, $GLOBALS['db_link']);
        
        $this->responseTextMsg("I have received your voice,format:" . $format . ",media_id:" . $media_id . ",recognition:" . $recognition, $postObj);
    }

    // 收到视频消息
    private function receiveVideoMsg($postObj) {
        $time = date("Y-m-d H:i:s", trim($postObj->CreateTime));
        $openid = trim($postObj->FromUserName);
        $msg_id = trim($postObj->MsgId);
        $media_id = trim($postObj->MediaId);
        $thumb_media_id = trim($postObj->ThumbMediaId);
        $sql_insert = "INSERT INTO `" . $GLOBALS['db_name'] . "`.`msgRecord`"
                ."(`time`,`openid`,`msg_id`,`msg_type`,`msg_video_id`,`msg_video_thumb_id`)values"
                ."('".$time."','".$openid."','".$msg_id."','video','$media_id','$thumb_media_id');";
        mysql_query($sql_insert, $GLOBALS['db_link']);
        $this->responseTextMsg("I have received your video,media_id:".$media_id.",thumb_media_id:".$thumb_media_id,$postObj);
    }

    // 收到短视频消息
    private function receiveShortvideoMsg($postObj) {
        $time = date("Y-m-d H:i:s", trim($postObj->CreateTime));
        $openid = trim($postObj->FromUserName);
        $msg_id = trim($postObj->MsgId);
        $media_id = trim($postObj->MediaId);
        $thumb_media_id = trim($postObj->ThumbMediaId);
        $sql_insert = "INSERT INTO `" . $GLOBALS['db_name'] . "`.`msgRecord`"
                ."(`time`,`openid`,`msg_id`,`msg_type`,`msg_svideo_id`,`msg_svideo_thumb_id`)values"
                ."('".$time."','".$openid."','".$msg_id."','video','$media_id','$thumb_media_id');";
        mysql_query($sql_insert, $GLOBALS['db_link']);
        $this->responseTextMsg("I have received your shortvideo,media_id:".$media_id.",thumb_media_id:".$thumb_media_id,$postObj);
    }

    // 收到位置消息
    private function receiveLocationMsg($postObj) {
        $time = date("Y-m-d H:i:s", trim($postObj->CreateTime));
        $openid = trim($postObj->FromUserName);
        $msg_id = trim($postObj->MsgId);
        $location_x = trim($postObj->Location_X);
        $location_y = trim($postObj->Location_Y);
        $scale = trim($postObj->Scale);
        $label = trim($postObj->Label);
        $sql_insert = "INSERT INTO `" . $GLOBALS['db_name'] . "`.`msgRecord`"
                ."(`time`,`openid`,`msg_id`,`msg_type`,`msg_location_x`,`msg_location_y`,`msg_location_scale`,`msg_location_label`)values"
                ."('".$time."','".$openid."','".$msg_id."','location','".$location_x."','".$location_y."','".$scale."','".$label."');";
        mysql_query($sql_insert, $GLOBALS['db_link']);
        $sql_update = "UPDATE `{$GLOBALS['db_name']}`.`user` SET  `last_longitude` =  '{$location_y}',"
            ."`last_latitude` =  '{$location_x}' ,`last_precision` = '{$scale}' WHERE  `user`.`openid` = '{$openid}';";
        mysql_query($sql_update, $GLOBALS['db_link']);
        
        $this->responseTextMsg("I have received your location,x:".$location_x.",y:".$location_y.",scale:".$scale.",label:".$label,$postObj);
    }

    // 收到链接消息
    private function receiveLinkMsg($postObj) {
        $time = date("Y-m-d H:i:s", trim($postObj->CreateTime));
        $openid = trim($postObj->FromUserName);
        $msg_id = trim($postObj->MsgId);
        $title = trim($postObj->Title);
        $description = trim($postObj->Description);
        $url = trim($postObj->Url);
        $sql_insert = "INSERT INTO `" . $GLOBALS['db_name'] . "`.`msgRecord`"
                ."(`time`,`openid`,`msg_id`,`msg_type`,`msg_link_title`,`msg_link_description`,`msg_link_url`)values"
                ."('".$time."','".$openid."','".$msg_id."','link','".$title."','".$description."','".$url."');";
        mysql_query($sql_insert, $GLOBALS['db_link']);
        $this->responseTextMsg("I have received your url,title:".$title.",description:".$description.",url:".$url,$postObj);
    }

    // 其他位置消息
    private function receiveOtherMsg($postObj) {
        $this->responseTextMsg("我还没学会这项技能,换个姿势吧!",$postObj);
    }

    
    // 收到关注事件 或者 含参数二维码关注
    private function receiveSubscribeEvent($postObj) {
        // 警告!重复关注的判断事件没有做
        $openid = trim($postObj->FromUserName);
        $time = date("Y-m-d H:i:s",trim($postObj->CreateTime));
        $event_type = trim($postObj->Event);
        $event_key = trim($postObj->EventKey);
        $ticket = trim($postObj->Ticket);
        $sql_query_openid = "SELECT COUNT( * )  from `user` where `openid` ='{$openid}'";
        $count = mysql_query($sql_query_openid, $GLOBALS['db_link']);
        $count = mysql_fetch_array($count);
        $count = $count[0];
        // 向事件表插入关注事件log
        $sql_insert1 = "INSERT INTO `{$GLOBALS['db_name']}`.`eventRecord` (`time`, `openid`, `event_type`, `event_key`, `ticket`) "
                . "VALUES ('{$time}', '{$openid}', '{$event_type}', '{$event_key}', '{$ticket}');";
        mysql_query($sql_insert1, $GLOBALS['db_link']);
        if($count == 0){
            $sql_insert2 = "INSERT INTO `{$GLOBALS['db_name']}`.`user` (`openid`, `user_type`, `last_interact_time` ,`subscribe_time`) VALUES ".
                    "('{$openid}', 'unknown', '{$time}', '{$time}');";
            mysql_query($sql_insert2, $GLOBALS['db_link']);

        }else{
            $sql_update = "UPDATE `{$GLOBALS['db_name']}`.`user` SET `last_interact_time` = '{$time}', `subscribe_time` = '{$time}' WHERE `user`.`openid` = '{$openid}'";
            mysql_query($sql_update, $GLOBALS['db_link']);
            }
        // 判断是否为二维码来源
        if(strlen($event_key) > 0 || strlen($ticket) > 0){
            $this->responseTextMsg("欢迎关注,你的openid是:{$openid},ticketid:{$ticket}", $postObj);
        }
        else{
            $this->responseTextMsg("欢迎关注,你的openid是:{$openid}", $postObj);
        }
    }

    // 收到取消关注事件
    private function receiveUnsubscribeEvent($postObj) {
        $openid = trim($postObj->FromUserName);
        $time = date("Y-m-d H:i:s",trim($postObj->CreateTime));
        $event_type = trim($postObj->Event);
        $sql_insert = "INSERT INTO `{$GLOBALS['db_name']}`.`eventRecord` (`time`, `openid`, `event_type`) "
                . "VALUES ('{$time}', '{$openid}', '{$event_type}');";
        mysql_query($sql_insert, $GLOBALS['db_link']);
        $sql_unsubscribe = "UPDATE `{$GLOBALS['db_name']}`.`user` SET `unsubscribe_time` = '{$time}' WHERE `user`.`openid` = '{$openid}'";
        mysql_query($sql_unsubscribe, $GLOBALS['db_link']);
        echo "";
    }

    // 收到已关注用户,扫描二维码事件  关键字段event_key 关键字SCAN
    private function receiveScanEvent($postObj) {
        $openid = trim($postObj->FromUserName);
        $time = date("Y-m-d H:i:s",trim($postObj->CreateTime));
        $event_type = trim($postObj->Event);
        $event_key = trim($postObj->EventKey);
        $ticket = trim($postObj->Ticket);
        $sql_insert = "INSERT INTO `{$GLOBALS['db_name']}`.`eventRecord` (`time`, `openid`, `event_type`, `event_key`, `ticket`) "
                . "VALUES ('{$time}', '{$openid}', '{$event_type}', '{$event_key}', '{$ticket}');";
        mysql_query($sql_insert, $GLOBALS['db_link']);
        $this->responseTextMsg("你是从含参数二维码扫描的,二维码ticket:{$openid}", $postObj);
    }

    // 收到用户被动位置事件,需要用户同意公众号允许获取地理位置
    private function receiveLocationEvent($postObj) {
        $openid = trim($postObj->FromUserName);
        $time = date("Y-m-d H:i:s",trim($postObj->CreateTime));
        $event_type = trim($postObj->Event);
        $latitude = trim($postObj->Latitude);
        $longitude = trim($postObj->Longitude);
        $precision = trim($postObj->Precision);
        $sql_insert = "INSERT INTO `{$GLOBALS['db_name']}`.`eventRecord` (`time`, `openid`, `event_type`, `latitude`, `longitude`, `precision`) "
            . "VALUES('{$time}', '{$openid}', '{$event_type}', '{$latitude}', '{$longitude}', '{$precision}');";
        mysql_query($sql_insert, $GLOBALS['db_link']);
        $sql_update = "UPDATE `{$GLOBALS['db_name']}`.`user` SET `last_longitude` = '{$longitude}', `last_latitude` = '{$latitude}', `last_precision` = '{$precision}' WHERE  `user`.`openid` = '{$openid}';";
        mysql_query($sql_update, $GLOBALS['db_link']);
        $this->responseTextMsg("收到你的位置被动事件,纬度:{$latitude},经度:{$longitude},精确度:{$precision}", $postObj);
    }

    // 收到菜单点击事件
    private function receiveClickEvent($postObj) {
        $openid = trim($postObj->FromUserName);
        $time = date("Y-m-d H:i:s",trim($postObj->CreateTime));
        $event_type = trim($postObj->Event);
        $event_key = trim($postObj->EventKey);
        $sql_insert = "INSERT INTO `{$GLOBALS['db_name']}`.`eventRecord` (`time`, `openid`, `event_type`, `event_key`) "
            . "VALUES('{$time}', '{$openid}', '{$event_type}', '{$event_key}');";
        mysql_query($sql_insert, $GLOBALS['db_link']);
        $this->responseTextMsg("收到你的菜单点击事件:key:{$event_key}", $postObj);
        
    }

    // 收到点击菜单跳转链接时的事件
    private function receiveViewEvent($postObj) {
        $openid = trim($postObj->FromUserName);
        $time = date("Y-m-d H:i:s",trim($postObj->CreateTime));
        $event_type = trim($postObj->Event);
        $event_key = trim($postObj->EventKey);
        $sql_insert = "INSERT INTO `{$GLOBALS['db_name']}`.`eventRecord` (`time`, `openid`, `event_type`, `event_key`) "
            . "VALUES('{$time}', '{$openid}', '{$event_type}', '{$event_key}');";
        mysql_query($sql_insert, $GLOBALS['db_link']);
        $this->responseTextMsg("收到你的点击菜单跳转链接事件:key:{$event_key}", $postObj);
    }

    // 收到其他未知事件
    private function receiveOtherEvent($postObj) {
        $this->responseTextMsg("我还没学会这项技能,换个姿势吧!",$postObj);
    }

    // 回复文字消息
    private function responseTextMsg($text, $postObj) {
        $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>";
        $msgType = "text";
        $fromUsername = $postObj->FromUserName;
        $toUsername = $postObj->ToUserName;
        $time = time();
        if (!isset($text) || empty($text)) {
            echo "";
            exit;
        }
        // 这里的$fromUsername 和 $toUsername 是来自微信发来的,发回去就要相互对调一下!!!!
        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $text);
        echo $resultStr;
    }
    // 回复图片消息  没有测试
    private function responseImageMsg($image_media_id, $postObj)
    {
        $imageTpl = "<xml>"
                . "<ToUserName><![CDATA[%s]]></ToUserName>"
                . "<FromUserName><![CDATA[%s]]></FromUserName>"
                . "<CreateTime>%s</CreateTime>"
                . "<MsgType><![CDATA[%s]]></MsgType>"
                . "<Image><MediaId><![CDATA[%s]]></MediaId></Image>"
                . "</xml>";
        $msgType = "image";
        $fromUsername = $postObj->FromUserName;
        $toUsername = $postObj->ToUserName;
        $time = time();
        // 这里的$fromUsername 和 $toUsername 是来自微信发来的,发回去就要相互对调一下!!!!
        $resultStr = sprintf($imageTpl, $fromUsername, $toUsername, $time, $msgType, $image_media_id);
        echo $resultStr;
    }
    // 回复语音消息  没有测试
    private function responseVoiceMsg($voice_media_id, $postObj)
    {
        $voiceTpl = "<xml>"
                . "<ToUserName><![CDATA[%s]]></ToUserName>"
                . "<FromUserName><![CDATA[%s]]></FromUserName>"
                . "<CreateTime>%s</CreateTime>"
                . "<MsgType><![CDATA[%s]]></MsgType>"
                . "<Voice><MediaId><![CDATA[%s]]></MediaId></Voice>"
                . "</xml>";
        $msgType = "voice";
        $fromUsername = $postObj->FromUserName;
        $toUsername = $postObj->ToUserName;
        $time = time();
        // 这里的$fromUsername 和 $toUsername 是来自微信发来的,发回去就要相互对调一下!!!!
        $resultStr = sprintf($voiceTpl, $fromUsername, $toUsername, $time, $msgType, $voice_media_id);
        echo $resultStr;
    }
    // 回复视频消息  没有测试  $video_title,$video_description这两个参数可以为空
    private function responseVideoMsg($video_meida_id, $video_title, $video_description, $postObj)
    {
        $videoTpl = "<xml>"
                . "<ToUserName><![CDATA[$s]]></ToUserName>"
                . "<FromUserName><![CDATA[$s]]></FromUserName>"
                . "<CreateTime>$s</CreateTime>"
                . "<MsgType><![CDATA[$s]]></MsgType>"
                . "<Video>"
                    . "<MediaId><![CDATA[$s]]></MediaId>"
                    . "<Title><![CDATA[$s]]></Title>"
                    . "<Description><![CDATA[$s]]></Description>"
                . "</Video>"
                . "</xml>";
        $msgType = "video";
        $fromUsername = $postObj->FromUserName;
        $toUsername = $postObj->ToUserName;
        $time = time();
        // 这里的$fromUsername 和 $toUsername 是来自微信发来的,发回去就要相互对调一下!!!!
        $resultStr = sprintf($videoTpl, $fromUsername, $toUsername, $time, $msgType, $video_meida_id, $video_title, $video_description);
        echo $resultStr;
    }
    
    // 回复音乐消息  没有测试   $music_title、$music_description、$music_url、$hdmusic_url可以省略
    private function responseMusicMsg($music_title, $music_description, $music_url, $hdmusic_url, $music_thumb_media_id, $postObj)
    {
        $musicTpl = "<xml>"
            ."<ToUserName><![CDATA[%s]]></ToUserName>"
            ."<FromUserName><![CDATA[%s]]></FromUserName>"
            ."<CreateTime>%s</CreateTime>"
            ."<MsgType><![CDATA[%s]]></MsgType>"
            ."<Music>"
                ."<Title><![CDATA[%s]]></Title>"
                ."<Description><![CDATA[%s]]></Description>"
                ."<MusicUrl><![CDATA[%s]]></MusicUrl>"
                ."<HQMusicUrl><![CDATA[%s]]></HQMusicUrl>"
                ."<ThumbMediaId><![CDATA[%s]]></ThumbMediaId>"
            ."</Music>"
            ."</xml>";
        $msgType = "music";
        $fromUsername = $postObj->FromUserName;
        $toUsername = $postObj->ToUserName;
        $time = time();
        $resultStr = sprintf($musicTpl, $fromUsername, $toUsername, $time, $msgType, 
                $music_title, $music_description, $music_url, $hdmusic_url ,$music_thumb_media_id);
        echo $resultStr;
        
    }
    
    
    // 回复图文消息  没有测试  
    private function resposeArticlesMsg($articlesObj,$postObj)
    {
        // 判断$articlesObj是否为数组
        if(!is_array($articlesObj))
        {
            echo "";
            exit ;
        } else {
            $msgType = "news";
            $fromUsername = $postObj->FromUserName;
            $toUsername = $postObj->ToUserName;
            $time = time();
            $count = count($articlesObj);
            // 图文item模板
            $itemTpl = "<Music>
                <Title><![CDATA[%s]]></Title>
                <Description><![CDATA[%s]]></Description>
                <MusicUrl><![CDATA[%s]]></MusicUrl>
                <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
                </Music>";
            // 整体模板
            $articleTpl = "<xml>
                <ToUserName><![CDATA[%s]]></ToUserName>
                <FromUserName><![CDATA[%s]]></FromUserName>
                <CreateTime>%s</CreateTime>
                <MsgType><![CDATA[%s]]></MsgType>
                <ArticleCount>%s</ArticleCount>
                <Articles>%s</Articles>
                </xml>";
            $item_str = "";
            foreach ($articlesObj as $item){
                $item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);
            }
            $resultStr = sprintf($articleTpl, $fromUsername, $toUsername, $time, $msgType, $count, $item_str);
            echo $resultStr;
            
        }
    }
    
    
    
    
    // 发送消息用的,以后可以在这里添加加密的东西
    private function resposeMsg($content)
    {
        echo $content;
    }
}?>



<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">已经调试过了,之前楼主使用方倍工作室的SDK有问题,他没有测试调试好,蛋疼。。。附上db_bae.php</span>

<?php
	// 写死到文件里面,如果放到数据库中,每次查询会增加数据库压力
	define("appID", "wxc87a9c73536?????");
	define("appsecret","6036ad004cbaa1b1ef5079ffee4?????");
	
	
	/*替换为你自己的数据库名*/
	$db_name = 'gvGAiDLkiAoflA?????';
	/*填入数据库连接信息*/
	$db_host = 'sqld.duapp.com';
	$db_port = 4050;
	$db_user = '192abbcce33a469dae61bbb05??????';//用户AK    
	$db_pwd = '73b83a3facc046eea5b7f9266??????';//用户SK     
	 /*以上信息都可以在数据库详情页查找到*/
	/*接着调用mysql_connect()连接服务器*/
	$db_link = @mysql_connect("{$db_host}:{$db_port}",$db_user,$db_pwd,true);
	if(!$db_link) {
		die("Connect Server Failed: " . mysql_error());
	}
	/*连接成功后立即调用mysql_select_db()选中需要连接的数据库*/
	if(!mysql_select_db($db_name,$db_link)) {
		die("Select Database Failed: " . mysql_error($link));
	}
?>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
phpWechat 是由一个具有多年行业开发经验的前端 UI 设计师、PHP开发工程师组成的团队设计、研发的一套的微信公众平台管理系统,您可以瞬间完成一个公共号或者PC站或者两者皆有的平台搭建。 phpWeChat 微信+网站开发框架功能亮点: 1、100%开源,没有任何加密文件 phpWeChat核心文件100%开源,没有任何加密文件,开发者可以放心使用而无需担心留有后门程序等。 2、程序轻量级,一天读完所有代码 核心框架压缩包只有2.66M,十分利于开发者迅速阅读全部代码。 3、代码严谨,结构清晰 phpWeChat使用MVC开发模式,各个功能模块之间独立并目录结构统一。开发者可迅速掌握phpWeChat的框架结构。 4、二次开发文档十分完善 我们提供了完善的phpWeChat二次开发文档,便于开发者学习与查阅。 5、高度集成微信接口 phpWeChat高度集成了微信公共号的自动回复、菜单管理、素材管理、模板消息、粉丝管理、微信支付等常用接口,您只需一个函数或2/3行代码即可实现原本需要很费时费力才能开发的功能。 6、phpWeChat也是一个PC(网站)开发框架和CMS 慢慢您会发现,phpWeChat是一个更接近CMS功能的框架。 7、高度封装常用开发功能 只需一两行固定的代码,您便可以写出列表分页、微信支付、文件上传、邮件发送、短信发送等功能。 8、数据结构合理,负载强劲 phpWeChat集成了常见的内存级缓存(MemCache)、文件缓存处理方案,使得系统更符合大数据、大并发的公共号或网站使用。 9、集成应用市场,功能拓展一瞬间 phpWeChat集成了应用市场并在线安装应用的功能,您可以在一瞬间安装完成其他开发者开发的功能模块。 phpWeChat安装方法: 将下载的程序压缩包(zip格式)解压后,将全部文件和文件夹上传至网站根目录。然后输入域名/install.php 即可进入安装程序。 注意:安装phpWeChat前请先创建好phpWeChat所需的数据库。 phpWeChat 目录结构: addons 功能模块目录 admin 公用后台目录 api 插件目录 data 数据缓存目录 install 安装程序目录,安装后请改名或删除 include 公用操作类目录 statics 静态文件目录 template 视图(模板)目录 upload 上传文件存放目录 phpWeChat 更新日志: 新版v1.0.3发布: phpWeChat PC+微信公众号开发核心框架v1.0.3针对v1.0.2版本出现的问题,主要修复了和增加了以下功能: 1、优化自定义模块操作; 2、优化安装过程; 3、修复一处在线支付的PHP版本兼容问题; 4、修复一处自定义模块的问题; 5、修复后台模块管理显示未知版本的bug; 6、修复粉丝行为IP报错的Bug; 7、删除一些冗余代码; 8、修复消息模板不存在时,一直提示[同步中]的bug。
phpWeChat微信公共号开发框架 v1.1.6更新日志 1、修复诺干文字错误; 2、修复微信支付可能出现订单过期提示的bug; 3、修复模块在线更新功能; 4、其他重要更新。 phpWeChat微信公共号开发框架简介 phpWechat 是由一个具有多年行业开发经验的前端 UI 设计师、PHP开发工程师组成的团队设计、研发的一套的微信公众平台管理系统,您可以瞬间完成一个公共号或者PC站或者两者皆有的平台搭建。 phpWeChat 微信 网站开发框架功能亮点: 1、100%开源,没有任何加密文件 phpWeChat核心文件100%开源,没有任何加密文件,开发者可以放心使用而无需担心留有后门程序等。 2、程序轻量级,一天读完所有代码 核心框架压缩包只有2.66M,十分利于开发者迅速阅读全部代码。 3、代码严谨,结构清晰 phpWeChat使用MVC开发模式,各个功能模块之间独立并目录结构统一。开发者可迅速掌握phpWeChat的框架结构。 4、二次开发文档十分完善 我们提供了完善的phpWeChat二次开发文档,便于开发者学习与查阅。 5、高度集成微信接口 phpWeChat高度集成了微信公共号的自动回复、菜单管理、素材管理、模板消息、粉丝管理、微信支付等常用接口,您只需一个函数或2/3行代码即可实现原本需要很费时费力才能开发的功能。 6、phpWeChat也是一个PC(网站)开发框架和CMS 慢慢您会发现,phpWeChat是一个更接近CMS功能的框架。 7、高度封装常用开发功能 只需一两行固定的代码,您便可以写出列表分页、微信支付、文件上传、邮件发送、短信发送等功能。 8、数据结构合理,负载强劲 phpWeChat集成了常见的内存级缓存(MemCache)、文件缓存处理方案,使得系统更符合大数据、大并发的公共号或网站使用。 9、集成应用市场,功能拓展一瞬间 phpWeChat集成了应用市场并在线安装应用的功能,您可以在一瞬间安装完成其他开发者开发的功能模块。 phpWeChat安装方法: 将下载的程序压缩包(zip格式)解压后,将全部文件和文件夹上传至网站根目录。然后输入域名/install.php 即可进入安装程序。 注意:安装phpWeChat前请先创建好phpWeChat所需的数据库。 phpWeChat 目录结构: addons 功能模块目录 admin 公用后台目录 api 插件目录 data 数据缓存目录 install 安装程序目录,安装后请改名或删除 include 公用操作类目录 statics 静态文件目录 template 视图(模板)目录 upload 上传文件存放目录 phpWeChat微信公共号开发框架前台页面 phpWeChat微信公共号开发框架后台管理 后台路径:域名/phpwechat.php 用户名与密码:安装是可设置 后台页面 相关阅读 同类推荐:CMS

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值