Home >Backend Development >PHP Tutorial >WeChat development mode (php)_PHP tutorial

WeChat development mode (php)_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:19:23884browse

WeChat development model (php)

I just started to learn WeChat development model and PHP, record it here for future reading.

<?php
/**
 * wechat php test
 */

//define your token
define( "TOKEN", "weixin" );
$wechatObj = new wechatCallbackapiTest();
if ( !isset( $_GET[&#39;echostr&#39;] ) ) {
    $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, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA );
            $RX_TYPE = trim( $postObj->MsgType );
            switch ( $RX_TYPE ) {
            case "text":
                $resultStr = $this->receiveText( $postObj );
                break;
            case "event":
                $resultStr = $this->receiveEvent( $postObj );
                break;
            default:
                $resultStr = "";
                break;
            }
            echo $resultStr;
        } else {
            echo "";
            exit;
        }
    }

    private function receiveText( $object ) {
        $getkeyword = $object->Content;
        switch ( $getkeyword ) {
        case &#39;产品&#39;:
            $funcFlag = 0;
            $contentStr = "产品链接:http://www.xxx.com/products/";
            $resultStr = $this->transmitText( $object, $contentStr, $funcFlag );
            break;
        case &#39;新闻&#39;:
            $funcFlag = 0;
            $contentStr ="新闻链接:http://www.xxx.com/news/";
            $resultStr = $this->transmitText( $object, $contentStr, $funcFlag );
            break;
        case &#39;方案&#39;:
            $funcFlag = 0;
            $contentStr ="方案链接:http://www.xxx.com/articles/";
            $resultStr = $this->transmitText( $object, $contentStr, $funcFlag );
            break;
        case &#39;我们&#39;:
            $funcFlag = 0;
            $contentStr ="我们链接:http://www.xxx.com/culture/?type=detail&id=1";
            $resultStr = $this->transmitText( $object, $contentStr, $funcFlag );
            break;
        default:
            break;
        }

        return $resultStr;
    }

    private function receiveEvent( $object ) {
        $contentStr = "";
        switch ( $object->Event ) {
        case "subscribe":
            $contentStr = "欢迎您关注xxx";
        case "unsubscribe":
            break;
        case "CLICK":
            switch ( $object->EventKey ) {
            case "V1001_GETCODE":
                $contentStr = "xxx";
                break;
            case "V1002_HISTORY":
                $contentStr[] = array( "Title" =>"最后一条历史记录",
                    "Description" =>"xxx",
                    "PicUrl" =>"xxx",
                    "Url" =>"xxx" );
                break;
            case "V2001_INTERDUCE":
                $contentStr[] = array( "Title" =>"xxx",
                    "Description" =>"xxx",
                    "Url" =>"http://mp.weixin.qq.com/xxx" );
                break;
            case "V3001_JOIN":
                $getuid = $this->getUid( $object );
                if ( $getuid==1 ) {
                    $contentStr = &#39;Could not connect: &#39;.mysql_error();
                }else {
                    $contentStr = "唯一码:".$getuid;
                }
                break;
            default:
                $contentStr[] = array( "Title" =>"默认菜单回复",
                    "Description" =>"xxx",
                    "PicUrl" =>"xxx",
                    "Url" =>"xxx" );
                break;
            }
            break;
        default:
            break;

        }
        if ( is_array( $contentStr ) ) {
            $resultStr = $this->transmitNews( $object, $contentStr );
        }else {
            $resultStr = $this->transmitText( $object, $contentStr );
        }
        return $resultStr;
    }

    private function transmitText( $object, $content, $funcFlag = 0 ) {
        $textTpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[text]]></MsgType>
                    <Content><![CDATA[%s]]></Content>
                    <FuncFlag>%d</FuncFlag>
                    </xml>";
        $resultStr = sprintf( $textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $funcFlag );
        return $resultStr;
    }

    private function transmitNews( $object, $arr_item, $funcFlag = 0 ) {

        if ( !is_array( $arr_item ) )
            return;

        $itemTpl = "<item>
                    <Title><![CDATA[%s]]></Title>
                    <Description><![CDATA[%s]]></Description>
                    <PicUrl><![CDATA[%s]]></PicUrl>
                    <Url><![CDATA[%s]]></Url>
                    </item>";
        $item_str = "";
        foreach ( $arr_item as $item )
            $item_str .= sprintf( $itemTpl, $item[&#39;Title&#39;], $item[&#39;Description&#39;], $item[&#39;PicUrl&#39;], $item[&#39;Url&#39;] );

        $newsTpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[news]]></MsgType>
                    <Content><![CDATA[]]></Content>
                    %s</ArticleCount>
                    $item_str</Articles>
                    <FuncFlag>%s</FuncFlag>
                    </xml>";
        $resultStr = sprintf( $newsTpl, $object->FromUserName, $object->ToUserName, time(), count( $arr_item ), $funcFlag );
        return $resultStr;
    }

    /* 生成唯一码*/
    public function getUid( $object ) {
        $getOpenid = $object->FromUserName;
        $con = mysql_connect( "localhost", "root", "xxx" );
        mysql_select_db( "xxx", $con );
        if ( !$con ) {
            return 1;
        }
        $flag = true;
        $getUserresult = mysql_query( "SELECT * FROM loginuser WHERE openid = &#39;".$getOpenid."&#39;" );
        $getuserrow = mysql_num_rows( $getUserresult );
        if ( $getuserrow>0 ) {
            $userrow = mysql_fetch_array( $getUserresult );
            if ( $userrow[&#39;state&#39;]==0 ) {
                return $userrow[&#39;userPassword&#39;]."[未完成考试]";
                $flag = false;
            }else {
                return $userrow[&#39;userPassword&#39;]."[已完成考试]";
                $flag = false;
            }
        }
        /* 循环确定唯一性 */
        while ( $flag ) {
            $uid = uniqid( true );
            $uid = substr( $uid, -8 );
            $result = mysql_query( "SELECT * FROM loginuser where userPassword = &#39;".$uid."&#39;" );
            $row = mysql_num_rows( $result );
            if ( $row == 0 ) {
                mysql_query( "INSERT INTO loginuser (userPassword,state,openid) VALUES (&#39;".$uid."&#39;,&#39;0&#39;,&#39;".$getOpenid."&#39;)" );
                mysql_close( $con );
                return $uid;
                $flag =false;

            }
        }

    }
    private function getUidtest( $object ) {
        return $object->FromUserName;
    }
    private function checkSignature() {
        // you must define TOKEN by yourself
        if ( !defined( "TOKEN" ) ) {
            throw new Exception( &#39;TOKEN is not defined!&#39; );
        }

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

?>


www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/875472.htmlTechArticleWeChat development model (php) I just started to learn WeChat development model and PHP, record it here for future reference. responseMsg();}else { $wechatObj->valid();}class wechatCallbackapiTest { public fu...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn