Table of Contents
WeChat development model (php)
Home Backend Development PHP Tutorial WeChat development mode (php)_PHP tutorial

WeChat development mode (php)_PHP tutorial

Jul 13, 2016 am 10:19 AM
model

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...
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

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What does WeChat's Do Not Disturb mode do? What does WeChat's Do Not Disturb mode do? Feb 23, 2024 pm 10:48 PM

What does WeChat Do Not Disturb mode mean? Nowadays, with the popularity of smartphones and the rapid development of mobile Internet, social media platforms have become an indispensable part of people's daily lives. WeChat is one of the most popular social media platforms in China, and almost everyone has a WeChat account. We can communicate with friends, family, and colleagues in real time through WeChat, share moments in our lives, and understand each other’s current situation. However, in this era, we are also inevitably faced with the problems of information overload and privacy leakage, especially for those who need to focus or

What is sleep mode used for on iPhone? What is sleep mode used for on iPhone? Nov 04, 2023 am 11:13 AM

iOS devices have long been able to track your sleep patterns and more using the Health app. But isn’t it annoying when you’re disturbed by notifications while you’re sleeping? These notifications may be irrelevant and therefore disrupt your sleep patterns in the process. While Do Not Disturb mode is a great way to avoid distractions while sleeping, it can cause you to miss important calls and messages you receive during the night. Thankfully, this is where sleep mode comes in. Let’s learn more about it and how to use it on iPhone. What role does sleep mode play on the iPhone? Sleep mode is a dedicated focus mode in iOS that is automatically activated based on your sleep schedule in the "Health" App. It helps you set an alarm and then

Do Not Disturb Mode Not Working in iPhone: Fix Do Not Disturb Mode Not Working in iPhone: Fix Apr 24, 2024 pm 04:50 PM

Even answering calls in Do Not Disturb mode can be a very annoying experience. As the name suggests, Do Not Disturb mode turns off all incoming call notifications and alerts from emails, messages, etc. You can follow these solution sets to fix it. Fix 1 – Enable Focus Mode Enable focus mode on your phone. Step 1 – Swipe down from the top to access Control Center. Step 2 – Next, enable “Focus Mode” on your phone. Focus Mode enables Do Not Disturb mode on your phone. It won't cause any incoming call alerts to appear on your phone. Fix 2 – Change Focus Mode Settings If there are some issues in the focus mode settings, you should fix them. Step 1 – Open your iPhone settings window. Step 2 – Next, turn on the Focus mode settings

What does epc+o mode mean? What does epc+o mode mean? Nov 09, 2022 am 10:54 AM

The epc+o model refers to the general contracting framework that integrates design, procurement, etc. It is some operational links derived from epc; that is, during the construction period, the general contractor must not only undertake design tasks in the traditional sense In addition, it also has to undertake all maintenance tasks during the operation period. This model can greatly improve the operational efficiency of many projects and quickly reduce operating costs.

iPhone 15 Pro: How to get rid of the silent mode symbol in the status bar iPhone 15 Pro: How to get rid of the silent mode symbol in the status bar Sep 24, 2023 pm 10:01 PM

On iPhone 15 Pro and iPhone 15 Pro Max models, Apple introduced a physically programmable action button that replaces the traditional ring/silent switch above the volume buttons. The action button can be programmed to perform several different functions, but the ability to switch between silent and ring modes isn't gone. By default, a long press on the action button will silence the device and the button's tactile feedback will pulse three times. Both iPhone 15 Pro models will display a crossed-out bell symbol next to the time in the status bar to indicate that silent/silent mode is activated, and it will remain so until you long-press the Action button again to unmute the device. If you prefer to put your iPhone in silent mode

How to enable 'Notepad++ Dark Mode' and 'Notepad++ Dark Theme'? How to enable 'Notepad++ Dark Mode' and 'Notepad++ Dark Theme'? Oct 27, 2023 pm 11:17 PM

Notepad++ dark mode v8.0 has no parameters, Notepad++ is the most useful text editor. Every app running on Windows 10 supports dark mode. You can name web browsers such as Chrome, Firefox, and Microsoft Edge. If you work on Notepad++, the default white background may hurt your eyes. Developers have added dark mode to version 8 of Notepad++, here's how to turn it on. Enable Notepad for Windows 11/10 ++ Dark Mode Launch Notepad ++ Click "Settings" > "Preferences" > "Dark Mode" Select "Enable Dark Mode" to restart Notepad

Guide to using standby mode in iOS 17 Guide to using standby mode in iOS 17 Aug 22, 2023 pm 04:01 PM

Standby mode is coming to iPhone with iOS17, and this guide aims to show you how to use this feature on your iPhone. Standby Mode is a breakthrough feature that transforms iPhone into a dynamic, always-on smart display. When your iPhone is laid horizontally on its side during charging, it activates standby mode. This mode beautifully showcases a host of useful widgets, including but not limited to the current time, local weather updates, a slideshow of your favorite photos, and even music playback controls. A significant advantage of this mode is its ability to display notifications, allowing users to view and engage with them without having to fully wake up their iPhone. How to Use Standby Mode For Standby Mode to work properly, your iPhone must be running i

How to leave S mode on Windows 10/11 How to leave S mode on Windows 10/11 Aug 03, 2023 pm 08:17 PM

Windows in S mode is designed to provide enhanced security and performance by only allowing the installation of apps from the Microsoft Store. While this feature helps prevent malware and ensure a secure computing environment, it may limit users who want to install applications from sources other than the Microsoft Store. If you find yourself in this situation and keep asking yourself how to switch out of S mode in Windows 10/11, then you have come to the right place as we will walk you through how to switch out in Windows 10/11 using two different methods Steps to S Mode ensure you can enjoy the freedom of installing apps from anywhere you choose. Learn how to switch out of S mode in Windows

See all articles