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

如何在Laravel中使用SoapSMS PHP?现有代码无法运行该如何修改?

在Laravel中调用IPPanel短信服务的问题及解决方案

我有一段使用SoapClient调用IPPanel短信服务的PHP代码,单独运行可正常获取结果,但在Laravel框架中无法运行。请问是否需要修改代码?具体该如何修改?

原代码如下:

use SoapClient;
ini_set("soap.wsdl_cache_enabled", "0");

try {
    $client = new \SoapClient("http://ippanel.com/class/sms/wsdlservice/server.php?wsdl");
    $user = "xxxxxxx";
    $pass = "xxxxxx";
    $fromNum = "3000505";
    $toNum = "xxxxxxx";
    $messageContent = 'this is my test';
    $op = "send";
    //If you want to send in the future  ==> $time = '2016-07-30' //$time = '2022-07-31 6:02:00'
//  $time = '2022-07-31 6:01:00';
    $client->SendSMS($fromNum,$toNum,$messageContent,$user,$pass,$op);
    //echo $status;
} catch (SoapFault $ex) {
    echo $ex->faultstring;
}

需要修改的点及具体方案

  1. 错误处理方式调整
    Laravel有自身的响应和日志体系,直接用echo输出错误会打乱框架响应结构,建议改成:
  • 引入Illuminate\Support\Facades\Log记录错误日志
  • 用response()->json()返回标准化的错误响应
  1. 敏感信息的环境变量管理
    不要在代码中硬编码用户名、密码等敏感信息,将配置项放到项目根目录的.env文件:
IPPANEL_USER=你的用户名
IPPANEL_PASS=你的密码
IPPANEL_FROM=3000505

然后在代码中通过env()函数读取,方便后续配置切换。

  1. 命名空间优化
    如果已经在代码顶部use SoapClient;,实例化时无需加\前缀,直接new SoapClient(...)即可,更符合Laravel编码习惯。

  2. 可选:封装成服务类
    为了代码复用和可维护性,建议把短信发送逻辑封装成独立服务类,比如创建app/Services/IPPanelSmsService.php:

<?php

namespace App\Services;

use SoapClient;
use Illuminate\Support\Facades\Log;

class IPPanelSmsService
{
    public function send(string $toNum, string $message): bool|string
    {
        ini_set("soap.wsdl_cache_enabled", "0");

        try {
            $client = new SoapClient("http://ippanel.com/class/sms/wsdlservice/server.php?wsdl");
            $response = $client->SendSMS(
                env('IPPANEL_FROM'),
                $toNum,
                $message,
                env('IPPANEL_USER'),
                env('IPPANEL_PASS'),
                "send"
            );
            return $response;
        } catch (\SoapFault $ex) {
            Log::error('IPPanel短信发送失败: ' . $ex->faultstring);
            return $ex->faultstring;
        }
    }
}

在控制器中调用示例:

<?php

namespace App\Http\Controllers;

use App\Services\IPPanelSmsService;

class SmsController extends Controller
{
    public function send(IPPanelSmsService $smsService)
    {
        $result = $smsService->send("目标号码", "测试短信内容");
        
        if (is_string($result) && strpos($result, 'error') !== false) {
            return response()->json(['error' => $result], 500);
        }
        
        return response()->json(['status' => 'success', 'data' => $result]);
    }
}

额外注意事项

  • 确认Soap扩展已启用:检查服务器php.ini文件,确保extension=soap未被注释,重启PHP服务生效。
  • WSDL缓存问题:修改WSDL地址或内容后,除保留ini_set("soap.wsdl_cache_enabled", "0");,也可手动清除Laravel缓存(执行php artisan cache:clear)。
  • 协议兼容性:原WSDL使用HTTP协议,建议确认IPPanel是否支持HTTPS,若支持则将地址改为https://ippanel.com/class/sms/wsdlservice/server.php?wsdl,避免混合内容安全问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:57:24