You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用SmsGateway.me对接网站与手机发短信,PHP代码报错

修复SmsGateway.me官方PHP代码的常见问题

我懂你现在的糟心处境——好不容易把SmsGateway.me的APK配置妥当,结果官网提供的PHP代码一堆问题没法用,属实耽误事。从你贴的代码片段来看,首先就有代码截断不完整的问题(createContact方法里的makeRequest调用没写完),而且原代码大概率还缺了核心的请求实现、错误处理这些关键模块。

原代码的常见问题

  • 缺少和API交互的核心makeRequest方法实现
  • 代码片段语法不完整,无法直接运行
  • 没有错误处理逻辑,出问题了根本找不到原因
  • 静态变量$baseUrl的调用方式不符合PHP规范

修正后的完整可用代码

<?php
class SmsGateway {
    static $baseUrl = "https://smsgateway.me";

    private $email;
    private $password;

    function __construct($email, $password) {
        $this->email = $email;
        $this->password = $password;
    }

    // 核心请求方法,处理所有API调用
    private function makeRequest($endpoint, $method = 'GET', $data = []) {
        $url = self::$baseUrl . $endpoint;
        $ch = curl_init();

        // 设置请求头,指定JSON格式
        $headers = [
            'Content-Type: application/json'
        ];

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 生产环境建议改成true,保障安全

        // 处理POST/PUT类型的请求
        if ($method !== 'GET') {
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
            // 合并身份验证参数和业务数据
            $data = array_merge($data, [
                'email' => $this->email,
                'password' => $this->password
            ]);
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
        } else {
            // GET请求把身份参数拼到URL里
            $authParams = [
                'email' => $this->email,
                'password' => $this->password
            ];
            $url .= '?' . http_build_query($authParams);
            curl_setopt($ch, CURLOPT_URL, $url);
        }

        $response = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $curlError = curl_error($ch);
        curl_close($ch);

        // 捕获CURL请求错误
        if ($curlError) {
            throw new Exception("请求出错: " . $curlError);
        }

        $result = json_decode($response, true);
        // 捕获API返回的错误状态
        if ($httpCode >= 400) {
            $errorMsg = $result['message'] ?? '未知错误';
            throw new Exception("API请求失败,状态码: $httpCode,错误信息: $errorMsg");
        }

        return $result;
    }

    // 完整实现创建联系人方法
    function createContact($name, $number) {
        $data = [
            'name' => $name,
            'number' => $number
        ];
        return $this->makeRequest('/api/v3/contacts/create', 'POST', $data);
    }

    // 额外添加发送短信的核心方法,直接能用
    function sendMessage($number, $message, $deviceId) {
        $data = [
            'number' => $number,
            'message' => $message,
            'device_id' => $deviceId
        ];
        return $this->makeRequest('/api/v3/messages/send', 'POST', $data);
    }
}

// 使用示例,替换成你自己的信息
try {
    $smsGateway = new SmsGateway('your-email@example.com', 'your-password');
    // 创建联系人
    $contactResult = $smsGateway->createContact('测试用户', '13800138000');
    print_r($contactResult);

    // 发送短信,deviceId要换成你在SmsGateway.me后台绑定的设备ID
    $messageResult = $smsGateway->sendMessage('13800138000', '这是一条测试短信', 1);
    print_r($messageResult);
} catch (Exception $e) {
    echo "错误提示: " . $e->getMessage();
}
?>

关键修正说明

  1. 补全核心请求方法:新增的makeRequest方法处理了所有和API的交互逻辑,包括身份验证、请求类型适配、数据编码和错误捕获。
  2. 修正静态属性调用:把$baseUrl的访问改成self::$baseUrl,符合PHP静态属性的使用规范。
  3. 添加完善的错误处理:通过try-catch捕获CURL层面和API层面的错误,方便你快速排查问题。
  4. 完整实现业务方法:把截断的createContact方法补全,还额外加了sendMessage这个最常用的功能方法,省得你自己再去写。

使用注意事项

  • 生产环境请把CURLOPT_SSL_VERIFYPEER设置为true,避免安全风险。
  • 一定要把示例中的邮箱、密码、设备ID换成你自己的真实信息。
  • 如果还是有问题,可以对照SmsGateway.me的官方API文档核对请求端点和参数是否正确。

内容的提问来源于stack exchange,提问作者Olana Kenea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:13:51