uc_cybersource.soap.inc 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. <?php
  2. /**
  3. * @file
  4. * Defines a class used for communicating with CyberSource via SOAP.
  5. *
  6. * Provided by Acquia, Commercially supported Drupal - http://acquia.com
  7. */
  8. class CyberSourceSoapClient extends SoapClient {
  9. function __construct($wsdl, $options = NULL) {
  10. parent::__construct($wsdl, $options);
  11. }
  12. /**
  13. * Inserts the UsernameToken information in the outgoing request.
  14. */
  15. function __doRequest($request, $location, $action, $version) {
  16. $login = _uc_cybersource_soap_login_data();
  17. $soapHeader = '<SOAP-ENV:Header xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><wsse:Security SOAP-ENV:mustUnderstand="1"><wsse:UsernameToken><wsse:Username>' . $login['merchant_id'] . '</wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">' . $login['transaction_key'] . '</wsse:Password></wsse:UsernameToken></wsse:Security></SOAP-ENV:Header>';
  18. $requestDOM = new DOMDocument('1.0');
  19. $soapHeaderDOM = new DOMDocument('1.0');
  20. try {
  21. $requestDOM->loadXML($request);
  22. $soapHeaderDOM->loadXML($soapHeader);
  23. $node = $requestDOM->importNode($soapHeaderDOM->firstChild, TRUE);
  24. $requestDOM->firstChild->insertBefore($node, $requestDOM->firstChild->firstChild);
  25. $request = $requestDOM->saveXML();
  26. }
  27. catch (DOMException $e) {
  28. die('Error adding UsernameToken: ' . $e->code);
  29. }
  30. return parent::__doRequest($request, $location, $action, $version);
  31. }
  32. }