У меня есть более простое решение, чем расширение существующей библиотеки soapclient.
Шаг 1: создание двух классов для создания структуры для заголовков WSSE
class clsWSSEAuth {
private $Username;
private $Password;
function __construct($username, $password) {
$this->Username=$username;
$this->Password=$password;
}
}
class clsWSSEToken {
private $UsernameToken;
function __construct ($innerVal){
$this->UsernameToken = $innerVal;
}
}
Шаг 2. Создание переменных мыла для имени пользователя и пароля
$username = 1111;
$password = 1111;
//Check with your provider which security name-space they are using.
$strWSSENS = "http://schemas.xmlsoap.org/ws/2002/07/secext";
$objSoapVarUser = new SoapVar($username, XSD_STRING, NULL, $strWSSENS, NULL, $strWSSENS);
$objSoapVarPass = new SoapVar($password, XSD_STRING, NULL, $strWSSENS, NULL, $strWSSENS);
Шаг 3: Создать объект для класса аутентификации и передать в мыло var
$objWSSEAuth = new clsWSSEAuth($objSoapVarUser, $objSoapVarPass);
Шаг 4: Создать SoapVar из объекта класса Auth
$objSoapVarWSSEAuth = new SoapVar($objWSSEAuth, SOAP_ENC_OBJECT, NULL, $strWSSENS, 'UsernameToken', $strWSSENS);
Шаг 5: Создать объект для класса токенов
$objWSSEToken = new clsWSSEToken($objSoapVarWSSEAuth);
Шаг 6: Создать SoapVar из объекта класса Token
$objSoapVarWSSEToken = new SoapVar($objWSSEToken, SOAP_ENC_OBJECT, NULL, $strWSSENS, 'UsernameToken', $strWSSENS);
Шаг 7. Создание SoapVar для узла «Безопасность»
$objSoapVarHeaderVal=new SoapVar($objSoapVarWSSEToken, SOAP_ENC_OBJECT, NULL, $strWSSENS, 'Security', $strWSSENS);
Шаг 8: Создать объект заголовка из мыла безопасности
$objSoapVarWSSEHeader = new SoapHeader($strWSSENS, 'Security', $objSoapVarHeaderVal,true, 'http://abce.com');
//Third parameter here makes 'mustUnderstand=1
//Forth parameter generates 'actor="http://abce.com"'
Шаг 9: Создать объект Soap Client
$objClient = new SoapClient($WSDL, $arrOptions);
Step10: Установить заголовки для объекта мыльного клиента
$objClient->__setSoapHeaders(array($objSoapVarWSSEHeader));
Шаг 11: Последний вызов метода
$objResponse = $objClient->__soapCall($strMethod, $requestPayloadString);