新手求助:如何在PHP中通过SOAP请求获取Token
PHP中通过SOAP请求获取Token的新手指南
前提:开启PHP SOAP扩展
首先确认你的PHP环境已开启SOAP扩展:
- 执行
<?php phpinfo(); ?>,搜索"soap"确认扩展启用 - 若未开启,在
php.ini中找到extension=soap,去掉前面的分号;后重启Web服务器
方法一:使用PHP内置SoapClient(推荐)
SoapClient会自动解析WSDL生成调用方法,是最简便的实现方式:
<?php // 目标WSDL地址 $wsdlUrl = 'https://hma.ecvi.ru/service/webform.wsdl.php'; try { // 实例化SoapClient,trace参数开启调试日志 $client = new SoapClient($wsdlUrl, ['trace' => 1, 'encoding' => 'UTF-8']); // 准备请求参数,对应示例中的WebChanelID和AccessCode $params = [ 'WebChanelID' => 8, 'AccessCode' => '444555' ]; // 调用GetToken方法 $response = $client->GetToken($params); // 输出响应结果(需根据实际返回结构调整,比如$response->GetTokenResult) var_dump($response); // 调试用:查看发送的SOAP请求 // echo "请求XML: " . $client->__getLastRequest(); // 调试用:查看收到的SOAP响应 // echo "响应XML: " . $client->__getLastResponse(); } catch (SoapFault $e) { echo "SOAP请求错误: " . $e->getMessage(); } catch (Exception $e) { echo "请求异常: " . $e->getMessage(); } ?>
注意事项:
trace => 1参数可让你查看实际的XML请求/响应,方便排查问题- 响应结构需根据服务返回调整,比如若返回字段为
GetTokenResult,则用$response->GetTokenResult获取Token
方法二:手动构造SOAP请求(cURL实现)
如果SoapClient无法正常解析WSDL,可手动构造XML请求,通过cURL发送:
<?php // 构造符合要求的SOAP请求XML $soapXml = '<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/"> <soap:Header/> <soap:Body> <tem:GetToken> <tem:WebChanelID>8</tem:WebChanelID> <tem:AccessCode>444555</tem:AccessCode> </tem:GetToken> </soap:Body> </soap:Envelope>'; // SOAP服务地址 $soapUrl = 'https://hma.ecvi.ru/service/webform.wsdl.php'; // 初始化cURL $ch = curl_init($soapUrl); // 设置cURL请求参数 curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $soapXml); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/soap+xml; charset=utf-8', 'Content-Length: ' . strlen($soapXml) ]); // 发送请求并获取响应 $response = curl_exec($ch); // 检查cURL错误 if (curl_errno($ch)) { echo "cURL错误: " . curl_error($ch); } else { // 输出响应内容 var_dump($response); // 可通过SimpleXML解析响应提取Token,示例路径需根据实际调整 // $xml = simplexml_load_string($response); // $token = $xml->children('soap', true)->Body->children('tem', true)->GetTokenResponse->GetTokenResult; } // 关闭cURL连接 curl_close($ch); ?>
注意事项:
- 确保XML中的命名空间、参数值与示例完全匹配
- 用
SimpleXMLElement或DOMDocument解析响应XML时,需根据实际返回节点路径调整提取逻辑
内容的提问来源于stack exchange,提问作者Sergei
相关产品推荐
相关产品推荐

