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

PHP调用Rightel短信WebService报SoapFault:Wrong Version问题排查

解决Rightel SendSms WebService返回"Wrong Version"的SoapFault问题

从你提供的信息来看,虽然你已经尝试切换SOAP版本,但问题大概率出在SOAP请求头的冗余字段上,而非协议版本本身。

先看你捕获错误的代码逻辑:

try {
    self::setSoapHeaderSendSms(new RequestSOAPHeader(Config::get('USER'), Config::get('PASS'), Config::get('SERVICE_ID')));
    return $this->setResult(self::getSoapClient()->SendSms($_rightelSmsStructSendSms));
} catch (SoapFault $soapFault) {
    echo $soapFault->getCode() . ": " . $soapFault->getMessage();
}

再看你拿到的请求XML,Header部分明显包含了几个多余的空字段:

<SOAP-ENV:Header>
<ns1:Header>
<username>myuser</username>
<password>mypass</password>
<serviceid>myservice</serviceid>
<result/>
<lastError/>
<internArrayToIterate/>
<internArrayToIterateIsArray/>
<internArrayToIterateOffset/>
</ns1:Header>
</SOAP-ENV:Header>

Rightel的WebService很可能对请求头结构有严格要求,只允许包含username、password、serviceid这三个必填字段。而你通过WSDL生成的RequestSOAPHeader类自动带上了这些额外空字段,导致接口判定请求不符合规范,返回了模糊的"Wrong Version"错误提示。

解决步骤:

  • 打开生成的RequestSOAPHeader类文件,删除多余的属性(result、lastError、internArrayToIterate等)及其对应的getter/setter方法。
  • 确保类的构造函数只初始化username、password、serviceid三个属性,生成请求头时仅序列化这三个字段。
  • 重新发起请求,此时SOAP头应只包含三个必填字段,符合接口要求。

如果有Rightel官方的接口请求示例,可以对比下Header结构,确保完全一致——很多WebService对请求格式的严谨性要求极高,哪怕多一个空标签都会被视为无效请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 03:42:38