__setSoapHeaders устанавливает заголовки soap запроса, а не http. Они размещаются в элементе Header. По вашему примеру кода получится что-то типа такого:
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="yourns"
xmlns:ns2="http://soapinterop.org/echoheader/">
<SOAP-ENV:Header>
<ns2:token>token</ns2:token>
<ns2:user-token>user_id</ns2:user-token>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<!-- тело запроса -->
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Для добавления именно http заголовков нужно создать stream context:
$aOptions['stream_context'] = stream_context_create([
'http' => [
'header' => "token: abc\r\nuser-token: 123"
]
]);
$oSoapClient = new SoapClient( $url, $aOptions );
$result = $oSoapClient->__doRequest( $sXml, $url, null, SOAP_1_1 );