Subversion-Projekte lars-tiefland.php_share

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
<?php
2
/**
3
 * File containing the API calling code. Partially generated from the
4
 * WSDL - CallerServices.php.in contains the base file with a
5
 * placeholder for generated functions and the WSDL version.
6
 *
7
 * @package PayPal
8
 */
9
 
10
/**
11
 * Load files we depend on.
12
 */
13
require_once 'PayPal.php';
14
require_once 'PayPal/SOAP/Client.php';
15
require_once 'PayPal/Type/XSDSimpleType.php';
16
require_once 'Log.php';
17
 
18
/**
19
 * The WSDL version the SDK is built against.
20
 */
21
define('PAYPAL_WSDL_VERSION', 53);
22
 
23
/**
24
 * The WSDL version the SDK is built against.
25
 */
26
define('PAYPAL_WSDL_METHODS', 'a:40:{s:17:"RefundTransaction";a:2:{s:5:"param";s:28:"RefundTransactionRequestType";s:6:"result";s:29:"RefundTransactionResponseType";}s:21:"GetTransactionDetails";a:2:{s:5:"param";s:32:"GetTransactionDetailsRequestType";s:6:"result";s:33:"GetTransactionDetailsResponseType";}s:8:"BillUser";a:2:{s:5:"param";s:19:"BillUserRequestType";s:6:"result";s:20:"BillUserResponseType";}s:17:"TransactionSearch";a:2:{s:5:"param";s:28:"TransactionSearchRequestType";s:6:"result";s:29:"TransactionSearchResponseType";}s:7:"MassPay";a:2:{s:5:"param";s:18:"MassPayRequestType";s:6:"result";s:19:"MassPayResponseType";}s:19:"BillAgreementUpdate";a:2:{s:5:"param";s:19:"BAUpdateRequestType";s:6:"result";s:20:"BAUpdateResponseType";}s:13:"AddressVerify";a:2:{s:5:"param";s:24:"AddressVerifyRequestType";s:6:"result";s:25:"AddressVerifyResponseType";}s:13:"EnterBoarding";a:2:{s:5:"param";s:24:"EnterBoardingRequestType";s:6:"result";s:25:"EnterBoardingResponseType";}s:18:"GetBoardingDetails";a:2:{s:5:"param";s:29:"GetBoardingDetailsRequestType";s:6:"result";s:30:"GetBoardingDetailsResponseType";}s:19:"CreateMobilePayment";a:2:{s:5:"param";s:30:"CreateMobilePaymentRequestType";s:6:"result";s:31:"CreateMobilePaymentResponseType";}s:15:"GetMobileStatus";a:2:{s:5:"param";s:26:"GetMobileStatusRequestType";s:6:"result";s:27:"GetMobileStatusResponseType";}s:17:"SetMobileCheckout";a:2:{s:5:"param";s:28:"SetMobileCheckoutRequestType";s:6:"result";s:29:"SetMobileCheckoutResponseType";}s:23:"DoMobileCheckoutPayment";a:2:{s:5:"param";s:34:"DoMobileCheckoutPaymentRequestType";s:6:"result";s:35:"DoMobileCheckoutPaymentResponseType";}s:10:"GetBalance";a:2:{s:5:"param";s:21:"GetBalanceRequestType";s:6:"result";s:22:"GetBalanceResponseType";}s:24:"DoExpressCheckoutPayment";a:2:{s:5:"param";s:35:"DoExpressCheckoutPaymentRequestType";s:6:"result";s:36:"DoExpressCheckoutPaymentResponseType";}s:28:"DoUATPExpressCheckoutPayment";a:2:{s:5:"param";s:39:"DoUATPExpressCheckoutPaymentRequestType";s:6:"result";s:40:"DoUATPExpressCheckoutPaymentResponseType";}s:16:"SetAuthFlowParam";a:2:{s:5:"param";s:27:"SetAuthFlowParamRequestType";s:6:"result";s:28:"SetAuthFlowParamResponseType";}s:14:"GetAuthDetails";a:2:{s:5:"param";s:25:"GetAuthDetailsRequestType";s:6:"result";s:26:"GetAuthDetailsResponseType";}s:20:"SetAccessPermissions";a:2:{s:5:"param";s:31:"SetAccessPermissionsRequestType";s:6:"result";s:32:"SetAccessPermissionsResponseType";}s:23:"UpdateAccessPermissions";a:2:{s:5:"param";s:34:"UpdateAccessPermissionsRequestType";s:6:"result";s:35:"UpdateAccessPermissionsResponseType";}s:26:"GetAccessPermissionDetails";a:2:{s:5:"param";s:37:"GetAccessPermissionDetailsRequestType";s:6:"result";s:38:"GetAccessPermissionDetailsResponseType";}s:18:"SetExpressCheckout";a:2:{s:5:"param";s:29:"SetExpressCheckoutRequestType";s:6:"result";s:30:"SetExpressCheckoutResponseType";}s:25:"GetExpressCheckoutDetails";a:2:{s:5:"param";s:36:"GetExpressCheckoutDetailsRequestType";s:6:"result";s:37:"GetExpressCheckoutDetailsResponseType";}s:15:"DoDirectPayment";a:2:{s:5:"param";s:26:"DoDirectPaymentRequestType";s:6:"result";s:27:"DoDirectPaymentResponseType";}s:30:"ManagePendingTransactionStatus";a:2:{s:5:"param";s:41:"ManagePendingTransactionStatusRequestType";s:6:"result";s:42:"ManagePendingTransactionStatusResponseType";}s:9:"DoCapture";a:2:{s:5:"param";s:20:"DoCaptureRequestType";s:6:"result";s:21:"DoCaptureResponseType";}s:17:"DoReauthorization";a:2:{s:5:"param";s:28:"DoReauthorizationRequestType";s:6:"result";s:29:"DoReauthorizationResponseType";}s:6:"DoVoid";a:2:{s:5:"param";s:17:"DoVoidRequestType";s:6:"result";s:18:"DoVoidResponseType";}s:15:"DoAuthorization";a:2:{s:5:"param";s:26:"DoAuthorizationRequestType";s:6:"result";s:27:"DoAuthorizationResponseType";}s:27:"SetCustomerBillingAgreement";a:2:{s:5:"param";s:38:"SetCustomerBillingAgreementRequestType";s:6:"result";s:39:"SetCustomerBillingAgreementResponseType";}s:34:"GetBillingAgreementCustomerDetails";a:2:{s:5:"param";s:45:"GetBillingAgreementCustomerDetailsRequestType";s:6:"result";s:46:"GetBillingAgreementCustomerDetailsResponseType";}s:22:"CreateBillingAgreement";a:2:{s:5:"param";s:33:"CreateBillingAgreementRequestType";s:6:"result";s:34:"CreateBillingAgreementResponseType";}s:22:"DoReferenceTransaction";a:2:{s:5:"param";s:33:"DoReferenceTransactionRequestType";s:6:"result";s:34:"DoReferenceTransactionResponseType";}s:21:"DoNonReferencedCredit";a:2:{s:5:"param";s:32:"DoNonReferencedCreditRequestType";s:6:"result";s:33:"DoNonReferencedCreditResponseType";}s:19:"DoUATPAuthorization";a:2:{s:5:"param";s:30:"DoUATPAuthorizationRequestType";s:6:"result";s:31:"DoUATPAuthorizationResponseType";}s:30:"CreateRecurringPaymentsProfile";a:2:{s:5:"param";s:41:"CreateRecurringPaymentsProfileRequestType";s:6:"result";s:42:"CreateRecurringPaymentsProfileResponseType";}s:34:"GetRecurringPaymentsProfileDetails";a:2:{s:5:"param";s:45:"GetRecurringPaymentsProfileDetailsRequestType";s:6:"result";s:46:"GetRecurringPaymentsProfileDetailsResponseType";}s:36:"ManageRecurringPaymentsProfileStatus";a:2:{s:5:"param";s:47:"ManageRecurringPaymentsProfileStatusRequestType";s:6:"result";s:48:"ManageRecurringPaymentsProfileStatusResponseType";}s:21:"BillOutstandingAmount";a:2:{s:5:"param";s:32:"BillOutstandingAmountRequestType";s:6:"result";s:33:"BillOutstandingAmountResponseType";}s:30:"UpdateRecurringPaymentsProfile";a:2:{s:5:"param";s:41:"UpdateRecurringPaymentsProfileRequestType";s:6:"result";s:42:"UpdateRecurringPaymentsProfileResponseType";}}');
27
 
28
/**
29
 * Interface class that wraps all WSDL ports into a unified API for
30
 * the user. Also handles PayPal-specific details like type handling,
31
 * error handling, etc.
32
 *
33
 * @package PayPal
34
 */
35
class CallerServices extends SOAP_Client
36
{
37
    /**
38
     * The profile to use in API calls.
39
     *
40
     * @access protected
41
     *
42
     * @var APIProfile $_profile
43
     */
44
    var $_profile;
45
 
46
    /**
47
     * The portType/environment -> endpoint map.
48
     *
49
     * @access protected
50
     *
51
     * @var array $_endpointMap
52
     */
53
    var $_endpointMap;
54
 
55
    /**
56
     * What level should we log at? Valid levels are:
57
     *   PEAR_LOG_ERR   - Log only severe errors.
58
     *   PEAR_LOG_INFO  - (default) Date/time of operation, operation name, elapsed time, success or failure indication.
59
     *   PEAR_LOG_DEBUG - Full text of SOAP requests and responses and other debugging messages.
60
     *
61
     * See the PayPal SDK User Guide for more details on these log
62
     * levels.
63
     *
64
     * @access protected
65
     *
66
     * @var integer $_logLevel
67
     */
68
    var $_logLevel = PEAR_LOG_INFO;
69
 
70
    /**
71
     * If we're logging, what directory should we create log files in?
72
     * Note that a log name coincides with a symlink, logging will
73
     * *not* be done to avoid security problems. File names are
74
     * <DateStamp>.PayPal.log.
75
     *
76
     * @access protected
77
     *
78
     * @var string $_logFile
79
     */
80
    var $_logDir = '/tmp';
81
 
82
    /**
83
     * The PEAR Log object we use for logging.
84
     *
85
     * @access protected
86
     *
87
     * @var Log $_logger
88
     */
89
    var $_logger;
90
 
91
    /**
92
     * Construct a new CallerServices object.
93
     *
94
     * @param APIProfile $profile  The profile with the username, password,
95
     *                             and any other information necessary to use
96
     *                             the SDK.
97
     */
98
    function CallerServices($profile)
99
    {
100
        // Initialize the SOAP Client.
101
        parent::SOAP_Client(null);
102
 
103
        // Store the API profile.
104
        $this->setAPIProfile($profile);
105
 
106
        // SSL CA certificate.
107
        $this->setOpt('curl', CURLOPT_CAINFO, dirname(__FILE__) . '/cert/api_cert_chain.crt');
108
 
109
        // SSL Client certificate.
110
        if (isset($profile->_certificateFile)) {
111
            // Set options from the profile.
112
            $this->setOpt('curl', CURLOPT_SSLCERT, $profile->getCertificateFile());
113
            if ($profile->getCertificatePassword()) {
114
                $this->setOpt('curl', CURLOPT_SSLCERTPASSWD, $profile->getCertificatePassword());
115
            }
116
        }
117
 
118
        // Tracing.
119
        $this->setOpt('trace', 1);
120
 
121
        // Load the endpoint map.
122
        include 'PayPal/wsdl/paypal-endpoints.php';
123
        $this->_endpointMap = $PayPalEndpoints;
124
 
125
        // Load SDK settings.
126
        if (@include 'PayPal/conf/paypal-sdk.php') {
127
            if (isset($__PP_CONFIG['log_level'])) {
128
                $this->_logLevel = $__PP_CONFIG['log_level'];
129
            }
130
            if (isset($__PP_CONFIG['log_dir'])) {
131
                $this->_logDir = $__PP_CONFIG['log_dir'];
132
            }
133
        }
134
    }
135
 
136
    /**
137
     * Sets the WSDL endpoint based on $portType and on the environment
138
     * set in the user's profile.
139
     *
140
     * @param string $portType  The portType the current operation is part of.
141
     * @param string $version   The WSDL version being used.
142
     *
143
     * @return boolean | PayPal_Error  An error if mapping can't be done, else true.
144
     */
145
    function setEndpoint($portType, $version)
146
    {
147
        $version = (float)$version;
148
 
149
        foreach ($this->_endpointMap as $range) {
150
            if ($version >= $range['min'] &&
151
                $version <= $range['max'] &&
152
                isset($range['environments'][$this->_profile->getEnvironment()][$portType])) {
153
                  // Check 3-token auth
154
                  $signature = $this->_profile->getSignature();
155
                  if(isset($signature)) {
156
                     // TBD:  Is this legit?
157
                     $three_token_port = $portType.'-threetoken';
158
                     $this->_endpoint = $range['environments'][$this->_profile->getEnvironment()][$three_token_port];
159
                  } else {
160
                     $this->_endpoint = $range['environments'][$this->_profile->getEnvironment()][$portType];
161
                  }
162
                  $this->getLogger();
163
                  $this->_logger->log('DEBUG setEndpoint: '.$this->_endpoint, PEAR_LOG_DEBUG);
164
                return true;
165
            }
166
        }
167
 
168
        return PayPal::raiseError("Invalid version/environment/portType combination.");
169
    }
170
 
171
    /**
172
     * Take the decoded array from SOAP_Client::__call() and turn it
173
     * into an object of the appropriate AbstractResponseType
174
     * subclass.
175
     *
176
     * @param array $values  The decoded SOAP response.
177
     * @param string $type   The type of the response object.
178
     *
179
     * @return AbstractResponseType  The response object.
180
     */
181
    function &getResponseObject($values, $type)
182
    {
183
        // Check for SOAP Faults.
184
        if (PayPal::isError($values)) {
185
            return $values;
186
        }
187
 
188
        // Check for already translated objects.
189
        if (is_object($values) && strtolower(get_class($values)) != 'xsdsimpletype') {
190
            return $values;
191
        }
192
 
193
        $object =& PayPal::getType($type);
194
        if (PayPal::isError($object)) {
195
            return $values;
196
        }
197
 
198
        foreach ($values as $name => $value) {
199
            if (method_exists($object, 'set' . $name)) {
200
                if (is_object($value)) {
201
                    if (strtolower(get_class($value)) == 'xsdsimpletype') {
202
                        $value =& $this->getResponseObject((array)$value, $object->_elements[$name]['type']);
203
                    }
204
                } elseif (is_array($value)) {
205
                    $values = $value;
206
                    $value = array();
207
                    foreach ($values as $v) {
208
                        $value[] =& $this->getResponseObject($v, $object->_elements[$name]['type']);
209
                    }
210
                }
211
                call_user_func(array(&$object, 'set' . $name), $value);
212
            }
213
        }
214
 
215
        return $object;
216
    }
217
 
218
    /**
219
     * Use a given profile.
220
     *
221
     * @param APIProfile $profile  The profile with the username, password,
222
     *                             and any other information necessary to use
223
     *                             the SDK.
224
     */
225
    function setAPIProfile(&$profile)
226
    {
227
        $this->_profile = &$profile;
228
    }
229
 
230
    /**
231
     * Get the current profile.
232
     *
233
     * @return APIProfile  The current profile.
234
     */
235
    function &getAPIProfile()
236
    {
237
        return $this->_profile;
238
    }
239
 
240
    /**
241
     * Gets the PEAR Log object to use.
242
     *
243
     * @return Log  A Log object, either provided by the user or
244
     *              created by this function.
245
     */
246
    function &getLogger()
247
    {
248
        if (!$this->_logger) {
249
            $file = $this->_logDir . '/' . date('Ymd') . '.PayPal.log';
250
            if (is_link($file) || (file_exists($file) && !is_writable($file))) {
251
                // Don't overwrite symlinks.
252
                return PayPal::raiseError('bad logfile');
253
            }
254
 
255
            $this->_logger = &Log::singleton('file', $file, $this->_profile->getAPIUsername(), array('append' => true));
256
        }
257
 
258
        return $this->_logger;
259
    }
260
 
261
    /**
262
     * Sets a custom PEAR Log object to use in logging.
263
     *
264
     * @param Log  A PEAR Log instance.
265
     */
266
    function setLogger(&$logger)
267
    {
268
        if (is_a($logger, 'Log')) {
269
            $this->_logger =& $logger;
270
        }
271
    }
272
 
273
    /**
274
     * Override SOAP_Client::call() to always add our security header
275
     * first.
276
     */
277
    function &call($method, &$params, $namespace = false, $soapAction = false)
278
    {
279
        // Create the security header.
280
        $this->addHeader($rc = new SOAP_Header('RequesterCredentials', 'struct', array(
281
            new SOAP_Value('{urn:ebay:apis:eBLBaseComponents}Credentials', 'struct',
282
                           array(new SOAP_Value('{urn:ebay:apis:eBLBaseComponents}Username', '', $this->_profile->getAPIUsername()),
283
                                 new SOAP_Value('{urn:ebay:apis:eBLBaseComponents}Password', '', $this->_profile->getAPIPassword()),
284
                                 new SOAP_Value('{urn:ebay:apis:eBLBaseComponents}Signature', '', $this->_profile->getSignature()),
285
                                 new SOAP_Value('{urn:ebay:apis:eBLBaseComponents}Subject', '', $this->_profile->getSubject())),
286
                           array('xmlns:ebl' => 'urn:ebay:apis:eBLBaseComponents'))),
287
            1, array('xmlns' => 'urn:ebay:api:PayPalAPI')));
288
 
289
        return parent::call($method, $params, $namespace, $soapAction);
290
    }
291
 
292
    /**
293
     * Override some of the default SOAP:: package _decode behavior to
294
     * handle simpleTypes and complexTypes with simpleContent.
295
     */
296
    function &_decode(&$soapval)
297
    {
298
        if (count($soapval->attributes)) {
299
            $attributes = $soapval->attributes;
300
        }
301
 
302
        $object =& PayPal::getType($soapval->type);
303
        if (PayPal::isError($object)) {
304
            return parent::_decode($soapval);
305
        }
306
 
307
        $this->_type_translation[$soapval->type] = $soapval->type;
308
 
309
        $result =& parent::_decode($soapval);
310
        if (!is_a($result, 'XSDType') && is_a($object, 'XSDSimpleType')) {
311
            $object->setval($result);
312
            if (isset($attributes)) {
313
                foreach ($attributes as $aname => $attribute) {
314
                    $object->setattr($aname, $attribute);
315
                }
316
            }
317
            $result =& $object;
318
        }
319
 
320
        return $result;
321
    }
322
 
323
    /**
324
     * Log the current transaction depending on the current log level.
325
     *
326
     * @access protected
327
     *
328
     * @param string $operation  The operation called.
329
     * @param integer $elapsed   Microseconds taken.
330
     * @param object $response   The response object.
331
     */
332
    function _logTransaction($operation, $elapsed, $response)
333
    {
334
        $logger =& $this->getLogger();
335
        if (PayPal::isError($logger)) {
336
            return $logger;
337
        }
338
 
339
        switch ($this->_logLevel) {
340
        case PEAR_LOG_DEBUG:
341
            $logger->log('Request XML: ' . $this->_sanitizeLog($this->__last_request), PEAR_LOG_DEBUG);
342
            $logger->log('Response XML: ' . $this->_sanitizeLog($this->__last_response), PEAR_LOG_DEBUG);
343
 
344
        case PEAR_LOG_INFO:
345
            $ack = is_object($response) && method_exists($response, 'getAck') ? ', Ack: ' . $response->getAck() : '';
346
            $logger->log($operation . ', Elapsed: ' . $elapsed . 'ms' . $ack, PEAR_LOG_INFO);
347
 
348
        case PEAR_LOG_ERR:
349
            if (PayPal::isError($response)) {
350
                $logger->log($response, PEAR_LOG_ERR);
351
            }
352
        }
353
    }
354
 
355
    /**
356
     * Strip sensitive information (API passwords and credit card
357
     * numbers) from raw XML requests/responses.
358
     *
359
     * @access protected
360
     *
361
     * @param string $xml  The XML to sanitize.
362
     *
363
     * @return string  The sanitized XML.
364
     */
365
    function _sanitizeLog($xml)
366
    {
367
        return preg_replace(array('/<(.*?Password.*?)>(.*?)<\/(.*?Password)>/i',
368
                                  '/<(.*CreditCardNumber.*)>(.*?)<\/(.*CreditCardNumber)>/i',
369
                                  '/<(.*Signature.*)>(.*?)<\/(.*Signature)>/i'),
370
                            '<\1>***</\3>',
371
                            $xml);
372
    }
373
 
374
    /**
375
     * Return the current time including microseconds.
376
     *
377
     * @access protected
378
     *
379
     * @return integer  Current time with microseconds.
380
     */
381
    function _getMicroseconds()
382
    {
383
        list($ms, $s) = explode(' ', microtime());
384
        return floor($ms * 1000) + 1000 * $s;
385
    }
386
 
387
    /**
388
     * Return the difference between now and $start in microseconds.
389
     *
390
     * @access protected
391
     *
392
     * @param integer $start  Start time including microseconds.
393
     *
394
     * @return integer  Number of microseconds elapsed since $start
395
     */
396
    function _getElapsed($start)
397
    {
398
        return $this->_getMicroseconds() - $start;
399
    }
400
 
401
    function &RefundTransaction($RefundTransactionReq)
402
    {
403
        $start = $this->_getMicroseconds();
404
 
405
        // Handle type objects.
406
        if (is_a($RefundTransactionReq, 'XSDSimpleType')) {
407
            $RefundTransactionReq->setVersion(PAYPAL_WSDL_VERSION);
408
            $RefundTransactionReq = $RefundTransactionReq->getSoapValue('RefundTransactionRequest', 'urn:ebay:api:PayPalAPI');
409
        }
410
 
411
        // Make sure we can find a valid WSDL endpoint for this method.
412
        $res = $this->setEndpoint('PayPalAPI', PAYPAL_WSDL_VERSION);
413
        if (PayPal::isError($res)) {
414
            $this->_logTransaction('RefundTransaction', $this->_getElapsed($start), $res);
415
            return $res;
416
        }
417
 
418
        // RefundTransactionReq is a ComplexType, refer to the WSDL for more info.
419
        $RefundTransactionReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
420
        $RefundTransactionReq =& new SOAP_Value('RefundTransactionReq', false, $RefundTransactionReq, $RefundTransactionReq_attr);
421
        $result = $this->call('RefundTransaction',
422
                              $v = array("RefundTransactionReq" => $RefundTransactionReq),
423
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
424
                                    'soapaction' => '',
425
                                    'style' => 'document',
426
                                    'use' => 'literal'));
427
 
428
        $response = $this->getResponseObject($result, 'RefundTransactionResponseType');
429
        $this->_logTransaction('RefundTransaction', $this->_getElapsed($start), $response);
430
        return $response;
431
    }
432
 
433
    function &GetTransactionDetails($GetTransactionDetailsReq)
434
    {
435
        $start = $this->_getMicroseconds();
436
 
437
        // Handle type objects.
438
        if (is_a($GetTransactionDetailsReq, 'XSDSimpleType')) {
439
            $GetTransactionDetailsReq->setVersion(PAYPAL_WSDL_VERSION);
440
            $GetTransactionDetailsReq = $GetTransactionDetailsReq->getSoapValue('GetTransactionDetailsRequest', 'urn:ebay:api:PayPalAPI');
441
        }
442
 
443
        // Make sure we can find a valid WSDL endpoint for this method.
444
        $res = $this->setEndpoint('PayPalAPI', PAYPAL_WSDL_VERSION);
445
        if (PayPal::isError($res)) {
446
            $this->_logTransaction('GetTransactionDetails', $this->_getElapsed($start), $res);
447
            return $res;
448
        }
449
 
450
        // GetTransactionDetailsReq is a ComplexType, refer to the WSDL for more info.
451
        $GetTransactionDetailsReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
452
        $GetTransactionDetailsReq =& new SOAP_Value('GetTransactionDetailsReq', false, $GetTransactionDetailsReq, $GetTransactionDetailsReq_attr);
453
        $result = $this->call('GetTransactionDetails',
454
                              $v = array("GetTransactionDetailsReq" => $GetTransactionDetailsReq),
455
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
456
                                    'soapaction' => '',
457
                                    'style' => 'document',
458
                                    'use' => 'literal'));
459
 
460
        $response = $this->getResponseObject($result, 'GetTransactionDetailsResponseType');
461
        $this->_logTransaction('GetTransactionDetails', $this->_getElapsed($start), $response);
462
        return $response;
463
    }
464
 
465
    function &BillUser($BillUserReq)
466
    {
467
        $start = $this->_getMicroseconds();
468
 
469
        // Handle type objects.
470
        if (is_a($BillUserReq, 'XSDSimpleType')) {
471
            $BillUserReq->setVersion(PAYPAL_WSDL_VERSION);
472
            $BillUserReq = $BillUserReq->getSoapValue('BillUserRequest', 'urn:ebay:api:PayPalAPI');
473
        }
474
 
475
        // Make sure we can find a valid WSDL endpoint for this method.
476
        $res = $this->setEndpoint('PayPalAPI', PAYPAL_WSDL_VERSION);
477
        if (PayPal::isError($res)) {
478
            $this->_logTransaction('BillUser', $this->_getElapsed($start), $res);
479
            return $res;
480
        }
481
 
482
        // BillUserReq is a ComplexType, refer to the WSDL for more info.
483
        $BillUserReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
484
        $BillUserReq =& new SOAP_Value('BillUserReq', false, $BillUserReq, $BillUserReq_attr);
485
        $result = $this->call('BillUser',
486
                              $v = array("BillUserReq" => $BillUserReq),
487
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
488
                                    'soapaction' => '',
489
                                    'style' => 'document',
490
                                    'use' => 'literal'));
491
 
492
        $response = $this->getResponseObject($result, 'BillUserResponseType');
493
        $this->_logTransaction('BillUser', $this->_getElapsed($start), $response);
494
        return $response;
495
    }
496
 
497
    function &TransactionSearch($TransactionSearchReq)
498
    {
499
        $start = $this->_getMicroseconds();
500
 
501
        // Handle type objects.
502
        if (is_a($TransactionSearchReq, 'XSDSimpleType')) {
503
            $TransactionSearchReq->setVersion(PAYPAL_WSDL_VERSION);
504
            $TransactionSearchReq = $TransactionSearchReq->getSoapValue('TransactionSearchRequest', 'urn:ebay:api:PayPalAPI');
505
        }
506
 
507
        // Make sure we can find a valid WSDL endpoint for this method.
508
        $res = $this->setEndpoint('PayPalAPI', PAYPAL_WSDL_VERSION);
509
        if (PayPal::isError($res)) {
510
            $this->_logTransaction('TransactionSearch', $this->_getElapsed($start), $res);
511
            return $res;
512
        }
513
 
514
        // TransactionSearchReq is a ComplexType, refer to the WSDL for more info.
515
        $TransactionSearchReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
516
        $TransactionSearchReq =& new SOAP_Value('TransactionSearchReq', false, $TransactionSearchReq, $TransactionSearchReq_attr);
517
        $result = $this->call('TransactionSearch',
518
                              $v = array("TransactionSearchReq" => $TransactionSearchReq),
519
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
520
                                    'soapaction' => '',
521
                                    'style' => 'document',
522
                                    'use' => 'literal'));
523
 
524
        $response = $this->getResponseObject($result, 'TransactionSearchResponseType');
525
        $this->_logTransaction('TransactionSearch', $this->_getElapsed($start), $response);
526
        return $response;
527
    }
528
 
529
    function &MassPay($MassPayReq)
530
    {
531
        $start = $this->_getMicroseconds();
532
 
533
        // Handle type objects.
534
        if (is_a($MassPayReq, 'XSDSimpleType')) {
535
            $MassPayReq->setVersion(PAYPAL_WSDL_VERSION);
536
            $MassPayReq = $MassPayReq->getSoapValue('MassPayRequest', 'urn:ebay:api:PayPalAPI');
537
        }
538
 
539
        // Make sure we can find a valid WSDL endpoint for this method.
540
        $res = $this->setEndpoint('PayPalAPI', PAYPAL_WSDL_VERSION);
541
        if (PayPal::isError($res)) {
542
            $this->_logTransaction('MassPay', $this->_getElapsed($start), $res);
543
            return $res;
544
        }
545
 
546
        // MassPayReq is a ComplexType, refer to the WSDL for more info.
547
        $MassPayReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
548
        $MassPayReq =& new SOAP_Value('MassPayReq', false, $MassPayReq, $MassPayReq_attr);
549
        $result = $this->call('MassPay',
550
                              $v = array("MassPayReq" => $MassPayReq),
551
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
552
                                    'soapaction' => '',
553
                                    'style' => 'document',
554
                                    'use' => 'literal'));
555
 
556
        $response = $this->getResponseObject($result, 'MassPayResponseType');
557
        $this->_logTransaction('MassPay', $this->_getElapsed($start), $response);
558
        return $response;
559
    }
560
 
561
    function &BillAgreementUpdate($BillAgreementUpdateReq)
562
    {
563
        $start = $this->_getMicroseconds();
564
 
565
        // Handle type objects.
566
        if (is_a($BillAgreementUpdateReq, 'XSDSimpleType')) {
567
            $BillAgreementUpdateReq->setVersion(PAYPAL_WSDL_VERSION);
568
            $BillAgreementUpdateReq = $BillAgreementUpdateReq->getSoapValue('BAUpdateRequest', 'urn:ebay:api:PayPalAPI');
569
        }
570
 
571
        // Make sure we can find a valid WSDL endpoint for this method.
572
        $res = $this->setEndpoint('PayPalAPI', PAYPAL_WSDL_VERSION);
573
        if (PayPal::isError($res)) {
574
            $this->_logTransaction('BillAgreementUpdate', $this->_getElapsed($start), $res);
575
            return $res;
576
        }
577
 
578
        // BillAgreementUpdateReq is a ComplexType, refer to the WSDL for more info.
579
        $BillAgreementUpdateReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
580
        $BillAgreementUpdateReq =& new SOAP_Value('BillAgreementUpdateReq', false, $BillAgreementUpdateReq, $BillAgreementUpdateReq_attr);
581
        $result = $this->call('BillAgreementUpdate',
582
                              $v = array("BillAgreementUpdateReq" => $BillAgreementUpdateReq),
583
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
584
                                    'soapaction' => '',
585
                                    'style' => 'document',
586
                                    'use' => 'literal'));
587
 
588
        $response = $this->getResponseObject($result, 'BAUpdateResponseType');
589
        $this->_logTransaction('BillAgreementUpdate', $this->_getElapsed($start), $response);
590
        return $response;
591
    }
592
 
593
    function &AddressVerify($AddressVerifyReq)
594
    {
595
        $start = $this->_getMicroseconds();
596
 
597
        // Handle type objects.
598
        if (is_a($AddressVerifyReq, 'XSDSimpleType')) {
599
            $AddressVerifyReq->setVersion(PAYPAL_WSDL_VERSION);
600
            $AddressVerifyReq = $AddressVerifyReq->getSoapValue('AddressVerifyRequest', 'urn:ebay:api:PayPalAPI');
601
        }
602
 
603
        // Make sure we can find a valid WSDL endpoint for this method.
604
        $res = $this->setEndpoint('PayPalAPI', PAYPAL_WSDL_VERSION);
605
        if (PayPal::isError($res)) {
606
            $this->_logTransaction('AddressVerify', $this->_getElapsed($start), $res);
607
            return $res;
608
        }
609
 
610
        // AddressVerifyReq is a ComplexType, refer to the WSDL for more info.
611
        $AddressVerifyReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
612
        $AddressVerifyReq =& new SOAP_Value('AddressVerifyReq', false, $AddressVerifyReq, $AddressVerifyReq_attr);
613
        $result = $this->call('AddressVerify',
614
                              $v = array("AddressVerifyReq" => $AddressVerifyReq),
615
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
616
                                    'soapaction' => '',
617
                                    'style' => 'document',
618
                                    'use' => 'literal'));
619
 
620
        $response = $this->getResponseObject($result, 'AddressVerifyResponseType');
621
        $this->_logTransaction('AddressVerify', $this->_getElapsed($start), $response);
622
        return $response;
623
    }
624
 
625
    function &EnterBoarding($EnterBoardingReq)
626
    {
627
        $start = $this->_getMicroseconds();
628
 
629
        // Handle type objects.
630
        if (is_a($EnterBoardingReq, 'XSDSimpleType')) {
631
            $EnterBoardingReq->setVersion(PAYPAL_WSDL_VERSION);
632
            $EnterBoardingReq = $EnterBoardingReq->getSoapValue('EnterBoardingRequest', 'urn:ebay:api:PayPalAPI');
633
        }
634
 
635
        // Make sure we can find a valid WSDL endpoint for this method.
636
        $res = $this->setEndpoint('PayPalAPI', PAYPAL_WSDL_VERSION);
637
        if (PayPal::isError($res)) {
638
            $this->_logTransaction('EnterBoarding', $this->_getElapsed($start), $res);
639
            return $res;
640
        }
641
 
642
        // EnterBoardingReq is a ComplexType, refer to the WSDL for more info.
643
        $EnterBoardingReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
644
        $EnterBoardingReq =& new SOAP_Value('EnterBoardingReq', false, $EnterBoardingReq, $EnterBoardingReq_attr);
645
        $result = $this->call('EnterBoarding',
646
                              $v = array("EnterBoardingReq" => $EnterBoardingReq),
647
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
648
                                    'soapaction' => '',
649
                                    'style' => 'document',
650
                                    'use' => 'literal'));
651
 
652
        $response = $this->getResponseObject($result, 'EnterBoardingResponseType');
653
        $this->_logTransaction('EnterBoarding', $this->_getElapsed($start), $response);
654
        return $response;
655
    }
656
 
657
    function &GetBoardingDetails($GetBoardingDetailsReq)
658
    {
659
        $start = $this->_getMicroseconds();
660
 
661
        // Handle type objects.
662
        if (is_a($GetBoardingDetailsReq, 'XSDSimpleType')) {
663
            $GetBoardingDetailsReq->setVersion(PAYPAL_WSDL_VERSION);
664
            $GetBoardingDetailsReq = $GetBoardingDetailsReq->getSoapValue('GetBoardingDetailsRequest', 'urn:ebay:api:PayPalAPI');
665
        }
666
 
667
        // Make sure we can find a valid WSDL endpoint for this method.
668
        $res = $this->setEndpoint('PayPalAPI', PAYPAL_WSDL_VERSION);
669
        if (PayPal::isError($res)) {
670
            $this->_logTransaction('GetBoardingDetails', $this->_getElapsed($start), $res);
671
            return $res;
672
        }
673
 
674
        // GetBoardingDetailsReq is a ComplexType, refer to the WSDL for more info.
675
        $GetBoardingDetailsReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
676
        $GetBoardingDetailsReq =& new SOAP_Value('GetBoardingDetailsReq', false, $GetBoardingDetailsReq, $GetBoardingDetailsReq_attr);
677
        $result = $this->call('GetBoardingDetails',
678
                              $v = array("GetBoardingDetailsReq" => $GetBoardingDetailsReq),
679
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
680
                                    'soapaction' => '',
681
                                    'style' => 'document',
682
                                    'use' => 'literal'));
683
 
684
        $response = $this->getResponseObject($result, 'GetBoardingDetailsResponseType');
685
        $this->_logTransaction('GetBoardingDetails', $this->_getElapsed($start), $response);
686
        return $response;
687
    }
688
 
689
    function &CreateMobilePayment($CreateMobilePaymentReq)
690
    {
691
        $start = $this->_getMicroseconds();
692
 
693
        // Handle type objects.
694
        if (is_a($CreateMobilePaymentReq, 'XSDSimpleType')) {
695
            $CreateMobilePaymentReq->setVersion(PAYPAL_WSDL_VERSION);
696
            $CreateMobilePaymentReq = $CreateMobilePaymentReq->getSoapValue('CreateMobilePaymentRequest', 'urn:ebay:api:PayPalAPI');
697
        }
698
 
699
        // Make sure we can find a valid WSDL endpoint for this method.
700
        $res = $this->setEndpoint('PayPalAPI', PAYPAL_WSDL_VERSION);
701
        if (PayPal::isError($res)) {
702
            $this->_logTransaction('CreateMobilePayment', $this->_getElapsed($start), $res);
703
            return $res;
704
        }
705
 
706
        // CreateMobilePaymentReq is a ComplexType, refer to the WSDL for more info.
707
        $CreateMobilePaymentReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
708
        $CreateMobilePaymentReq =& new SOAP_Value('CreateMobilePaymentReq', false, $CreateMobilePaymentReq, $CreateMobilePaymentReq_attr);
709
        $result = $this->call('CreateMobilePayment',
710
                              $v = array("CreateMobilePaymentReq" => $CreateMobilePaymentReq),
711
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
712
                                    'soapaction' => '',
713
                                    'style' => 'document',
714
                                    'use' => 'literal'));
715
 
716
        $response = $this->getResponseObject($result, 'CreateMobilePaymentResponseType');
717
        $this->_logTransaction('CreateMobilePayment', $this->_getElapsed($start), $response);
718
        return $response;
719
    }
720
 
721
    function &GetMobileStatus($GetMobileStatusReq)
722
    {
723
        $start = $this->_getMicroseconds();
724
 
725
        // Handle type objects.
726
        if (is_a($GetMobileStatusReq, 'XSDSimpleType')) {
727
            $GetMobileStatusReq->setVersion(PAYPAL_WSDL_VERSION);
728
            $GetMobileStatusReq = $GetMobileStatusReq->getSoapValue('GetMobileStatusRequest', 'urn:ebay:api:PayPalAPI');
729
        }
730
 
731
        // Make sure we can find a valid WSDL endpoint for this method.
732
        $res = $this->setEndpoint('PayPalAPI', PAYPAL_WSDL_VERSION);
733
        if (PayPal::isError($res)) {
734
            $this->_logTransaction('GetMobileStatus', $this->_getElapsed($start), $res);
735
            return $res;
736
        }
737
 
738
        // GetMobileStatusReq is a ComplexType, refer to the WSDL for more info.
739
        $GetMobileStatusReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
740
        $GetMobileStatusReq =& new SOAP_Value('GetMobileStatusReq', false, $GetMobileStatusReq, $GetMobileStatusReq_attr);
741
        $result = $this->call('GetMobileStatus',
742
                              $v = array("GetMobileStatusReq" => $GetMobileStatusReq),
743
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
744
                                    'soapaction' => '',
745
                                    'style' => 'document',
746
                                    'use' => 'literal'));
747
 
748
        $response = $this->getResponseObject($result, 'GetMobileStatusResponseType');
749
        $this->_logTransaction('GetMobileStatus', $this->_getElapsed($start), $response);
750
        return $response;
751
    }
752
 
753
    function &SetMobileCheckout($SetMobileCheckoutReq)
754
    {
755
        $start = $this->_getMicroseconds();
756
 
757
        // Handle type objects.
758
        if (is_a($SetMobileCheckoutReq, 'XSDSimpleType')) {
759
            $SetMobileCheckoutReq->setVersion(PAYPAL_WSDL_VERSION);
760
            $SetMobileCheckoutReq = $SetMobileCheckoutReq->getSoapValue('SetMobileCheckoutRequest', 'urn:ebay:api:PayPalAPI');
761
        }
762
 
763
        // Make sure we can find a valid WSDL endpoint for this method.
764
        $res = $this->setEndpoint('PayPalAPI', PAYPAL_WSDL_VERSION);
765
        if (PayPal::isError($res)) {
766
            $this->_logTransaction('SetMobileCheckout', $this->_getElapsed($start), $res);
767
            return $res;
768
        }
769
 
770
        // SetMobileCheckoutReq is a ComplexType, refer to the WSDL for more info.
771
        $SetMobileCheckoutReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
772
        $SetMobileCheckoutReq =& new SOAP_Value('SetMobileCheckoutReq', false, $SetMobileCheckoutReq, $SetMobileCheckoutReq_attr);
773
        $result = $this->call('SetMobileCheckout',
774
                              $v = array("SetMobileCheckoutReq" => $SetMobileCheckoutReq),
775
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
776
                                    'soapaction' => '',
777
                                    'style' => 'document',
778
                                    'use' => 'literal'));
779
 
780
        $response = $this->getResponseObject($result, 'SetMobileCheckoutResponseType');
781
        $this->_logTransaction('SetMobileCheckout', $this->_getElapsed($start), $response);
782
        return $response;
783
    }
784
 
785
    function &DoMobileCheckoutPayment($DoMobileCheckoutPaymentReq)
786
    {
787
        $start = $this->_getMicroseconds();
788
 
789
        // Handle type objects.
790
        if (is_a($DoMobileCheckoutPaymentReq, 'XSDSimpleType')) {
791
            $DoMobileCheckoutPaymentReq->setVersion(PAYPAL_WSDL_VERSION);
792
            $DoMobileCheckoutPaymentReq = $DoMobileCheckoutPaymentReq->getSoapValue('DoMobileCheckoutPaymentRequest', 'urn:ebay:api:PayPalAPI');
793
        }
794
 
795
        // Make sure we can find a valid WSDL endpoint for this method.
796
        $res = $this->setEndpoint('PayPalAPI', PAYPAL_WSDL_VERSION);
797
        if (PayPal::isError($res)) {
798
            $this->_logTransaction('DoMobileCheckoutPayment', $this->_getElapsed($start), $res);
799
            return $res;
800
        }
801
 
802
        // DoMobileCheckoutPaymentReq is a ComplexType, refer to the WSDL for more info.
803
        $DoMobileCheckoutPaymentReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
804
        $DoMobileCheckoutPaymentReq =& new SOAP_Value('DoMobileCheckoutPaymentReq', false, $DoMobileCheckoutPaymentReq, $DoMobileCheckoutPaymentReq_attr);
805
        $result = $this->call('DoMobileCheckoutPayment',
806
                              $v = array("DoMobileCheckoutPaymentReq" => $DoMobileCheckoutPaymentReq),
807
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
808
                                    'soapaction' => '',
809
                                    'style' => 'document',
810
                                    'use' => 'literal'));
811
 
812
        $response = $this->getResponseObject($result, 'DoMobileCheckoutPaymentResponseType');
813
        $this->_logTransaction('DoMobileCheckoutPayment', $this->_getElapsed($start), $response);
814
        return $response;
815
    }
816
 
817
    function &GetBalance($GetBalanceReq)
818
    {
819
        $start = $this->_getMicroseconds();
820
 
821
        // Handle type objects.
822
        if (is_a($GetBalanceReq, 'XSDSimpleType')) {
823
            $GetBalanceReq->setVersion(PAYPAL_WSDL_VERSION);
824
            $GetBalanceReq = $GetBalanceReq->getSoapValue('GetBalanceRequest', 'urn:ebay:api:PayPalAPI');
825
        }
826
 
827
        // Make sure we can find a valid WSDL endpoint for this method.
828
        $res = $this->setEndpoint('PayPalAPI', PAYPAL_WSDL_VERSION);
829
        if (PayPal::isError($res)) {
830
            $this->_logTransaction('GetBalance', $this->_getElapsed($start), $res);
831
            return $res;
832
        }
833
 
834
        // GetBalanceReq is a ComplexType, refer to the WSDL for more info.
835
        $GetBalanceReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
836
        $GetBalanceReq =& new SOAP_Value('GetBalanceReq', false, $GetBalanceReq, $GetBalanceReq_attr);
837
        $result = $this->call('GetBalance',
838
                              $v = array("GetBalanceReq" => $GetBalanceReq),
839
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
840
                                    'soapaction' => '',
841
                                    'style' => 'document',
842
                                    'use' => 'literal'));
843
 
844
        $response = $this->getResponseObject($result, 'GetBalanceResponseType');
845
        $this->_logTransaction('GetBalance', $this->_getElapsed($start), $response);
846
        return $response;
847
    }
848
 
849
    function &DoExpressCheckoutPayment($DoExpressCheckoutPaymentReq)
850
    {
851
        $start = $this->_getMicroseconds();
852
 
853
        // Handle type objects.
854
        if (is_a($DoExpressCheckoutPaymentReq, 'XSDSimpleType')) {
855
            $DoExpressCheckoutPaymentReq->setVersion(PAYPAL_WSDL_VERSION);
856
            $DoExpressCheckoutPaymentReq = $DoExpressCheckoutPaymentReq->getSoapValue('DoExpressCheckoutPaymentRequest', 'urn:ebay:api:PayPalAPI');
857
        }
858
 
859
        // Make sure we can find a valid WSDL endpoint for this method.
860
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
861
        if (PayPal::isError($res)) {
862
            $this->_logTransaction('DoExpressCheckoutPayment', $this->_getElapsed($start), $res);
863
            return $res;
864
        }
865
 
866
        // DoExpressCheckoutPaymentReq is a ComplexType, refer to the WSDL for more info.
867
        $DoExpressCheckoutPaymentReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
868
        $DoExpressCheckoutPaymentReq =& new SOAP_Value('DoExpressCheckoutPaymentReq', false, $DoExpressCheckoutPaymentReq, $DoExpressCheckoutPaymentReq_attr);
869
        $result = $this->call('DoExpressCheckoutPayment',
870
                              $v = array("DoExpressCheckoutPaymentReq" => $DoExpressCheckoutPaymentReq),
871
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
872
                                    'soapaction' => '',
873
                                    'style' => 'document',
874
                                    'use' => 'literal'));
875
 
876
        $response = $this->getResponseObject($result, 'DoExpressCheckoutPaymentResponseType');
877
        $this->_logTransaction('DoExpressCheckoutPayment', $this->_getElapsed($start), $response);
878
        return $response;
879
    }
880
 
881
    function &DoUATPExpressCheckoutPayment($DoUATPExpressCheckoutPaymentReq)
882
    {
883
        $start = $this->_getMicroseconds();
884
 
885
        // Handle type objects.
886
        if (is_a($DoUATPExpressCheckoutPaymentReq, 'XSDSimpleType')) {
887
            $DoUATPExpressCheckoutPaymentReq->setVersion(PAYPAL_WSDL_VERSION);
888
            $DoUATPExpressCheckoutPaymentReq = $DoUATPExpressCheckoutPaymentReq->getSoapValue('DoUATPExpressCheckoutPaymentRequest', 'urn:ebay:api:PayPalAPI');
889
        }
890
 
891
        // Make sure we can find a valid WSDL endpoint for this method.
892
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
893
        if (PayPal::isError($res)) {
894
            $this->_logTransaction('DoUATPExpressCheckoutPayment', $this->_getElapsed($start), $res);
895
            return $res;
896
        }
897
 
898
        // DoUATPExpressCheckoutPaymentReq is a ComplexType, refer to the WSDL for more info.
899
        $DoUATPExpressCheckoutPaymentReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
900
        $DoUATPExpressCheckoutPaymentReq =& new SOAP_Value('DoUATPExpressCheckoutPaymentReq', false, $DoUATPExpressCheckoutPaymentReq, $DoUATPExpressCheckoutPaymentReq_attr);
901
        $result = $this->call('DoUATPExpressCheckoutPayment',
902
                              $v = array("DoUATPExpressCheckoutPaymentReq" => $DoUATPExpressCheckoutPaymentReq),
903
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
904
                                    'soapaction' => '',
905
                                    'style' => 'document',
906
                                    'use' => 'literal'));
907
 
908
        $response = $this->getResponseObject($result, 'DoUATPExpressCheckoutPaymentResponseType');
909
        $this->_logTransaction('DoUATPExpressCheckoutPayment', $this->_getElapsed($start), $response);
910
        return $response;
911
    }
912
 
913
    function &SetAuthFlowParam($SetAuthFlowParamReq)
914
    {
915
        $start = $this->_getMicroseconds();
916
 
917
        // Handle type objects.
918
        if (is_a($SetAuthFlowParamReq, 'XSDSimpleType')) {
919
            $SetAuthFlowParamReq->setVersion(PAYPAL_WSDL_VERSION);
920
            $SetAuthFlowParamReq = $SetAuthFlowParamReq->getSoapValue('SetAuthFlowParamRequest', 'urn:ebay:api:PayPalAPI');
921
        }
922
 
923
        // Make sure we can find a valid WSDL endpoint for this method.
924
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
925
        if (PayPal::isError($res)) {
926
            $this->_logTransaction('SetAuthFlowParam', $this->_getElapsed($start), $res);
927
            return $res;
928
        }
929
 
930
        // SetAuthFlowParamReq is a ComplexType, refer to the WSDL for more info.
931
        $SetAuthFlowParamReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
932
        $SetAuthFlowParamReq =& new SOAP_Value('SetAuthFlowParamReq', false, $SetAuthFlowParamReq, $SetAuthFlowParamReq_attr);
933
        $result = $this->call('SetAuthFlowParam',
934
                              $v = array("SetAuthFlowParamReq" => $SetAuthFlowParamReq),
935
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
936
                                    'soapaction' => '',
937
                                    'style' => 'document',
938
                                    'use' => 'literal'));
939
 
940
        $response = $this->getResponseObject($result, 'SetAuthFlowParamResponseType');
941
        $this->_logTransaction('SetAuthFlowParam', $this->_getElapsed($start), $response);
942
        return $response;
943
    }
944
 
945
    function &GetAuthDetails($GetAuthDetailsReq)
946
    {
947
        $start = $this->_getMicroseconds();
948
 
949
        // Handle type objects.
950
        if (is_a($GetAuthDetailsReq, 'XSDSimpleType')) {
951
            $GetAuthDetailsReq->setVersion(PAYPAL_WSDL_VERSION);
952
            $GetAuthDetailsReq = $GetAuthDetailsReq->getSoapValue('GetAuthDetailsRequest', 'urn:ebay:api:PayPalAPI');
953
        }
954
 
955
        // Make sure we can find a valid WSDL endpoint for this method.
956
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
957
        if (PayPal::isError($res)) {
958
            $this->_logTransaction('GetAuthDetails', $this->_getElapsed($start), $res);
959
            return $res;
960
        }
961
 
962
        // GetAuthDetailsReq is a ComplexType, refer to the WSDL for more info.
963
        $GetAuthDetailsReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
964
        $GetAuthDetailsReq =& new SOAP_Value('GetAuthDetailsReq', false, $GetAuthDetailsReq, $GetAuthDetailsReq_attr);
965
        $result = $this->call('GetAuthDetails',
966
                              $v = array("GetAuthDetailsReq" => $GetAuthDetailsReq),
967
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
968
                                    'soapaction' => '',
969
                                    'style' => 'document',
970
                                    'use' => 'literal'));
971
 
972
        $response = $this->getResponseObject($result, 'GetAuthDetailsResponseType');
973
        $this->_logTransaction('GetAuthDetails', $this->_getElapsed($start), $response);
974
        return $response;
975
    }
976
 
977
    function &SetAccessPermissions($SetAccessPermissionsReq)
978
    {
979
        $start = $this->_getMicroseconds();
980
 
981
        // Handle type objects.
982
        if (is_a($SetAccessPermissionsReq, 'XSDSimpleType')) {
983
            $SetAccessPermissionsReq->setVersion(PAYPAL_WSDL_VERSION);
984
            $SetAccessPermissionsReq = $SetAccessPermissionsReq->getSoapValue('SetAccessPermissionsRequest', 'urn:ebay:api:PayPalAPI');
985
        }
986
 
987
        // Make sure we can find a valid WSDL endpoint for this method.
988
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
989
        if (PayPal::isError($res)) {
990
            $this->_logTransaction('SetAccessPermissions', $this->_getElapsed($start), $res);
991
            return $res;
992
        }
993
 
994
        // SetAccessPermissionsReq is a ComplexType, refer to the WSDL for more info.
995
        $SetAccessPermissionsReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
996
        $SetAccessPermissionsReq =& new SOAP_Value('SetAccessPermissionsReq', false, $SetAccessPermissionsReq, $SetAccessPermissionsReq_attr);
997
        $result = $this->call('SetAccessPermissions',
998
                              $v = array("SetAccessPermissionsReq" => $SetAccessPermissionsReq),
999
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1000
                                    'soapaction' => '',
1001
                                    'style' => 'document',
1002
                                    'use' => 'literal'));
1003
 
1004
        $response = $this->getResponseObject($result, 'SetAccessPermissionsResponseType');
1005
        $this->_logTransaction('SetAccessPermissions', $this->_getElapsed($start), $response);
1006
        return $response;
1007
    }
1008
 
1009
    function &UpdateAccessPermissions($UpdateAccessPermissionsReq)
1010
    {
1011
        $start = $this->_getMicroseconds();
1012
 
1013
        // Handle type objects.
1014
        if (is_a($UpdateAccessPermissionsReq, 'XSDSimpleType')) {
1015
            $UpdateAccessPermissionsReq->setVersion(PAYPAL_WSDL_VERSION);
1016
            $UpdateAccessPermissionsReq = $UpdateAccessPermissionsReq->getSoapValue('UpdateAccessPermissionsRequest', 'urn:ebay:api:PayPalAPI');
1017
        }
1018
 
1019
        // Make sure we can find a valid WSDL endpoint for this method.
1020
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1021
        if (PayPal::isError($res)) {
1022
            $this->_logTransaction('UpdateAccessPermissions', $this->_getElapsed($start), $res);
1023
            return $res;
1024
        }
1025
 
1026
        // UpdateAccessPermissionsReq is a ComplexType, refer to the WSDL for more info.
1027
        $UpdateAccessPermissionsReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1028
        $UpdateAccessPermissionsReq =& new SOAP_Value('UpdateAccessPermissionsReq', false, $UpdateAccessPermissionsReq, $UpdateAccessPermissionsReq_attr);
1029
        $result = $this->call('UpdateAccessPermissions',
1030
                              $v = array("UpdateAccessPermissionsReq" => $UpdateAccessPermissionsReq),
1031
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1032
                                    'soapaction' => '',
1033
                                    'style' => 'document',
1034
                                    'use' => 'literal'));
1035
 
1036
        $response = $this->getResponseObject($result, 'UpdateAccessPermissionsResponseType');
1037
        $this->_logTransaction('UpdateAccessPermissions', $this->_getElapsed($start), $response);
1038
        return $response;
1039
    }
1040
 
1041
    function &GetAccessPermissionDetails($GetAccessPermissionDetailsReq)
1042
    {
1043
        $start = $this->_getMicroseconds();
1044
 
1045
        // Handle type objects.
1046
        if (is_a($GetAccessPermissionDetailsReq, 'XSDSimpleType')) {
1047
            $GetAccessPermissionDetailsReq->setVersion(PAYPAL_WSDL_VERSION);
1048
            $GetAccessPermissionDetailsReq = $GetAccessPermissionDetailsReq->getSoapValue('GetAccessPermissionDetailsRequest', 'urn:ebay:api:PayPalAPI');
1049
        }
1050
 
1051
        // Make sure we can find a valid WSDL endpoint for this method.
1052
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1053
        if (PayPal::isError($res)) {
1054
            $this->_logTransaction('GetAccessPermissionDetails', $this->_getElapsed($start), $res);
1055
            return $res;
1056
        }
1057
 
1058
        // GetAccessPermissionDetailsReq is a ComplexType, refer to the WSDL for more info.
1059
        $GetAccessPermissionDetailsReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1060
        $GetAccessPermissionDetailsReq =& new SOAP_Value('GetAccessPermissionDetailsReq', false, $GetAccessPermissionDetailsReq, $GetAccessPermissionDetailsReq_attr);
1061
        $result = $this->call('GetAccessPermissionDetails',
1062
                              $v = array("GetAccessPermissionDetailsReq" => $GetAccessPermissionDetailsReq),
1063
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1064
                                    'soapaction' => '',
1065
                                    'style' => 'document',
1066
                                    'use' => 'literal'));
1067
 
1068
        $response = $this->getResponseObject($result, 'GetAccessPermissionDetailsResponseType');
1069
        $this->_logTransaction('GetAccessPermissionDetails', $this->_getElapsed($start), $response);
1070
        return $response;
1071
    }
1072
 
1073
    function &SetExpressCheckout($SetExpressCheckoutReq)
1074
    {
1075
        $start = $this->_getMicroseconds();
1076
 
1077
        // Handle type objects.
1078
        if (is_a($SetExpressCheckoutReq, 'XSDSimpleType')) {
1079
            $SetExpressCheckoutReq->setVersion(PAYPAL_WSDL_VERSION);
1080
            $SetExpressCheckoutReq = $SetExpressCheckoutReq->getSoapValue('SetExpressCheckoutRequest', 'urn:ebay:api:PayPalAPI');
1081
        }
1082
 
1083
        // Make sure we can find a valid WSDL endpoint for this method.
1084
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1085
        if (PayPal::isError($res)) {
1086
            $this->_logTransaction('SetExpressCheckout', $this->_getElapsed($start), $res);
1087
            return $res;
1088
        }
1089
 
1090
        // SetExpressCheckoutReq is a ComplexType, refer to the WSDL for more info.
1091
        $SetExpressCheckoutReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1092
        $SetExpressCheckoutReq =& new SOAP_Value('SetExpressCheckoutReq', false, $SetExpressCheckoutReq, $SetExpressCheckoutReq_attr);
1093
        $result = $this->call('SetExpressCheckout',
1094
                              $v = array("SetExpressCheckoutReq" => $SetExpressCheckoutReq),
1095
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1096
                                    'soapaction' => '',
1097
                                    'style' => 'document',
1098
                                    'use' => 'literal'));
1099
 
1100
        $response = $this->getResponseObject($result, 'SetExpressCheckoutResponseType');
1101
        $this->_logTransaction('SetExpressCheckout', $this->_getElapsed($start), $response);
1102
        return $response;
1103
    }
1104
 
1105
    function &GetExpressCheckoutDetails($GetExpressCheckoutDetailsReq)
1106
    {
1107
        $start = $this->_getMicroseconds();
1108
 
1109
        // Handle type objects.
1110
        if (is_a($GetExpressCheckoutDetailsReq, 'XSDSimpleType')) {
1111
            $GetExpressCheckoutDetailsReq->setVersion(PAYPAL_WSDL_VERSION);
1112
            $GetExpressCheckoutDetailsReq = $GetExpressCheckoutDetailsReq->getSoapValue('GetExpressCheckoutDetailsRequest', 'urn:ebay:api:PayPalAPI');
1113
        }
1114
 
1115
        // Make sure we can find a valid WSDL endpoint for this method.
1116
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1117
        if (PayPal::isError($res)) {
1118
            $this->_logTransaction('GetExpressCheckoutDetails', $this->_getElapsed($start), $res);
1119
            return $res;
1120
        }
1121
 
1122
        // GetExpressCheckoutDetailsReq is a ComplexType, refer to the WSDL for more info.
1123
        $GetExpressCheckoutDetailsReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1124
        $GetExpressCheckoutDetailsReq =& new SOAP_Value('GetExpressCheckoutDetailsReq', false, $GetExpressCheckoutDetailsReq, $GetExpressCheckoutDetailsReq_attr);
1125
        $result = $this->call('GetExpressCheckoutDetails',
1126
                              $v = array("GetExpressCheckoutDetailsReq" => $GetExpressCheckoutDetailsReq),
1127
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1128
                                    'soapaction' => '',
1129
                                    'style' => 'document',
1130
                                    'use' => 'literal'));
1131
 
1132
        $response = $this->getResponseObject($result, 'GetExpressCheckoutDetailsResponseType');
1133
        $this->_logTransaction('GetExpressCheckoutDetails', $this->_getElapsed($start), $response);
1134
        return $response;
1135
    }
1136
 
1137
    function &DoDirectPayment($DoDirectPaymentReq)
1138
    {
1139
        $start = $this->_getMicroseconds();
1140
 
1141
        // Handle type objects.
1142
        if (is_a($DoDirectPaymentReq, 'XSDSimpleType')) {
1143
            $DoDirectPaymentReq->setVersion(PAYPAL_WSDL_VERSION);
1144
            $DoDirectPaymentReq = $DoDirectPaymentReq->getSoapValue('DoDirectPaymentRequest', 'urn:ebay:api:PayPalAPI');
1145
        }
1146
 
1147
        // Make sure we can find a valid WSDL endpoint for this method.
1148
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1149
        if (PayPal::isError($res)) {
1150
            $this->_logTransaction('DoDirectPayment', $this->_getElapsed($start), $res);
1151
            return $res;
1152
        }
1153
 
1154
        // DoDirectPaymentReq is a ComplexType, refer to the WSDL for more info.
1155
        $DoDirectPaymentReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1156
        $DoDirectPaymentReq =& new SOAP_Value('DoDirectPaymentReq', false, $DoDirectPaymentReq, $DoDirectPaymentReq_attr);
1157
        $result = $this->call('DoDirectPayment',
1158
                              $v = array("DoDirectPaymentReq" => $DoDirectPaymentReq),
1159
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1160
                                    'soapaction' => '',
1161
                                    'style' => 'document',
1162
                                    'use' => 'literal'));
1163
 
1164
        $response = $this->getResponseObject($result, 'DoDirectPaymentResponseType');
1165
        $this->_logTransaction('DoDirectPayment', $this->_getElapsed($start), $response);
1166
        return $response;
1167
    }
1168
 
1169
    function &ManagePendingTransactionStatus($ManagePendingTransactionStatusReq)
1170
    {
1171
        $start = $this->_getMicroseconds();
1172
 
1173
        // Handle type objects.
1174
        if (is_a($ManagePendingTransactionStatusReq, 'XSDSimpleType')) {
1175
            $ManagePendingTransactionStatusReq->setVersion(PAYPAL_WSDL_VERSION);
1176
            $ManagePendingTransactionStatusReq = $ManagePendingTransactionStatusReq->getSoapValue('ManagePendingTransactionStatusRequest', 'urn:ebay:api:PayPalAPI');
1177
        }
1178
 
1179
        // Make sure we can find a valid WSDL endpoint for this method.
1180
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1181
        if (PayPal::isError($res)) {
1182
            $this->_logTransaction('ManagePendingTransactionStatus', $this->_getElapsed($start), $res);
1183
            return $res;
1184
        }
1185
 
1186
        // ManagePendingTransactionStatusReq is a ComplexType, refer to the WSDL for more info.
1187
        $ManagePendingTransactionStatusReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1188
        $ManagePendingTransactionStatusReq =& new SOAP_Value('ManagePendingTransactionStatusReq', false, $ManagePendingTransactionStatusReq, $ManagePendingTransactionStatusReq_attr);
1189
        $result = $this->call('ManagePendingTransactionStatus',
1190
                              $v = array("ManagePendingTransactionStatusReq" => $ManagePendingTransactionStatusReq),
1191
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1192
                                    'soapaction' => '',
1193
                                    'style' => 'document',
1194
                                    'use' => 'literal'));
1195
 
1196
        $response = $this->getResponseObject($result, 'ManagePendingTransactionStatusResponseType');
1197
        $this->_logTransaction('ManagePendingTransactionStatus', $this->_getElapsed($start), $response);
1198
        return $response;
1199
    }
1200
 
1201
    function &DoCapture($DoCaptureReq)
1202
    {
1203
        $start = $this->_getMicroseconds();
1204
 
1205
        // Handle type objects.
1206
        if (is_a($DoCaptureReq, 'XSDSimpleType')) {
1207
            $DoCaptureReq->setVersion(PAYPAL_WSDL_VERSION);
1208
            $DoCaptureReq = $DoCaptureReq->getSoapValue('DoCaptureRequest', 'urn:ebay:api:PayPalAPI');
1209
        }
1210
 
1211
        // Make sure we can find a valid WSDL endpoint for this method.
1212
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1213
        if (PayPal::isError($res)) {
1214
            $this->_logTransaction('DoCapture', $this->_getElapsed($start), $res);
1215
            return $res;
1216
        }
1217
 
1218
        // DoCaptureReq is a ComplexType, refer to the WSDL for more info.
1219
        $DoCaptureReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1220
        $DoCaptureReq =& new SOAP_Value('DoCaptureReq', false, $DoCaptureReq, $DoCaptureReq_attr);
1221
        $result = $this->call('DoCapture',
1222
                              $v = array("DoCaptureReq" => $DoCaptureReq),
1223
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1224
                                    'soapaction' => '',
1225
                                    'style' => 'document',
1226
                                    'use' => 'literal'));
1227
 
1228
        $response = $this->getResponseObject($result, 'DoCaptureResponseType');
1229
        $this->_logTransaction('DoCapture', $this->_getElapsed($start), $response);
1230
        return $response;
1231
    }
1232
 
1233
    function &DoReauthorization($DoReauthorizationReq)
1234
    {
1235
        $start = $this->_getMicroseconds();
1236
 
1237
        // Handle type objects.
1238
        if (is_a($DoReauthorizationReq, 'XSDSimpleType')) {
1239
            $DoReauthorizationReq->setVersion(PAYPAL_WSDL_VERSION);
1240
            $DoReauthorizationReq = $DoReauthorizationReq->getSoapValue('DoReauthorizationRequest', 'urn:ebay:api:PayPalAPI');
1241
        }
1242
 
1243
        // Make sure we can find a valid WSDL endpoint for this method.
1244
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1245
        if (PayPal::isError($res)) {
1246
            $this->_logTransaction('DoReauthorization', $this->_getElapsed($start), $res);
1247
            return $res;
1248
        }
1249
 
1250
        // DoReauthorizationReq is a ComplexType, refer to the WSDL for more info.
1251
        $DoReauthorizationReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1252
        $DoReauthorizationReq =& new SOAP_Value('DoReauthorizationReq', false, $DoReauthorizationReq, $DoReauthorizationReq_attr);
1253
        $result = $this->call('DoReauthorization',
1254
                              $v = array("DoReauthorizationReq" => $DoReauthorizationReq),
1255
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1256
                                    'soapaction' => '',
1257
                                    'style' => 'document',
1258
                                    'use' => 'literal'));
1259
 
1260
        $response = $this->getResponseObject($result, 'DoReauthorizationResponseType');
1261
        $this->_logTransaction('DoReauthorization', $this->_getElapsed($start), $response);
1262
        return $response;
1263
    }
1264
 
1265
    function &DoVoid($DoVoidReq)
1266
    {
1267
        $start = $this->_getMicroseconds();
1268
 
1269
        // Handle type objects.
1270
        if (is_a($DoVoidReq, 'XSDSimpleType')) {
1271
            $DoVoidReq->setVersion(PAYPAL_WSDL_VERSION);
1272
            $DoVoidReq = $DoVoidReq->getSoapValue('DoVoidRequest', 'urn:ebay:api:PayPalAPI');
1273
        }
1274
 
1275
        // Make sure we can find a valid WSDL endpoint for this method.
1276
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1277
        if (PayPal::isError($res)) {
1278
            $this->_logTransaction('DoVoid', $this->_getElapsed($start), $res);
1279
            return $res;
1280
        }
1281
 
1282
        // DoVoidReq is a ComplexType, refer to the WSDL for more info.
1283
        $DoVoidReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1284
        $DoVoidReq =& new SOAP_Value('DoVoidReq', false, $DoVoidReq, $DoVoidReq_attr);
1285
        $result = $this->call('DoVoid',
1286
                              $v = array("DoVoidReq" => $DoVoidReq),
1287
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1288
                                    'soapaction' => '',
1289
                                    'style' => 'document',
1290
                                    'use' => 'literal'));
1291
 
1292
        $response = $this->getResponseObject($result, 'DoVoidResponseType');
1293
        $this->_logTransaction('DoVoid', $this->_getElapsed($start), $response);
1294
        return $response;
1295
    }
1296
 
1297
    function &DoAuthorization($DoAuthorizationReq)
1298
    {
1299
        $start = $this->_getMicroseconds();
1300
 
1301
        // Handle type objects.
1302
        if (is_a($DoAuthorizationReq, 'XSDSimpleType')) {
1303
            $DoAuthorizationReq->setVersion(PAYPAL_WSDL_VERSION);
1304
            $DoAuthorizationReq = $DoAuthorizationReq->getSoapValue('DoAuthorizationRequest', 'urn:ebay:api:PayPalAPI');
1305
        }
1306
 
1307
        // Make sure we can find a valid WSDL endpoint for this method.
1308
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1309
        if (PayPal::isError($res)) {
1310
            $this->_logTransaction('DoAuthorization', $this->_getElapsed($start), $res);
1311
            return $res;
1312
        }
1313
 
1314
        // DoAuthorizationReq is a ComplexType, refer to the WSDL for more info.
1315
        $DoAuthorizationReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1316
        $DoAuthorizationReq =& new SOAP_Value('DoAuthorizationReq', false, $DoAuthorizationReq, $DoAuthorizationReq_attr);
1317
        $result = $this->call('DoAuthorization',
1318
                              $v = array("DoAuthorizationReq" => $DoAuthorizationReq),
1319
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1320
                                    'soapaction' => '',
1321
                                    'style' => 'document',
1322
                                    'use' => 'literal'));
1323
 
1324
        $response = $this->getResponseObject($result, 'DoAuthorizationResponseType');
1325
        $this->_logTransaction('DoAuthorization', $this->_getElapsed($start), $response);
1326
        return $response;
1327
    }
1328
 
1329
    function &SetCustomerBillingAgreement($SetCustomerBillingAgreementReq)
1330
    {
1331
        $start = $this->_getMicroseconds();
1332
 
1333
        // Handle type objects.
1334
        if (is_a($SetCustomerBillingAgreementReq, 'XSDSimpleType')) {
1335
            $SetCustomerBillingAgreementReq->setVersion(PAYPAL_WSDL_VERSION);
1336
            $SetCustomerBillingAgreementReq = $SetCustomerBillingAgreementReq->getSoapValue('SetCustomerBillingAgreementRequest', 'urn:ebay:api:PayPalAPI');
1337
        }
1338
 
1339
        // Make sure we can find a valid WSDL endpoint for this method.
1340
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1341
        if (PayPal::isError($res)) {
1342
            $this->_logTransaction('SetCustomerBillingAgreement', $this->_getElapsed($start), $res);
1343
            return $res;
1344
        }
1345
 
1346
        // SetCustomerBillingAgreementReq is a ComplexType, refer to the WSDL for more info.
1347
        $SetCustomerBillingAgreementReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1348
        $SetCustomerBillingAgreementReq =& new SOAP_Value('SetCustomerBillingAgreementReq', false, $SetCustomerBillingAgreementReq, $SetCustomerBillingAgreementReq_attr);
1349
        $result = $this->call('SetCustomerBillingAgreement',
1350
                              $v = array("SetCustomerBillingAgreementReq" => $SetCustomerBillingAgreementReq),
1351
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1352
                                    'soapaction' => '',
1353
                                    'style' => 'document',
1354
                                    'use' => 'literal'));
1355
 
1356
        $response = $this->getResponseObject($result, 'SetCustomerBillingAgreementResponseType');
1357
        $this->_logTransaction('SetCustomerBillingAgreement', $this->_getElapsed($start), $response);
1358
        return $response;
1359
    }
1360
 
1361
    function &GetBillingAgreementCustomerDetails($GetBillingAgreementCustomerDetailsReq)
1362
    {
1363
        $start = $this->_getMicroseconds();
1364
 
1365
        // Handle type objects.
1366
        if (is_a($GetBillingAgreementCustomerDetailsReq, 'XSDSimpleType')) {
1367
            $GetBillingAgreementCustomerDetailsReq->setVersion(PAYPAL_WSDL_VERSION);
1368
            $GetBillingAgreementCustomerDetailsReq = $GetBillingAgreementCustomerDetailsReq->getSoapValue('GetBillingAgreementCustomerDetailsRequest', 'urn:ebay:api:PayPalAPI');
1369
        }
1370
 
1371
        // Make sure we can find a valid WSDL endpoint for this method.
1372
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1373
        if (PayPal::isError($res)) {
1374
            $this->_logTransaction('GetBillingAgreementCustomerDetails', $this->_getElapsed($start), $res);
1375
            return $res;
1376
        }
1377
 
1378
        // GetBillingAgreementCustomerDetailsReq is a ComplexType, refer to the WSDL for more info.
1379
        $GetBillingAgreementCustomerDetailsReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1380
        $GetBillingAgreementCustomerDetailsReq =& new SOAP_Value('GetBillingAgreementCustomerDetailsReq', false, $GetBillingAgreementCustomerDetailsReq, $GetBillingAgreementCustomerDetailsReq_attr);
1381
        $result = $this->call('GetBillingAgreementCustomerDetails',
1382
                              $v = array("GetBillingAgreementCustomerDetailsReq" => $GetBillingAgreementCustomerDetailsReq),
1383
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1384
                                    'soapaction' => '',
1385
                                    'style' => 'document',
1386
                                    'use' => 'literal'));
1387
 
1388
        $response = $this->getResponseObject($result, 'GetBillingAgreementCustomerDetailsResponseType');
1389
        $this->_logTransaction('GetBillingAgreementCustomerDetails', $this->_getElapsed($start), $response);
1390
        return $response;
1391
    }
1392
 
1393
    function &CreateBillingAgreement($CreateBillingAgreementReq)
1394
    {
1395
        $start = $this->_getMicroseconds();
1396
 
1397
        // Handle type objects.
1398
        if (is_a($CreateBillingAgreementReq, 'XSDSimpleType')) {
1399
            $CreateBillingAgreementReq->setVersion(PAYPAL_WSDL_VERSION);
1400
            $CreateBillingAgreementReq = $CreateBillingAgreementReq->getSoapValue('CreateBillingAgreementRequest', 'urn:ebay:api:PayPalAPI');
1401
        }
1402
 
1403
        // Make sure we can find a valid WSDL endpoint for this method.
1404
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1405
        if (PayPal::isError($res)) {
1406
            $this->_logTransaction('CreateBillingAgreement', $this->_getElapsed($start), $res);
1407
            return $res;
1408
        }
1409
 
1410
        // CreateBillingAgreementReq is a ComplexType, refer to the WSDL for more info.
1411
        $CreateBillingAgreementReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1412
        $CreateBillingAgreementReq =& new SOAP_Value('CreateBillingAgreementReq', false, $CreateBillingAgreementReq, $CreateBillingAgreementReq_attr);
1413
        $result = $this->call('CreateBillingAgreement',
1414
                              $v = array("CreateBillingAgreementReq" => $CreateBillingAgreementReq),
1415
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1416
                                    'soapaction' => '',
1417
                                    'style' => 'document',
1418
                                    'use' => 'literal'));
1419
 
1420
        $response = $this->getResponseObject($result, 'CreateBillingAgreementResponseType');
1421
        $this->_logTransaction('CreateBillingAgreement', $this->_getElapsed($start), $response);
1422
        return $response;
1423
    }
1424
 
1425
    function &DoReferenceTransaction($DoReferenceTransactionReq)
1426
    {
1427
        $start = $this->_getMicroseconds();
1428
 
1429
        // Handle type objects.
1430
        if (is_a($DoReferenceTransactionReq, 'XSDSimpleType')) {
1431
            $DoReferenceTransactionReq->setVersion(PAYPAL_WSDL_VERSION);
1432
            $DoReferenceTransactionReq = $DoReferenceTransactionReq->getSoapValue('DoReferenceTransactionRequest', 'urn:ebay:api:PayPalAPI');
1433
        }
1434
 
1435
        // Make sure we can find a valid WSDL endpoint for this method.
1436
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1437
        if (PayPal::isError($res)) {
1438
            $this->_logTransaction('DoReferenceTransaction', $this->_getElapsed($start), $res);
1439
            return $res;
1440
        }
1441
 
1442
        // DoReferenceTransactionReq is a ComplexType, refer to the WSDL for more info.
1443
        $DoReferenceTransactionReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1444
        $DoReferenceTransactionReq =& new SOAP_Value('DoReferenceTransactionReq', false, $DoReferenceTransactionReq, $DoReferenceTransactionReq_attr);
1445
        $result = $this->call('DoReferenceTransaction',
1446
                              $v = array("DoReferenceTransactionReq" => $DoReferenceTransactionReq),
1447
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1448
                                    'soapaction' => '',
1449
                                    'style' => 'document',
1450
                                    'use' => 'literal'));
1451
 
1452
        $response = $this->getResponseObject($result, 'DoReferenceTransactionResponseType');
1453
        $this->_logTransaction('DoReferenceTransaction', $this->_getElapsed($start), $response);
1454
        return $response;
1455
    }
1456
 
1457
    function &DoNonReferencedCredit($DoNonReferencedCreditReq)
1458
    {
1459
        $start = $this->_getMicroseconds();
1460
 
1461
        // Handle type objects.
1462
        if (is_a($DoNonReferencedCreditReq, 'XSDSimpleType')) {
1463
            $DoNonReferencedCreditReq->setVersion(PAYPAL_WSDL_VERSION);
1464
            $DoNonReferencedCreditReq = $DoNonReferencedCreditReq->getSoapValue('DoNonReferencedCreditRequest', 'urn:ebay:api:PayPalAPI');
1465
        }
1466
 
1467
        // Make sure we can find a valid WSDL endpoint for this method.
1468
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1469
        if (PayPal::isError($res)) {
1470
            $this->_logTransaction('DoNonReferencedCredit', $this->_getElapsed($start), $res);
1471
            return $res;
1472
        }
1473
 
1474
        // DoNonReferencedCreditReq is a ComplexType, refer to the WSDL for more info.
1475
        $DoNonReferencedCreditReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1476
        $DoNonReferencedCreditReq =& new SOAP_Value('DoNonReferencedCreditReq', false, $DoNonReferencedCreditReq, $DoNonReferencedCreditReq_attr);
1477
        $result = $this->call('DoNonReferencedCredit',
1478
                              $v = array("DoNonReferencedCreditReq" => $DoNonReferencedCreditReq),
1479
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1480
                                    'soapaction' => '',
1481
                                    'style' => 'document',
1482
                                    'use' => 'literal'));
1483
 
1484
        $response = $this->getResponseObject($result, 'DoNonReferencedCreditResponseType');
1485
        $this->_logTransaction('DoNonReferencedCredit', $this->_getElapsed($start), $response);
1486
        return $response;
1487
    }
1488
 
1489
    function &DoUATPAuthorization($DoUATPAuthorizationReq)
1490
    {
1491
        $start = $this->_getMicroseconds();
1492
 
1493
        // Handle type objects.
1494
        if (is_a($DoUATPAuthorizationReq, 'XSDSimpleType')) {
1495
            $DoUATPAuthorizationReq->setVersion(PAYPAL_WSDL_VERSION);
1496
            $DoUATPAuthorizationReq = $DoUATPAuthorizationReq->getSoapValue('DoUATPAuthorizationRequest', 'urn:ebay:api:PayPalAPI');
1497
        }
1498
 
1499
        // Make sure we can find a valid WSDL endpoint for this method.
1500
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1501
        if (PayPal::isError($res)) {
1502
            $this->_logTransaction('DoUATPAuthorization', $this->_getElapsed($start), $res);
1503
            return $res;
1504
        }
1505
 
1506
        // DoUATPAuthorizationReq is a ComplexType, refer to the WSDL for more info.
1507
        $DoUATPAuthorizationReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1508
        $DoUATPAuthorizationReq =& new SOAP_Value('DoUATPAuthorizationReq', false, $DoUATPAuthorizationReq, $DoUATPAuthorizationReq_attr);
1509
        $result = $this->call('DoUATPAuthorization',
1510
                              $v = array("DoUATPAuthorizationReq" => $DoUATPAuthorizationReq),
1511
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1512
                                    'soapaction' => '',
1513
                                    'style' => 'document',
1514
                                    'use' => 'literal'));
1515
 
1516
        $response = $this->getResponseObject($result, 'DoUATPAuthorizationResponseType');
1517
        $this->_logTransaction('DoUATPAuthorization', $this->_getElapsed($start), $response);
1518
        return $response;
1519
    }
1520
 
1521
    function &CreateRecurringPaymentsProfile($CreateRecurringPaymentsProfileReq)
1522
    {
1523
        $start = $this->_getMicroseconds();
1524
 
1525
        // Handle type objects.
1526
        if (is_a($CreateRecurringPaymentsProfileReq, 'XSDSimpleType')) {
1527
            $CreateRecurringPaymentsProfileReq->setVersion(PAYPAL_WSDL_VERSION);
1528
            $CreateRecurringPaymentsProfileReq = $CreateRecurringPaymentsProfileReq->getSoapValue('CreateRecurringPaymentsProfileRequest', 'urn:ebay:api:PayPalAPI');
1529
        }
1530
 
1531
        // Make sure we can find a valid WSDL endpoint for this method.
1532
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1533
        if (PayPal::isError($res)) {
1534
            $this->_logTransaction('CreateRecurringPaymentsProfile', $this->_getElapsed($start), $res);
1535
            return $res;
1536
        }
1537
 
1538
        // CreateRecurringPaymentsProfileReq is a ComplexType, refer to the WSDL for more info.
1539
        $CreateRecurringPaymentsProfileReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1540
        $CreateRecurringPaymentsProfileReq =& new SOAP_Value('CreateRecurringPaymentsProfileReq', false, $CreateRecurringPaymentsProfileReq, $CreateRecurringPaymentsProfileReq_attr);
1541
        $result = $this->call('CreateRecurringPaymentsProfile',
1542
                              $v = array("CreateRecurringPaymentsProfileReq" => $CreateRecurringPaymentsProfileReq),
1543
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1544
                                    'soapaction' => '',
1545
                                    'style' => 'document',
1546
                                    'use' => 'literal'));
1547
 
1548
        $response = $this->getResponseObject($result, 'CreateRecurringPaymentsProfileResponseType');
1549
        $this->_logTransaction('CreateRecurringPaymentsProfile', $this->_getElapsed($start), $response);
1550
        return $response;
1551
    }
1552
 
1553
    function &GetRecurringPaymentsProfileDetails($GetRecurringPaymentsProfileDetailsReq)
1554
    {
1555
        $start = $this->_getMicroseconds();
1556
 
1557
        // Handle type objects.
1558
        if (is_a($GetRecurringPaymentsProfileDetailsReq, 'XSDSimpleType')) {
1559
            $GetRecurringPaymentsProfileDetailsReq->setVersion(PAYPAL_WSDL_VERSION);
1560
            $GetRecurringPaymentsProfileDetailsReq = $GetRecurringPaymentsProfileDetailsReq->getSoapValue('GetRecurringPaymentsProfileDetailsRequest', 'urn:ebay:api:PayPalAPI');
1561
        }
1562
 
1563
        // Make sure we can find a valid WSDL endpoint for this method.
1564
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1565
        if (PayPal::isError($res)) {
1566
            $this->_logTransaction('GetRecurringPaymentsProfileDetails', $this->_getElapsed($start), $res);
1567
            return $res;
1568
        }
1569
 
1570
        // GetRecurringPaymentsProfileDetailsReq is a ComplexType, refer to the WSDL for more info.
1571
        $GetRecurringPaymentsProfileDetailsReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1572
        $GetRecurringPaymentsProfileDetailsReq =& new SOAP_Value('GetRecurringPaymentsProfileDetailsReq', false, $GetRecurringPaymentsProfileDetailsReq, $GetRecurringPaymentsProfileDetailsReq_attr);
1573
        $result = $this->call('GetRecurringPaymentsProfileDetails',
1574
                              $v = array("GetRecurringPaymentsProfileDetailsReq" => $GetRecurringPaymentsProfileDetailsReq),
1575
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1576
                                    'soapaction' => '',
1577
                                    'style' => 'document',
1578
                                    'use' => 'literal'));
1579
 
1580
        $response = $this->getResponseObject($result, 'GetRecurringPaymentsProfileDetailsResponseType');
1581
        $this->_logTransaction('GetRecurringPaymentsProfileDetails', $this->_getElapsed($start), $response);
1582
        return $response;
1583
    }
1584
 
1585
    function &ManageRecurringPaymentsProfileStatus($ManageRecurringPaymentsProfileStatusReq)
1586
    {
1587
        $start = $this->_getMicroseconds();
1588
 
1589
        // Handle type objects.
1590
        if (is_a($ManageRecurringPaymentsProfileStatusReq, 'XSDSimpleType')) {
1591
            $ManageRecurringPaymentsProfileStatusReq->setVersion(PAYPAL_WSDL_VERSION);
1592
            $ManageRecurringPaymentsProfileStatusReq = $ManageRecurringPaymentsProfileStatusReq->getSoapValue('ManageRecurringPaymentsProfileStatusRequest', 'urn:ebay:api:PayPalAPI');
1593
        }
1594
 
1595
        // Make sure we can find a valid WSDL endpoint for this method.
1596
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1597
        if (PayPal::isError($res)) {
1598
            $this->_logTransaction('ManageRecurringPaymentsProfileStatus', $this->_getElapsed($start), $res);
1599
            return $res;
1600
        }
1601
 
1602
        // ManageRecurringPaymentsProfileStatusReq is a ComplexType, refer to the WSDL for more info.
1603
        $ManageRecurringPaymentsProfileStatusReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1604
        $ManageRecurringPaymentsProfileStatusReq =& new SOAP_Value('ManageRecurringPaymentsProfileStatusReq', false, $ManageRecurringPaymentsProfileStatusReq, $ManageRecurringPaymentsProfileStatusReq_attr);
1605
        $result = $this->call('ManageRecurringPaymentsProfileStatus',
1606
                              $v = array("ManageRecurringPaymentsProfileStatusReq" => $ManageRecurringPaymentsProfileStatusReq),
1607
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1608
                                    'soapaction' => '',
1609
                                    'style' => 'document',
1610
                                    'use' => 'literal'));
1611
 
1612
        $response = $this->getResponseObject($result, 'ManageRecurringPaymentsProfileStatusResponseType');
1613
        $this->_logTransaction('ManageRecurringPaymentsProfileStatus', $this->_getElapsed($start), $response);
1614
        return $response;
1615
    }
1616
 
1617
    function &BillOutstandingAmount($BillOutstandingAmountReq)
1618
    {
1619
        $start = $this->_getMicroseconds();
1620
 
1621
        // Handle type objects.
1622
        if (is_a($BillOutstandingAmountReq, 'XSDSimpleType')) {
1623
            $BillOutstandingAmountReq->setVersion(PAYPAL_WSDL_VERSION);
1624
            $BillOutstandingAmountReq = $BillOutstandingAmountReq->getSoapValue('BillOutstandingAmountRequest', 'urn:ebay:api:PayPalAPI');
1625
        }
1626
 
1627
        // Make sure we can find a valid WSDL endpoint for this method.
1628
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1629
        if (PayPal::isError($res)) {
1630
            $this->_logTransaction('BillOutstandingAmount', $this->_getElapsed($start), $res);
1631
            return $res;
1632
        }
1633
 
1634
        // BillOutstandingAmountReq is a ComplexType, refer to the WSDL for more info.
1635
        $BillOutstandingAmountReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1636
        $BillOutstandingAmountReq =& new SOAP_Value('BillOutstandingAmountReq', false, $BillOutstandingAmountReq, $BillOutstandingAmountReq_attr);
1637
        $result = $this->call('BillOutstandingAmount',
1638
                              $v = array("BillOutstandingAmountReq" => $BillOutstandingAmountReq),
1639
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1640
                                    'soapaction' => '',
1641
                                    'style' => 'document',
1642
                                    'use' => 'literal'));
1643
 
1644
        $response = $this->getResponseObject($result, 'BillOutstandingAmountResponseType');
1645
        $this->_logTransaction('BillOutstandingAmount', $this->_getElapsed($start), $response);
1646
        return $response;
1647
    }
1648
 
1649
    function &UpdateRecurringPaymentsProfile($UpdateRecurringPaymentsProfileReq)
1650
    {
1651
        $start = $this->_getMicroseconds();
1652
 
1653
        // Handle type objects.
1654
        if (is_a($UpdateRecurringPaymentsProfileReq, 'XSDSimpleType')) {
1655
            $UpdateRecurringPaymentsProfileReq->setVersion(PAYPAL_WSDL_VERSION);
1656
            $UpdateRecurringPaymentsProfileReq = $UpdateRecurringPaymentsProfileReq->getSoapValue('UpdateRecurringPaymentsProfileRequest', 'urn:ebay:api:PayPalAPI');
1657
        }
1658
 
1659
        // Make sure we can find a valid WSDL endpoint for this method.
1660
        $res = $this->setEndpoint('PayPalAPIAA', PAYPAL_WSDL_VERSION);
1661
        if (PayPal::isError($res)) {
1662
            $this->_logTransaction('UpdateRecurringPaymentsProfile', $this->_getElapsed($start), $res);
1663
            return $res;
1664
        }
1665
 
1666
        // UpdateRecurringPaymentsProfileReq is a ComplexType, refer to the WSDL for more info.
1667
        $UpdateRecurringPaymentsProfileReq_attr['xmlns'] = 'urn:ebay:api:PayPalAPI';
1668
        $UpdateRecurringPaymentsProfileReq =& new SOAP_Value('UpdateRecurringPaymentsProfileReq', false, $UpdateRecurringPaymentsProfileReq, $UpdateRecurringPaymentsProfileReq_attr);
1669
        $result = $this->call('UpdateRecurringPaymentsProfile',
1670
                              $v = array("UpdateRecurringPaymentsProfileReq" => $UpdateRecurringPaymentsProfileReq),
1671
                              array('namespace' => 'urn:ebay:api:PayPalAPI',
1672
                                    'soapaction' => '',
1673
                                    'style' => 'document',
1674
                                    'use' => 'literal'));
1675
 
1676
        $response = $this->getResponseObject($result, 'UpdateRecurringPaymentsProfileResponseType');
1677
        $this->_logTransaction('UpdateRecurringPaymentsProfile', $this->_getElapsed($start), $response);
1678
        return $response;
1679
    }
1680
}