贝博恩创新科技网

微信PHP开发如何入门?

微信平台PHP开发完整指南

本教程将带你全面了解微信平台的PHP开发,主要包括三个核心部分:公众号开发小程序开发企业微信开发,无论你是初学者还是有经验的开发者,这份指南都能为你提供清晰的路径和关键的代码示例。

微信PHP开发如何入门?-图1
(图片来源网络,侵删)

第一部分:微信公众号PHP开发

公众号开发是微信生态中最成熟、应用最广泛的部分,主要涉及服务器配置、消息接收与发送、用户管理、网页授权等。

准备工作

  1. 注册公众号

    • 订阅号:适合媒体和个人,信息传播为主。
    • 服务号:适合企业和组织,提供服务和高级接口。
    • 开发者文档:务必熟读 官方文档,这是最重要的参考资料。
  2. 获取开发者凭证

    • 登录公众号后台 -> 设置与开发 -> 基本配置。
    • 记录下 AppID (应用ID)AppSecret (应用密钥)
  3. 搭建开发环境

    微信PHP开发如何入门?-图2
    (图片来源网络,侵删)
    • PHP 环境:推荐使用 PHP 7.4 或更高版本。
    • Web 服务器:Nginx 或 Apache。
    • 域名:需要一个公网域名,并在公众号后台配置为网页授权域名JS接口安全域名

核心概念与流程

A. 服务器配置与Token验证

这是公众号开发的第一步,用于验证你的服务器是否有效。

  • 原理:微信服务器会向你的服务器发送一个GET请求,包含四个参数:signature, timestamp, nonce, echostr,你的服务器需要按照特定规则(sha1( token + timestamp + nonce ))生成一个字符串,并与 signature 对比,如果一致,则返回 echostr 的内容,验证成功。

  • PHP 代码示例 (server.php)

<?php
// 你的Token,必须与公众号后台配置的完全一致
define("TOKEN", "your_token_here");
$wechatObj = new wechatCallbackapiTest();
// 如果是验证服务器有效性,则验证
if (isset($_GET['echostr'])) {
    $wechatObj->valid();
} else {
    // 否则,处理接收到的消息
    $wechatObj->responseMsg();
}
class wechatCallbackapiTest
{
    // 验证服务器
    public function valid()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr, SORT_STRING);
        $tmpStr = implode($tmpArr);
        $tmpStr = sha1($tmpStr);
        if ($tmpStr == $signature) {
            echo $_GET["echostr"];
            exit;
        }
    }
    // 接收和回复消息
    public function responseMsg()
    {
        // 获取POST数据 (XML格式)
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        if (!empty($postStr)) {
            // 解析XML
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $fromUsername = $postObj->FromUserName; // 发送方账号
            $toUsername = $postObj->ToUserName;   // 公众号
            $keyword = trim($postObj->Content);   // 用户发送的内容
            $time = time(); // 时间戳
            // 文本消息模板
            $textTpl = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[text]]></MsgType>
                        <Content><![CDATA[%s]]></Content>
                        <FuncFlag>0</FuncFlag>
                        </xml>";
            // 如果用户发送的是特定关键词,则回复相应内容
            if ($keyword == "你好") {
                $contentStr = "你好,欢迎关注!";
            } elseif ($keyword == "教程") {
                $contentStr = "这里是PHP微信开发教程。";
            } else {
                $contentStr = "您输入的是: " . $keyword;
            }
            // 格式化并发送回复
            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $contentStr);
            echo $resultStr;
        } else {
            echo "";
            exit;
        }
    }
}
?>

B. 接收与发送消息

公众号可以接收和发送多种类型的消息(文本、图片、语音、视频等),也可以主动向用户发送客服消息或模板消息。

微信PHP开发如何入门?-图3
(图片来源网络,侵删)
  • 接收消息:如上所示,服务器会收到POST请求,解析XML即可获取消息类型、内容、发送者等信息。

  • 发送消息

    • 被动回复:在 responseMsg 函数中直接回复,如上例。
    • 主动发送(客服消息):通过调用API,在用户48小时内互动后,主动发送消息。
  • 发送客服消息PHP示例

<?php
$appid = 'YOUR_APPID';
$appsecret = 'YOUR_APPSECRET';
// 1. 获取access_token
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$json = curl_exec($ch);
curl_close($ch);
$token_info = json_decode($json);
$access_token = $token_info->access_token;
// 2. 构造发送消息的数据
$touser = "OPENID_OF_THE_USER"; // 用户的OpenID
$msgtype = "text";
$content = "这是一条主动发送的客服消息。";
$post_data = json_encode([
    "touser" => $touser,
    "msgtype" => $msgtype,
    "text" => [
        "content" => $content
    ]
]);
// 3. 发送请求
$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={$access_token}";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>

C. 网页授权获取用户信息

当用户在浏览器中访问你的网页时,可以通过网页授权获取其基本信息(昵称、头像、OpenID等)。

  • 流程

    1. 用户访问你的网页URL。
    2. 你的服务器将用户重定向到微信授权页面。
    3. 用户同意授权后,微信重定向回你指定的回调URL,并携带 code
    4. 你的服务器用 code 换取 access_tokenopenid
    5. (可选)用 access_tokenopenid 获取用户详细信息。
  • PHP代码示例 (获取OpenID)

<?php
$appid = 'YOUR_APPID';
$redirect_uri = urlencode('YOUR_REDIRECT_URL'); // 回调地址,必须配置在公众号后台
$scope = 'snsapi_userinfo'; // snsapi_base (只获取openid) 或 snsapi_userinfo (获取信息并弹出授权页)
// 构造重定向URL
$auth_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$appid}&redirect_uri={$redirect_uri}&response_type=code&scope={$scope}&state=STATE#wechat_redirect";
// 重定向用户
header("Location: " . $auth_url);
exit;
?>

在回调页面 (YOUR_REDIRECT_URL) 中处理 code

<?php
$appid = 'YOUR_APPID';
$appsecret = 'YOUR_APPSECRET';
if (isset($_GET['code'])) {
    $code = $_GET['code'];
    $get_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appid}&secret={$appsecret}&code={$code}&grant_type=authorization_code";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $get_token_url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $json = curl_exec($ch);
    curl_close($ch);
    $token_info = json_decode($json);
    $openid = $token_info->openid;
    $access_token = $token_info->access_token;
    // 现在你有了openid,可以用来识别用户,或者获取用户信息
    echo "用户的OpenID是: " . $openid;
    // 如果scope是snsapi_userinfo,可以进一步获取用户信息
    if (isset($token_info->scope) && $token_info->scope == 'snsapi_userinfo') {
        $get_user_info_url = "https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$openid}";
        // ... 使用curl获取用户信息 ...
    }
}
?>

第二部分:微信小程序PHP开发

小程序后端与公众号共享服务器,主要区别在于API调用方式和前端交互。

准备工作

  1. 注册小程序账号:在 微信公众平台 注册,获取 AppID
  2. 安装开发者工具:下载并安装微信开发者工具。
  3. 创建项目:在开发者工具中创建新项目,选择后端服务(PHP)。

核心概念与流程

小程序后端的核心任务是:

  • 提供API接口:供小程序前端调用(如登录、获取数据)。
  • 处理用户登录:通过 code 获取 session_keyopenid,并自定义登录态(如生成3rd_session)。

A. 小程序登录流程

这是小程序后端开发的基石。

  • 流程

    1. 小程序前端调用 wx.login() 获取临时 code
    2. code 发送到你的PHP后端。
    3. PHP后端用 code + AppID + AppSecret 向微信服务器请求,换取 session_keyopenid
    4. PHP后端生成一个自定义登录态(如 3rd_session,可以是随机字符串),并存储 openidsession_key 的映射关系(如Redis或数据库)。
    5. 3rd_session 返回给小程序前端。
    6. 后续请求,前端携带 3rd_session,后端验证其有效性,即可识别用户。
  • PHP登录接口示例 (login.php)

<?php
header('Content-Type:application/json; charset=utf-8');
$appid = 'YOUR_MINIPROGRAM_APPID';
$appsecret = 'YOUR_MINIPROGRAM_APPSECRET';
// 1. 接收前端传来的code
$post_data = file_get_contents('php://input');
$data = json_decode($post_data);
$code = $data->code;
if (!$code) {
    echo json_encode(['errcode' => 40013, 'errmsg' => 'code missing']);
    exit;
}
// 2. 用code换取openid和session_key
$url = "https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$appsecret}&js_code={$code}&grant_type=authorization_code";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$json = curl_exec($ch);
curl_close($ch);
$session_info = json_decode($json);
if (isset($session_info->errcode)) {
    // 微信返回了错误
    echo json_encode(['errcode' => $session_info->errcode, 'errmsg' => $session_info->errmsg]);
    exit;
}
$openid = $session_info->openid;
$session_key = $session_info->session_key;
// 3. 生成自定义登录态 (3rd_session)
$third_session = bin2hex(random_bytes(16)); // 生成一个随机字符串
// 4. 存储session_key和openid的映射关系 (这里用伪代码表示,实际应存入Redis或数据库)
//  redis.set("session:" . $third_session, json_encode(['openid' => $openid, 'session_key' => $session_key]), 7200);
// 5. 返回3rd_session给前端
echo json_encode([
    'session' => $third_session,
    'openid' => $openid // 可选,前端也可以不用直接拿
]);
?>

B. 数据解密

小程序用户信息(如昵称、头像)是加密的,需要在后端解密。

  • 流程

    1. 小程序前端调用 wx.getUserProfile 获取加密数据 encryptedDataiv
    2. encryptedData, iv, session_key (通过3rd_session从你的存储中获取) 发送到PHP后端。
    • 注意session_key 是解密的关键,必须在后端处理,不能传给前端。
    1. PHP后端使用 AES-128-CBC 算法解密数据。
  • PHP解密示例 (decrypt.php)

你需要先安装 mcrypt 扩展(PHP 7.1+ 已移除,建议使用 openssl)。

<?php
// 接收前端数据
$post_data = file_get_contents('php://input');
$data = json_decode($post_data);
$encryptedData = $data->encryptedData;
$iv = $data->iv;
$third_session = $data->third_session;
// 1. 从你的存储中 (如Redis) 根据$third_session获取session_key
// $session_key_json = redis.get("session:" . $third_session);
// $session_key_info = json_decode($session_key_json);
// $session_key = $session_key_info->session_key;
// 为了演示,我们假设已经获取到了
$session_key = "YOUR_SESSION_KEY_FROM_STORAGE"; // 替换为实际从存储中获取的值
// 2. 解密数据
function decryptData($session_key, $iv, $encryptedData) {
    $aesKey = base64_decode($session_key);
    $aesIV = base64_decode($iv);
    $aesCipher = base64_decode($encryptedData);
    // 使用openssl解密
    $result = openssl_decrypt($aesCipher, "AES-128-CBC", $aesKey, OPENSSL_RAW_DATA, $aesIV);
    $dataObj = json_decode($result);
    return $dataObj;
}
$decryptedData = decryptData($session_key, $iv, $encryptedData);
if ($decryptedData) {
    echo json_encode(['errcode' => 0, 'user_info' => $decryptedData]);
} else {
    echo json_encode(['errcode' => -1, 'errmsg' => '解密失败']);
}
?>

第三部分:企业微信PHP开发

企业微信更侧重于企业内部管理和外部客户联系,其开发模式与公众号类似,但API和权限体系不同。

准备工作

  1. 注册企业:拥有一个企业实体。
  2. 注册企业微信:在 企业微信官网 注册,创建企业。
  3. 创建应用:在“应用管理”中创建一个自建应用,获取 AgentIdSecret
  4. 获取企业ID:在“我的企业” -> “企业信息”中找到 CorpID

核心概念与流程

企业微信开发的核心是调用其API来管理通讯录、发送消息等。

A. 获取Access Token

与公众号类似,企业微信的API调用也需要 access_token,但其获取方式和参数不同。

  • 获取地址https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=CorpID&corpsecret=Secret

  • PHP代码示例

<?php
$corpid = 'YOUR_CORP_ID';
$corpsecret = 'YOUR_APP_SECRET';
$url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={$corpid}&corpsecret={$corpsecret}";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$json = curl_exec($ch);
curl_close($ch);
$result = json_decode($json);
if ($result->errcode == 0) {
    $access_token = $result->access_token;
    // 使用这个access_token去调用其他API
    echo "Access Token: " . $access_token;
} else {
    echo "Error: " . $result->errmsg;
}
?>

B. 发送应用消息

企业微信可以给成员或部门发送应用消息(文本、图片、文件等)。

  • API地址https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN

  • 请求方式:POST (JSON格式)

  • PHP发送文本消息示例

<?php
$access_token = "YOUR_ACCESS_TOKEN"; // 通过上面的方法获取
$touser = "user1|user2"; // 接收者用户ID,多个用|分隔
$toparty = "party1|party2"; // 接收者部门ID,多个用|分隔
$totag = "tag1|tag2"; // 接收者标签ID
$msgtype = "text";
$content = "这是一条来自企业微信的自建应用消息。";
$post_data = json_encode([
    "touser" => $touser,
    "toparty" => $toparty,
    "totag" => $totag,
    "msgtype" => $msgtype,
    "agentid" => YOUR_AGENT_ID, // 你的应用AgentId
    "text" => [
        "content" => $content
    ],
    "safe" => 0 // 表示是否是保密消息,0表示否,1表示是
], JSON_UNESCAPED_UNICODE);
$url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={$access_token}";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>

总结与最佳实践

  1. 封装SDK:不要每次都写重复的 curl 代码,将获取 access_token、发送消息、网页授权等常用操作封装成自己的PHP SDK或类库,提高复用性。
  2. Token缓存access_tokenjscode2sessionsession_key 都有有效期,务必将其缓存起来(如使用Redis或文件缓存),避免频繁向微信服务器请求。
  3. 错误处理:调用微信API时,务必检查返回的 errcode,做好错误处理和日志记录。
  4. HTTPS:所有与微信交互的URL都必须是 https 且域名已备案。
  5. 官方文档是圣经:微信的接口和规则更新频繁,遇到任何问题,第一时间查阅最新的官方开发者文档。

这份教程为你提供了一个全面的起点,你需要根据具体的业务需求,深入学习更高级的接口和功能,不断实践和完善你的应用,祝你开发顺利!

分享:
扫描分享到社交APP
上一篇
下一篇