首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

微信公众平台PHP开发Demo:基于CodeIgniter框架的实现

     編輯:PHP 相關知識

微信公众平台PHP开发Demo:基于CodeIgniter框架的实现

本文分享一个在SAE环境下搭建的微信公众平台开发Demo,使用CodeIgniter框架实现。虽然该Demo功能简单,但展示了微信消息接收、处理及回复的核心流程,适合初学者参考学习。

核心代码解析

控制器Welcome继承自CI_Controller,入口方法index()直接调用responseMsg()处理微信消息:

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
define("TOKEN", "109");
class Welcome extends CI_Controller {
    public function index() {
        $this->responseMsg();
    }
    public function responseMsg() {
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        if (!empty($postStr)) {
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $fromUsername = $postObj->FromUserName;
            $toUsername = $postObj->ToUserName;
            $MsgType = $postObj->MsgType;
            $time = time();
            // 根据消息类型处理
            switch($MsgType) {
                case 'text':
                    $keyword = trim($postObj->Content);
                    // 文本消息回复模板
                    $textTpl = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[%s]]></MsgType>
                        <Content><![CDATA[%s]]></Content>
                        </xml>";
                    switch($keyword) {
                        case '1': // 随机笑话
                            $sql = 'SELECT * FROM jokes';
                            $query = $this->db->query($sql);
                            $res = $query->result_array();
                            $num_rows = $query->num_rows();
                            $key = rand(0, $num_rows - 1);
                            $contentStr = $res[$key]['content'];
                            break;
                        case '2': // 返回用户名
                            $contentStr = 'Your fromUsername is: '.$fromUsername;
                            break;
                        case '3': // 图文消息示例
                            $newsTpl = "... 此处省略图文模板XML ...";
                            $resultStr = sprintf($newsTpl, $fromUsername, $toUsername, $time, 'news', '百度', '', 'https://www.baidu.com/img/bdlogo.gif', 'https://www.baidu.com', 'Google', '', '', 'https://www.google.com');
                            echo $resultStr;
                            exit;
                        case '4':
                            $contentStr = "该功能正在开发中,敬请期待...";
                            break;
                        default: // 帮助菜单
                            $contentStr = "回复数字 选择服务\n";
                            $contentStr .= "1 笑话精选\n";
                            $contentStr .= "2 获取您的Username...\n";
                            $contentStr .= "3 图文消息示例\n";
                            $contentStr .= "4 开发中...\n";
                            break;
                    }
                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, 'text', $contentStr);
                    break;
                case 'image': // 图片消息原样返回
                    $media_id = $postObj->MediaId;
                    $imgTpl = "<xml>...</xml>";
                    $resultStr = sprintf($imgTpl, $fromUsername, $toUsername, $time, 'image', $media_id);
                    break;
                case 'voice': // 语音消息固定回复
                    $textTpl = "<xml>...</xml>";
                    $contentStr = '你啥?俺听不见...';
                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, 'text', $contentStr);
                    break;
                default:
                    $resultStr = "Input something...";
                    break;
            }
            echo $resultStr;
        } else {
            echo "";
            exit;
        }
    }
}

关键点说明

  • Token验证:Demo中硬编码TOKEN,实际部署需在微信公众平台配置一致。
  • 消息解析:使用simplexml_load_string解析XML,需注意LIBXML_NOCDATA参数保留CDATA内容。
  • 多类型响应:支持文本、图片、语音、图文等消息类型,通过MsgType分发。
  • 数据库交互:笑话功能演示了CI的$this->db->query()查询用法。
  • 图文消息构建:案例3展示了多条图文消息的XML组装,注意ArticleCount与item数量对应。

部署建议

1. 将代码部署至支持PHP的服务器(SAE、本地Apache/Nginx均可)。
2. 在微信公众平台“基本配置”填写服务器URL和Token。
3. 启用服务器配置后,关注测试号发送数字1-4即可体验对应功能。

扩展方向

可在此基础上集成:用户会话管理、素材管理、模板消息发送、OAuth网页授权等高级接口,构建完整的微信应用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved