前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >php微信小程序订阅消息发送功能对接实践

php微信小程序订阅消息发送功能对接实践

原创
作者头像
高久峰
发布2025-01-20 10:00:48
发布2025-01-20 10:00:48
14000
代码可运行
举报
运行总次数:0
代码可运行

在开发微信小程序的过程中,订阅消息功能是与用户保持互动的重要方式之一。本文将详细介绍如何使用 PHP 语言对接微信小程序的订阅消息发送功能,帮助开发者快速理解和实现这一功能。

一、功能概述

微信小程序的订阅消息功能允许开发者在用户主动订阅后,向用户发送模板消息。这可以用于通知用户重要的信息,如订单状态、活动提醒等。订阅消息的发送需要满足以下条件:

  1. 用户必须主动订阅消息模板。
  2. 开发者需要正确配置小程序的 appidsecret
  3. 发送消息时需要使用微信提供的 API 接口。

二、开发环境与工具

  • 语言:PHP
  • 框架:无特定框架要求,但建议使用面向对象的方式封装代码。
  • 依赖cURL 扩展用于 HTTP 请求。

三、实现步骤

1. 获取 Access Token

微信小程序的 API 接口需要使用 access_token 进行身份验证。access_token 是通过小程序的 appidsecret 获取的,有效期为 2 小时。

php复制

代码语言:javascript
代码运行次数:0
复制
class WxHelper
{
    public static function getAccessToken($appId, $appSecret)
    {
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appId}&secret={$appSecret}";
        $response = self::curl($url);
        $responseJson = json_decode($response, true);
        if (isset($responseJson['errcode'])) {
            throw new Exception("获取 Access Token 失败:{$responseJson['errmsg']}");
        }
        return $responseJson['access_token'];
    }

    public static function curl($url, $postData = null)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        if ($postData !== null) {
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
        }
        $response = curl_exec($ch);
        curl_close($ch);
        return $response;
    }
}
2. 封装订阅消息发送功能

订阅消息的发送需要调用微信的 API 接口。我们将这一功能封装到 WxService 类中。

php复制

代码语言:javascript
代码运行次数:0
复制
class WxService
{
    private $appId;
    private $appSecret;

    public function setAppId($appId)
    {
        $this->appId = $appId;
    }

    public function setAppSecret($appSecret)
    {
        $this->appSecret = $appSecret;
    }

    public function getAccessToken()
    {
        return WxHelper::getAccessToken($this->appId, $this->appSecret);
    }

    /**
     * 发送订阅消息
     * @param array $message
     * @throws BusinessException
     */
    public function sendSubscribeMessage(array $message)
    {
        WxHelper::sendSubscribeMessage($this->getAccessToken(), $message);
    }
}
3. 实现订阅消息发送逻辑

WxHelper 类中,我们实现具体的发送逻辑。

php复制

代码语言:javascript
代码运行次数:0
复制
class WxHelper
{
    public static function sendSubscribeMessage(string $access_token, array $message)
    {
        // 接口地址
        $api = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token={$access_token}";

        // 请求接口
        $response = self::curl($api, json_encode($message, JSON_UNESCAPED_UNICODE));

        // 检查返回内容
        if (!$response) {
            throw new BusinessException("订阅消息服务接口未响应内容");
        }

        // 检查响应内容
        $responseJson = json_decode($response, true);
        if (isset($responseJson['errcode']) && $responseJson['errcode'] !== 0) {
            $errStr = "错误码:{$responseJson['errcode']},错误信息:{$responseJson['errmsg']}";
            throw new BusinessException("订阅消息服务异常, $errStr");
        }
    }
}
4. 调用发送功能

在业务逻辑中,我们调用封装好的发送功能。例如,发送一条考试报名提醒消息:

php复制

代码语言:javascript
代码运行次数:0
复制
$data = [
    'template_id' => 'Pn3wM91L28BIb5_R6dkt1MdBeIcdSVo7NZVDxZiwQjE',
    'touser' => 'oPgSR62Qp7G1H8fXdBMb9mCZaxuo',
    'data' => [
        'thing1' => ['value' => '自学考试'],
        'time3' => ['value' => '2025年1月10日'],
        'thing4' => ['value' => '报考今日开始,请记得及时报名'],
    ],
];

$s = new WxService();
$s->setAppId('YOUR_APP_ID');
$s->setAppSecret('YOUR_APP_SECRET');
$s->sendSubscribeMessage($data);

四、常见问题及解决方法

  1. 获取 Access Token 失败
    • 检查 appidsecret 是否正确。
    • 确保网络请求正常,无防火墙或代理限制。
  2. 发送消息失败
    • 检查用户是否已订阅模板消息。
    • 确保模板消息的格式符合要求。
    • 检查微信返回的错误码和错误信息,根据提示解决问题。
  3. 接口响应超时
    • 增加 cURL 的超时时间。
    • 检查微信服务器状态是否正常。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、功能概述
  • 二、开发环境与工具
  • 三、实现步骤
    • 1. 获取 Access Token
    • 2. 封装订阅消息发送功能
    • 3. 实现订阅消息发送逻辑
    • 4. 调用发送功能
  • 四、常见问题及解决方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档