WeChat development mode (php)_PHP tutorial

WBOY
Release: 2016-07-13 10:19:23
Original
848 people have browsed it

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

?>
Copy after login


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...
Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template