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
相关产品推荐
相关产品推荐

