diff --git a/sample/bootstrap.php b/sample/bootstrap.php index d930b4f..eb9fed9 100644 --- a/sample/bootstrap.php +++ b/sample/bootstrap.php @@ -5,10 +5,12 @@ // Include the composer autoloader if(!file_exists(__DIR__ .'/vendor/autoload.php')) { - echo "The 'vendor' folder is missing. You must run 'composer update' to resolve application dependencies.\nPlease see the README for more information.\n"; + echo "The 'vendor' folder is missing. You must run 'composer update --no-dev' to resolve application dependencies.\nPlease see the README for more information.\n"; exit(1); } require __DIR__ . '/vendor/autoload.php'; +require __DIR__ . '/common.php'; + define("PP_CONFIG_PATH", __DIR__); use PayPal\Rest\ApiContext; @@ -36,24 +38,3 @@ $apiContext->setConfig(array( */ -/** - * ### getBaseUrl function - * // utility function that returns base url for - * // determining return/cancel urls - * @return string - */ -function getBaseUrl() { - - $protocol = 'http'; - if ($_SERVER['SERVER_PORT'] == 443 || (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on')) { - $protocol .= 's'; - $protocol_port = $_SERVER['SERVER_PORT']; - } else { - $protocol_port = 80; - } - - $host = $_SERVER['HTTP_HOST']; - $port = $_SERVER['SERVER_PORT']; - $request = $_SERVER['PHP_SELF']; - return dirname($protocol . '://' . $host . ($port == $protocol_port ? '' : ':' . $port) . $request); -} diff --git a/sample/common.php b/sample/common.php new file mode 100644 index 0000000..a75d79c --- /dev/null +++ b/sample/common.php @@ -0,0 +1,91 @@ +setLine1("3909 Witmer Road") + ->setLine2("Niagara Falls") + ->setCity("Niagara Falls") + ->setState("NY") + ->setPostalCode("14305") + ->setCountryCode("US") + ->setPhone("716-298-1822"); + + $card = new CreditCard(); + $card->setType("visa") + ->setNumber("4417119669820331") + ->setExpireMonth("11") + ->setExpireYear("2019") + ->setCvv2("012") + ->setFirstName("Joe") + ->setLastName("Shopper") + ->setBillingAddress($addr); + + $fi = new FundingInstrument(); + $fi->setCreditCard($card); + + $payer = new Payer(); + $payer->setPaymentMethod("credit_card") + ->setFundingInstruments(array($fi)); + + $amount = new Amount(); + $amount->setCurrency("USD") + ->setTotal("1.00"); + + $transaction = new Transaction(); + $transaction->setAmount($amount) + ->setDescription("Payment description."); + + $payment = new Payment(); + + // Setting intent to authorize creates a payment + // authorization. Setting it to sale creates actual payment + $payment->setIntent("authorize") + ->setPayer($payer) + ->setTransactions(array($transaction)); + + $paymnt = $payment->create($apiContext); + $resArray = $paymnt->toArray(); + + return $authId = $resArray['transactions'][0]['related_resources'][0]['authorization']['id']; +} diff --git a/sample/index.html b/sample/index.html index 648cf4d..c191506 100644 --- a/sample/index.html +++ b/sample/index.html @@ -13,124 +13,109 @@ .source { background: url('images/edt-format-source-button.png') no-repeat left top; } + .header { + font-weight: bold; + } + .header td { + padding: 10px 0px 10px 0px; + }

PayPal REST API Samples

-

+ + + - - + - - - - + - - - - + + + + + - - - - + - - - + - - - + - + + + - - - - - - + + + + + + + + + - - - + - - - + - - - + - - - + - - - + - - - - - - - -
Payments
Payment with a credit cardDirect credit card payments Execute Source
Payment with a PayPal AccountPayPal account payments Execute Source
Get Payment DetailsStored credit card paymentsExecuteSource
Get payment details Execute Source
Get Payment HistoryGet payment history Execute Source
Get Sale DetailsGet sale details Execute Source
Refund a PaymentRefund a payment Execute Source
Vault
Save a credit card Execute Source
Retrieve saved credit card Execute Source
Get Details of Authorized PaymentDelete saved credit cardExecuteSource
Authorization and capture
Get details of an authorized payment Execute Source
Capture Authorized PaymentCapture an authorized payment Execute Source
Void Authorized PaymentVoid an authorized payment Execute Source
Reauthorize a PaymentReauthorize a payment Execute Source
Get Details of Captured PaymentGet details of a captured payment Execute Source
Refund Captured PaymentRefund captured payment Execute Source
Delete saved CreditCardExecuteSource
- \ No newline at end of file + diff --git a/sample/payments/AuthorizationCapture.php b/sample/payments/AuthorizationCapture.php index 6b064b9..0bfce9e 100644 --- a/sample/payments/AuthorizationCapture.php +++ b/sample/payments/AuthorizationCapture.php @@ -1,40 +1,37 @@ capture method +// with a valid ApiContext (See bootstrap.php for more on `ApiContext`) try { - // create payment to get authorization Id + // Create a new authorization to get authorization Id + // createAuthorization defined in common.php $authId = createAuthorization($apiContext); $amt = new Amount(); - $amt->setCurrency("USD"); - $amt->setTotal("1.00"); + $amt->setCurrency("USD") + ->setTotal("1.00"); ### Capture $capture = new Capture(); - $capture->setId($authId); - $capture->setAmount($amt); + $capture->setId($authId) + ->setAmount($amt); - // get the authorization + // Lookup the authorization. $authorization = Authorization::get($authId, $apiContext); + // Perform a capture $getCapture = $authorization->capture($capture, $apiContext); } catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; @@ -43,61 +40,15 @@ try { } ?> + + Capturing an authorization +
- Capture payment: + Captured payment getParentPayment(); ?>. Capture Id: getId();?>
-
-		toArray());?>
-	
+
toArray());?>
Back -setLine1("3909 Witmer Road"); - $addr->setLine2("Niagara Falls"); - $addr->setCity("Niagara Falls"); - $addr->setState("NY"); - $addr->setPostal_code("14305"); - $addr->setCountry_code("US"); - $addr->setPhone("716-298-1822"); - - $card = new CreditCard(); - $card->setType("visa"); - $card->setNumber("4417119669820331"); - $card->setExpire_month("11"); - $card->setExpire_year("2019"); - $card->setCvv2("012"); - $card->setFirst_name("Joe"); - $card->setLast_name("Shopper"); - $card->setBilling_address($addr); - - $fi = new FundingInstrument(); - $fi->setCredit_card($card); - - $payer = new Payer(); - $payer->setPayment_method("credit_card"); - $payer->setFunding_instruments(array($fi)); - - $amount = new Amount(); - $amount->setCurrency("USD"); - $amount->setTotal("1.00"); - - $transaction = new Transaction(); - $transaction->setAmount($amount); - $transaction->setDescription("This is the payment description."); - - $payment = new Payment(); - $payment->setIntent("authorize"); - $payment->setPayer($payer); - $payment->setTransactions(array($transaction)); - - $paymnt = $payment->create($apiContext); - $resArray = $paymnt->toArray(); - - return $authId = $resArray['transactions'][0]['related_resources'][0]['authorization']['id']; -} diff --git a/sample/payments/CreatePayment.php b/sample/payments/CreatePayment.php index 7c34bb8..ccbfa76 100644 --- a/sample/payments/CreatePayment.php +++ b/sample/payments/CreatePayment.php @@ -1,8 +1,11 @@ setLine1("3909 Witmer Road"); -$addr->setLine2("Niagara Falls"); -$addr->setCity("Niagara Falls"); -$addr->setState("NY"); -$addr->setPostal_code("14305"); -$addr->setCountry_code("US"); -$addr->setPhone("716-298-1822"); +$addr->setLine1("3909 Witmer Road") + ->setLine2("Niagara Falls") + ->setCity("Niagara Falls") + ->setState("NY") + ->setPostalCode("14305") + ->setCountryCode("US") + ->setPhone("716-298-1822"); // ### CreditCard // A resource representing a credit card that can be // used to fund a payment. $card = new CreditCard(); -$card->setType("visa"); -$card->setNumber("4417119669820331"); -$card->setExpire_month("11"); -$card->setExpire_year("2019"); -$card->setCvv2("012"); -$card->setFirst_name("Joe"); -$card->setLast_name("Shopper"); -$card->setBilling_address($addr); +$card->setType("visa") + ->setNumber("4417119669820331") + ->setExpireMonth("11") + ->setExpireYear("2019") + ->setCvv2("012") + ->setFirstName("Joe") + ->setLastName("Shopper") + ->setBillingAddress($addr); // ### FundingInstrument // A resource representing a Payer's funding instrument. -// Use a Payer ID (A unique identifier of the payer generated -// and provided by the facilitator. This is required when -// creating or using a tokenized funding instrument) -// and the `CreditCardDetails` +// For direct credit card payments, set the CreditCard +// field on this object. $fi = new FundingInstrument(); -$fi->setCredit_card($card); +$fi->setCreditCard($card); // ### Payer // A resource representing a Payer that funds a payment -// Use the List of `FundingInstrument` and the Payment Method -// as 'credit_card' +// For direct credit card payments, set payment method +// to 'credit_card' and add an array of funding instruments. $payer = new Payer(); -$payer->setPayment_method("credit_card"); -$payer->setFunding_instruments(array($fi)); +$payer->setPaymentMethod("credit_card") + ->setFundingInstruments(array($fi)); // ### Amount -// Let's you specify a payment amount. +// Lets you specify a payment amount. +// You can also specify additional details +// such as shipping, tax. $amount = new Amount(); -$amount->setCurrency("USD"); -$amount->setTotal("1.00"); +$amount->setCurrency("USD") + ->setTotal("1.00"); // ### Transaction // A transaction defines the contract of a // payment - what is the payment for and who -// is fulfilling it. Transaction is created with -// a `Payee` and `Amount` types +// is fulfilling it. $transaction = new Transaction(); -$transaction->setAmount($amount); -$transaction->setDescription("This is the payment description."); +$transaction->setAmount($amount) + ->setDescription("Payment description"); // ### Payment // A Payment Resource; create one using -// the above types and intent as 'sale' +// the above types and intent set to sale 'sale' $payment = new Payment(); -$payment->setIntent("sale"); -$payment->setPayer($payer); -$payment->setTransactions(array($transaction)); - - +$payment->setIntent("sale") + ->setPayer($payer) + ->setTransactions(array($transaction)); // ### Create Payment // Create a payment by posting to the APIService // using a valid ApiContext (See bootstrap.php for more on `ApiContext`) -// The return object contains the status; +// The return object contains the state. try { $payment->create($apiContext); } catch (PayPal\Exception\PPConnectionException $ex) { @@ -94,6 +93,9 @@ try { } ?> + + Direct Credit card payments +
Created payment: diff --git a/sample/payments/CreatePaymentUsingPayPal.php b/sample/payments/CreatePaymentUsingPayPal.php index 0f4163c..4de5273 100644 --- a/sample/payments/CreatePaymentUsingPayPal.php +++ b/sample/payments/CreatePaymentUsingPayPal.php @@ -6,59 +6,58 @@ // API used: /v1/payments/payment require __DIR__ . '/../bootstrap.php'; -use PayPal\Api\Address; use PayPal\Api\Amount; use PayPal\Api\Payer; use PayPal\Api\Payment; -use PayPal\Api\FundingInstrument; use PayPal\Api\RedirectUrls; use PayPal\Api\Transaction; session_start(); // ### Payer // A resource representing a Payer that funds a payment -// Use the List of `FundingInstrument` and the Payment Method -// as 'credit_card' +// For paypal account payments, set payment method +// to 'paypal'. $payer = new Payer(); -$payer->setPayment_method("paypal"); +$payer->setPaymentMethod("paypal"); // ### Amount -// Let's you specify a payment amount. +// Lets you specify a payment amount. +// You can also specify additional details +// such as shipping, tax. $amount = new Amount(); -$amount->setCurrency("USD"); -$amount->setTotal("1.00"); +$amount->setCurrency("USD") + ->setTotal("1.00"); // ### Transaction // A transaction defines the contract of a // payment - what is the payment for and who -// is fulfilling it. Transaction is created with -// a `Payee` and `Amount` types +// is fulfilling it. $transaction = new Transaction(); -$transaction->setAmount($amount); -$transaction->setDescription("This is the payment description."); +$transaction->setAmount($amount) + ->setDescription("Payment description"); // ### Redirect urls // Set the urls that the buyer must be redirected to after // payment approval/ cancellation. $baseUrl = getBaseUrl(); $redirectUrls = new RedirectUrls(); -$redirectUrls->setReturn_url("$baseUrl/ExecutePayment.php?success=true"); -$redirectUrls->setCancel_url("$baseUrl/ExecutePayment.php?success=false"); +$redirectUrls->setReturnUrl("$baseUrl/ExecutePayment.php?success=true") + ->setCancelUrl("$baseUrl/ExecutePayment.php?success=false"); // ### Payment // A Payment Resource; create one using -// the above types and intent as 'sale' +// the above types and intent set to 'sale' $payment = new Payment(); -$payment->setIntent("sale"); -$payment->setPayer($payer); -$payment->setRedirect_urls($redirectUrls); -$payment->setTransactions(array($transaction)); +$payment->setIntent("sale") + ->setPayer($payer) + ->setRedirectUrls($redirectUrls) + ->setTransactions(array($transaction)); // ### Create Payment -// Create a payment by posting to the APIService -// using a valid apiContext. +// Create a payment by calling the 'create' method +// passing it a valid apiContext. // (See bootstrap.php for more on `ApiContext`) -// The return object contains the status and the +// The return object contains the state and the // url to which the buyer must be redirected to // for payment approval try { @@ -69,16 +68,25 @@ try { exit(1); } -// ### Redirect buyer to paypal -// Retrieve buyer approval url from the `payment` object. +// ### Get redirect url +// The API response provides the url that you must redirect +// the buyer to. Retrieve the url from the $payment->getLinks() +// method foreach($payment->getLinks() as $link) { if($link->getRel() == 'approval_url') { $redirectUrl = $link->getHref(); + break; } } + +// ### Redirect buyer to PayPal website +// Save payment id so that you can 'complete' the payment +// once the buyer approves the payment and is redirected +// bacl to your website. +// // It is not really a great idea to store the payment id -// in the session. In a real world app, please store the -// payment id in a database. +// in the session. In a real world app, you may want to +// store the payment id in a database. $_SESSION['paymentId'] = $payment->getId(); if(isset($redirectUrl)) { header("Location: $redirectUrl"); diff --git a/sample/payments/CreatePaymentUsingSavedCard.php b/sample/payments/CreatePaymentUsingSavedCard.php index 18fa312..ed40229 100644 --- a/sample/payments/CreatePaymentUsingSavedCard.php +++ b/sample/payments/CreatePaymentUsingSavedCard.php @@ -2,81 +2,79 @@ // # Create payment using a saved credit card // This sample code demonstrates how you can process a -// Payment using a previously saved credit card. +// Payment using a previously stored credit card token. // API used: /v1/payments/payment require __DIR__ . '/../bootstrap.php'; -use PayPal\Api\Address; use PayPal\Api\Amount; -use PayPal\Api\CreditCard; use PayPal\Api\CreditCardToken; use PayPal\Api\Payer; use PayPal\Api\Payment; use PayPal\Api\FundingInstrument; -use PayPal\Api\RedirectUrls; use PayPal\Api\Transaction; -use PayPal\Auth\OAuthTokenCredential; // ### Credit card token // Saved credit card id from a previous call to // CreateCreditCard.php -$creditCardId = 'CARD-5BT058015C739554AKE2GCEI'; $creditCardToken = new CreditCardToken(); -$creditCardToken->setCredit_card_id($creditCardId); +$creditCardToken->setCreditCardId('CARD-29H07236G1554552FKINPBHQ'); // ### FundingInstrument // A resource representing a Payer's funding instrument. -// Use a Payer ID (A unique identifier of the payer generated -// and provided by the facilitator. This is required when -// creating or using a tokenized funding instrument) -// and the `CreditCardDetails` +// For stored credit card payments, set the CreditCardToken +// field on this object. $fi = new FundingInstrument(); -$fi->setCredit_card_token($creditCardToken); +$fi->setCreditCardToken($creditCardToken); // ### Payer // A resource representing a Payer that funds a payment -// Use the List of `FundingInstrument` and the Payment Method -// as 'credit_card' +// For stored credit card payments, set payment method +// to 'credit_card'. $payer = new Payer(); -$payer->setPayment_method("credit_card"); -$payer->setFunding_instruments(array($fi)); +$payer->setPaymentMethod("credit_card") + ->setFundingInstruments(array($fi)); // ### Amount -// Let's you specify a payment amount. +// Lets you specify a payment amount. +// You can also specify additional details +// such as shipping, tax. $amount = new Amount(); -$amount->setCurrency("USD"); -$amount->setTotal("1.00"); +$amount->setCurrency("USD") + ->setTotal("1.00"); // ### Transaction // A transaction defines the contract of a // payment - what is the payment for and who -// is fulfilling it. Transaction is created with -// a `Payee` and `Amount` types +// is fulfilling it. $transaction = new Transaction(); -$transaction->setAmount($amount); -$transaction->setDescription("This is the payment description."); +$transaction->setAmount($amount) + ->setDescription("Payment description"); // ### Payment // A Payment Resource; create one using -// the above types and intent as 'sale' +// the above types and intent set to 'sale' $payment = new Payment(); -$payment->setIntent("sale"); -$payment->setPayer($payer); -$payment->setTransactions(array($transaction)); +$payment->setIntent("sale") + ->setPayer($payer) + ->setTransactions(array($transaction)); // ###Create Payment -// Create a payment by posting to the APIService +// Create a payment by calling the 'create' method +// passing it a valid apiContext. // (See bootstrap.php for more on `ApiContext`) -// The return object contains the status; +// The return object contains the state. try { $payment->create($apiContext); -} catch (PayPal\ExceptionPayPal\Exception\PPConnectionException $ex) { +} catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); exit(1); } ?> + + Saved Credit card payments +
Created payment: diff --git a/sample/payments/ExecutePayment.php b/sample/payments/ExecutePayment.php index 6827c99..ca87360 100644 --- a/sample/payments/ExecutePayment.php +++ b/sample/payments/ExecutePayment.php @@ -25,7 +25,7 @@ if(isset($_GET['success']) && $_GET['success'] == 'true') { // The payer_id is added to the request query parameters // when the user is redirected from paypal back to your site $execution = new PaymentExecution(); - $execution->setPayer_id($_GET['PayerID']); + $execution->setPayerId($_GET['PayerID']); //Execute the payment // (See bootstrap.php for more on `ApiContext`) @@ -37,4 +37,4 @@ if(isset($_GET['success']) && $_GET['success'] == 'true') { } else { echo "User cancelled payment."; -} \ No newline at end of file +} diff --git a/sample/payments/GetAuthorization.php b/sample/payments/GetAuthorization.php index 18a8a88..2caeb8b 100644 --- a/sample/payments/GetAuthorization.php +++ b/sample/payments/GetAuthorization.php @@ -1,28 +1,26 @@ require __DIR__ . '/../bootstrap.php'; use PayPal\Api\Authorization; -use PayPal\Api\Address; -use PayPal\Api\Amount; -use PayPal\Api\CreditCard; -use PayPal\Api\Payer; -use PayPal\Api\Payment; -use PayPal\Api\FundingInstrument; -use PayPal\Api\Transaction; // ### GetAuthorization -// GetAuthorization by posting to the APIService -// using a valid ApiContext (See bootstrap.php for more on `ApiContext`) -// The return object contains the status; +// You can retrieve info about an Authorization +// by invoking the Authorization::get method +// with a valid ApiContext (See bootstrap.php for more on `ApiContext`) +// The return object contains the authorization state. + try { - // create payment to get authorization Id + // create a authorization to get authorization Id + // createAuthorization is defined in common.php $authId = createAuthorization($apiContext); + // Retrieve the authorization $authorization = Authorization::get($authId, $apiContext); } catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; @@ -31,59 +29,15 @@ try { } ?> + + Lookup an authorization +
- Get Authorization: + Retrieved Authorization: getId();?>
toArray());?>
Back -setLine1("3909 Witmer Road"); - $addr->setLine2("Niagara Falls"); - $addr->setCity("Niagara Falls"); - $addr->setState("NY"); - $addr->setPostal_code("14305"); - $addr->setCountry_code("US"); - $addr->setPhone("716-298-1822"); - - $card = new CreditCard(); - $card->setType("visa"); - $card->setNumber("4417119669820331"); - $card->setExpire_month("11"); - $card->setExpire_year("2019"); - $card->setCvv2("012"); - $card->setFirst_name("Joe"); - $card->setLast_name("Shopper"); - $card->setBilling_address($addr); - - $fi = new FundingInstrument(); - $fi->setCredit_card($card); - - $payer = new Payer(); - $payer->setPayment_method("credit_card"); - $payer->setFunding_instruments(array($fi)); - - $amount = new Amount(); - $amount->setCurrency("USD"); - $amount->setTotal("1.00"); - - $transaction = new Transaction(); - $transaction->setAmount($amount); - $transaction->setDescription("This is the payment description."); - - $payment = new Payment(); - $payment->setIntent("authorize"); - $payment->setPayer($payer); - $payment->setTransactions(array($transaction)); - - $paymnt = $payment->create($apiContext); - $resArray = $paymnt->toArray(); - - return $authId = $resArray['transactions'][0]['related_resources'][0]['authorization']['id']; -} diff --git a/sample/payments/GetCapture.php b/sample/payments/GetCapture.php index 194de6c..288dda6 100644 --- a/sample/payments/GetCapture.php +++ b/sample/payments/GetCapture.php @@ -1,52 +1,48 @@ require __DIR__ . '/../bootstrap.php'; + use PayPal\Api\Capture; -use PayPal\Api\Address; use PayPal\Api\Amount; -use PayPal\Api\CreditCard; -use PayPal\Api\Payer; -use PayPal\Api\Payment; -use PayPal\Api\FundingInstrument; -use PayPal\Api\Transaction; use PayPal\Api\Authorization; -// ### Capture Payment -// Capture Payment by posting to the APIService -// using a valid ApiContext (See bootstrap.php for more on `ApiContext`) -// The return object contains the status; +// ### Create a mock Capture try { - // create payment to get authorization Id + // create a mock authorization to get authorization Id + // createAuthorization is defined in common.php $authId = createAuthorization($apiContext); - $amt = new Amount(); - $amt->setCurrency("USD"); - $amt->setTotal("1.00"); + + // Lookup the authorization + $authorization = Authorization::get($authId, $apiContext); ### Capture - $captur = new Capture(); - $captur->setId($authId); - $captur->setAmount($amt); - - // get the authorization - $authorization = Authorization::get($authId, $apiContext); - $capt = $authorization->capture($captur, $apiContext); + $amt = new Amount(); + $amt->setCurrency("USD") + ->setTotal("1.00"); + + // Create a capture + $captureInfo = new Capture(); + $captureInfo->setId($authId) + ->setAmount($amt); + + $capture = $authorization->capture($captureInfo, $apiContext); } catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); exit(1); } -// ### Get Capture -// Get Capture by posting to the APIService -// using a valid ApiContext (See bootstrap.php for more on `ApiContext`) -// The return object contains the status; +// ### Retrieve Capture details +// You can look up a capture by invoking the Capture::get method +// with a valid ApiContext (See bootstrap.php for more on `ApiContext`) try { - $capture = Capture::get($capt->getId(), $apiContext); + $capture = Capture::get($capture->getId(), $apiContext); } catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); @@ -54,59 +50,15 @@ try { } ?> + + Lookup a capture +
- Get Capture : + Capture Id: getId();?>
toArray());?>
Back -setLine1("3909 Witmer Road"); - $addr->setLine2("Niagara Falls"); - $addr->setCity("Niagara Falls"); - $addr->setState("NY"); - $addr->setPostal_code("14305"); - $addr->setCountry_code("US"); - $addr->setPhone("716-298-1822"); - - $card = new CreditCard(); - $card->setType("visa"); - $card->setNumber("4417119669820331"); - $card->setExpire_month("11"); - $card->setExpire_year("2019"); - $card->setCvv2("012"); - $card->setFirst_name("Joe"); - $card->setLast_name("Shopper"); - $card->setBilling_address($addr); - - $fi = new FundingInstrument(); - $fi->setCredit_card($card); - - $payer = new Payer(); - $payer->setPayment_method("credit_card"); - $payer->setFunding_instruments(array($fi)); - - $amount = new Amount(); - $amount->setCurrency("USD"); - $amount->setTotal("1.00"); - - $transaction = new Transaction(); - $transaction->setAmount($amount); - $transaction->setDescription("This is the payment description."); - - $payment = new Payment(); - $payment->setIntent("authorize"); - $payment->setPayer($payer); - $payment->setTransactions(array($transaction)); - - $paymnt = $payment->create($apiContext); - $resArray = $paymnt->toArray(); - - return $authId = $resArray['transactions'][0]['related_resources'][0]['authorization']['id']; -} diff --git a/sample/payments/GetPayment.php b/sample/payments/GetPayment.php index 2863af9..91d90c0 100644 --- a/sample/payments/GetPayment.php +++ b/sample/payments/GetPayment.php @@ -28,6 +28,9 @@ try { } ?> + + Lookup a payment +
Retrieving Payment ID:
toArray());?>
diff --git a/sample/payments/ListPayments.php b/sample/payments/ListPayments.php index ce60abd..6b19b3e 100644 --- a/sample/payments/ListPayments.php +++ b/sample/payments/ListPayments.php @@ -29,6 +29,9 @@ try { } ?> + + Lookup payment history +
Got getCount(); ?> matching payments
toArray());?>
diff --git a/sample/payments/Reauthorization.php b/sample/payments/Reauthorization.php index 8e5f004..7fc500c 100644 --- a/sample/payments/Reauthorization.php +++ b/sample/payments/Reauthorization.php @@ -1,37 +1,46 @@ setCurrency("USD"); $amount->setTotal("1.00"); + // ### Reauthorize with amount being reauthorized $authorization->setAmount($amount); - $reauthorization = $authorization->reauthorize($apiContext); -}catch (PayPal\Exception\PPConnectionException $ex){ +} catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); exit(1); } ?> + + Reauthorize a payment +
- Reauthorize: + Reauthorization Id: getId();?>
diff --git a/sample/payments/RefundCapture.php b/sample/payments/RefundCapture.php
index 7988a5f..7c234a3 100644
--- a/sample/payments/RefundCapture.php
+++ b/sample/payments/RefundCapture.php
@@ -1,44 +1,37 @@
 }/refund
+
 require __DIR__ . '/../bootstrap.php';
+
 use PayPal\Api\Authorization;
 use PayPal\Api\Capture;
 use PayPal\Api\Refund;
-use PayPal\Api\Address;
 use PayPal\Api\Amount;
-use PayPal\Api\CreditCard;
-use PayPal\Api\Payer;
-use PayPal\Api\Payment;
-use PayPal\Api\FundingInstrument;
-use PayPal\Api\Transaction;
 use PayPal\Rest\ApiContext;
-use PayPal\Auth\OAuthTokenCredential;
 
 
-// ### Capture Payment
-// Capture Payment by posting to the APIService
-// using a valid ApiContext (See bootstrap.php for more on `ApiContext`)
-// The return object contains the status;
 try {
-	// create payment to get authorization Id
+	// Create a mock authorization to get authorization Id
 	$authId = createAuthorization($apiContext);
 
-	$amt = new Amount();
-	$amt->setCurrency("USD");
-	$amt->setTotal("1.00");
-
-	### Capture
-	$captur = new Capture();
-	$captur->setAmount($amt);
-
-	// get the authorization
+	// Get the authorization
 	$authorization = Authorization::get($authId, $apiContext);
 	
-	$capt = $authorization->capture($captur, $apiContext);
+	
+	// ### Capture
+	
+	$amt = new Amount();
+	$amt->setCurrency("USD")
+		->setTotal("1.00");
+	
+	// Create a capture
+	$captureInfo = new Capture();
+	$captureInfo->setAmount($amt);
+
+	$capture = $authorization->capture($captureInfo, $apiContext);
 } catch (PayPal\Exception\PPConnectionException $ex) {
 	echo "Exception: " . $ex->getMessage() . PHP_EOL;
 	var_dump($ex->getData());
@@ -47,19 +40,16 @@ try {
 
 // ### Refund
 // Create a refund object indicating
-// refund amount
-
+// refund amount and call the refund method
 
 $refund = new Refund();
 $refund->setAmount($amt);
 
-
 try {
-	$capture = Capture::get($capt->getId(), $apiContext);
-
 	// Create a new apiContext object so we send a new
 	// PayPal-Request-Id (idempotency) header for this resource
 	$apiContext = new ApiContext($apiContext->getCredential());
+
 	$captureRefund = $capture->refund($refund, $apiContext);
 } catch (PayPal\Exception\PPConnectionException $ex) {
 	echo "Exception: " . $ex->getMessage() . PHP_EOL;
@@ -69,56 +59,12 @@ try {
 ?>
 
 
+
+	Refund a captured payment
+
 
 	
Refund Capture:
Back -setLine1("3909 Witmer Road"); - $addr->setLine2("Niagara Falls"); - $addr->setCity("Niagara Falls"); - $addr->setState("NY"); - $addr->setPostal_code("14305"); - $addr->setCountry_code("US"); - $addr->setPhone("716-298-1822"); - - $card = new CreditCard(); - $card->setType("visa"); - $card->setNumber("4417119669820331"); - $card->setExpire_month("11"); - $card->setExpire_year("2019"); - $card->setCvv2("012"); - $card->setFirst_name("Joe"); - $card->setLast_name("Shopper"); - $card->setBilling_address($addr); - - $fi = new FundingInstrument(); - $fi->setCredit_card($card); - - $payer = new Payer(); - $payer->setPayment_method("credit_card"); - $payer->setFunding_instruments(array($fi)); - - $amount = new Amount(); - $amount->setCurrency("USD"); - $amount->setTotal("10.00"); - - $transaction = new Transaction(); - $transaction->setAmount($amount); - $transaction->setDescription("This is the payment description."); - - $payment = new Payment(); - $payment->setIntent("authorize"); - $payment->setPayer($payer); - $payment->setTransactions(array($transaction)); - - $paymnt = $payment->create($apiContext); - $resArray = $paymnt->toArray(); - - return $authId = $resArray['transactions'][0]['related_resources'][0]['authorization']['id']; -} diff --git a/sample/payments/VoidAuthorization.php b/sample/payments/VoidAuthorization.php index c5e07e3..e1c3f74 100644 --- a/sample/payments/VoidAuthorization.php +++ b/sample/payments/VoidAuthorization.php @@ -1,31 +1,28 @@ /void" require __DIR__ . '/../bootstrap.php'; use PayPal\Api\Authorization; -use PayPal\Api\Address; -use PayPal\Api\Amount; -use PayPal\Api\CreditCard; -use PayPal\Api\Payer; -use PayPal\Api\Payment; -use PayPal\Api\FundingInstrument; -use PayPal\Api\Transaction; - // ### VoidAuthorization -// VoidAuthorization by posting to the APIService -// using a valid ApiContext (See bootstrap.php for more on `ApiContext`) -// The return object contains the status; +// You can void a previously authorized payment +// by invoking the $authorization->void method +// with a valid ApiContext (See bootstrap.php for more on `ApiContext`) try { - // create payment to get authorization Id + // create an authorization to get authorization Id + // createAuthorization is defined in common.php $authId = createAuthorization($apiContext); + + // Lookup the authorization $authorization = Authorization::get($authId, $apiContext); - - $void = $authorization->void($apiContext); + + // Void the authorization + $voidedAuth = $authorization->void($apiContext); } catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); @@ -33,58 +30,14 @@ try { } ?> + + Void an authorization +
- Void Authorization: + Voided authorization
-
toArray());?>
+
toArray());?>
Back -setLine1("3909 Witmer Road"); - $addr->setLine2("Niagara Falls"); - $addr->setCity("Niagara Falls"); - $addr->setState("NY"); - $addr->setPostal_code("14305"); - $addr->setCountry_code("US"); - $addr->setPhone("716-298-1822"); - - $card = new CreditCard(); - $card->setType("visa"); - $card->setNumber("4417119669820331"); - $card->setExpire_month("11"); - $card->setExpire_year("2019"); - $card->setCvv2("012"); - $card->setFirst_name("Joe"); - $card->setLast_name("Shopper"); - $card->setBilling_address($addr); - - $fi = new FundingInstrument(); - $fi->setCredit_card($card); - - $payer = new Payer(); - $payer->setPayment_method("credit_card"); - $payer->setFunding_instruments(array($fi)); - - $amount = new Amount(); - $amount->setCurrency("USD"); - $amount->setTotal("1.00"); - - $transaction = new Transaction(); - $transaction->setAmount($amount); - $transaction->setDescription("This is the payment description."); - - $payment = new Payment(); - $payment->setIntent("authorize"); - $payment->setPayer($payer); - $payment->setTransactions(array($transaction)); - - $paymnt = $payment->create($apiContext); - $resArray = $paymnt->toArray(); - - return $authId = $resArray['transactions'][0]['related_resources'][0]['authorization']['id']; -} diff --git a/sample/sale/GetSale.php b/sample/sale/GetSale.php index 14da4bb..ad64f70 100644 --- a/sample/sale/GetSale.php +++ b/sample/sale/GetSale.php @@ -1,6 +1,7 @@ + + Lookup a sale +
Retrieving sale id:
diff --git a/sample/sale/RefundSale.php b/sample/sale/RefundSale.php index 1e9bff9..01d7292 100644 --- a/sample/sale/RefundSale.php +++ b/sample/sale/RefundSale.php @@ -11,13 +11,15 @@ use PayPal\Api\Amount; use PayPal\Api\Refund; use PayPal\Api\Sale; -// ### Refund -// Create a refund object indicating -// refund amount +// ### Refund amount +// Includes both the refunded amount (to Payer) +// and refunded fee (to Payee). Use the $amt->details +// field to mention fees refund details. $amt = new Amount(); -$amt->setCurrency('USD'); -$amt->setTotal('0.01'); +$amt->setCurrency('USD') + ->setTotal('0.01'); +// ### Refund object $refund = new Refund(); $refund->setAmount($amt); @@ -29,7 +31,6 @@ $saleId = '3RM92092UW5126232'; // given sale transaction id. $sale = new Sale(); $sale->setId($saleId); - try { // Refund the sale // (See bootstrap.php for more on `ApiContext`) @@ -41,6 +42,9 @@ try { } ?> + + Refund a sale +
Refunding sale id:
diff --git a/sample/source/AuthorizationCapture.html b/sample/source/AuthorizationCapture.html index 5042253..b1df14b 100644 --- a/sample/source/AuthorizationCapture.html +++ b/sample/source/AuthorizationCapture.html @@ -1,31 +1,25 @@ -AuthorizationCapture
<?php

AuthorizationCapture

+AuthorizationCapture
AuthorizationCapture.php
<?php

AuthorizationCapture

-

This sample code demonstrate how you can capture the authorized payment +

This sample code demonstrates how you can capture +a previously authorized payment. API used: /v1/payments/payment

require __DIR__ . '/../bootstrap.php'; -use PayPal\Api\Capture; -use PayPal\Api\Authorization; -use PayPal\Api\Address; use PayPal\Api\Amount; -use PayPal\Api\CreditCard; -use PayPal\Api\Payer; -use PayPal\Api\Payment; -use PayPal\Api\FundingInstrument; -use PayPal\Api\Transaction;

Capture Payment

+use PayPal\Api\Capture; +use PayPal\Api\Authorization;

Capture Payment

-

Capture Payment by posting to the APIService -using a valid ApiContext (See bootstrap.php for more on ApiContext) -The return object contains the status;

try {

create payment to get authorization Id

$authId = createAuthorization($apiContext); +

You can capture and process a previously created authorization +by invoking the $authorization->capture method +with a valid ApiContext (See bootstrap.php for more on ApiContext)

try {

Create a new authorization to get authorization Id +createAuthorization defined in common.php

$authId = createAuthorization($apiContext); $amt = new Amount(); - $amt->setCurrency("USD"); - $amt->setTotal("1.00"); + $amt->setCurrency("USD") + ->setTotal("1.00"); ### Capture $capture = new Capture(); - $capture->setId($authId); - $capture->setAmount($amt);

get the authorization

$authorization = Authorization::get($authId, $apiContext); - - $getCapture = $authorization->capture($capture, $apiContext); + $capture->setId($authId) + ->setAmount($amt);

Lookup the authorization.

$authorization = Authorization::get($authId, $apiContext);

Perform a capture

$getCapture = $authorization->capture($capture, $apiContext); } catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); @@ -33,61 +27,15 @@ The return object contains the status;

} ?> <html> +<head> + <title>Capturing an authorization</title> +</head> <body> <div> - Capture payment: + Captured payment <?php echo $getCapture->getParentPayment(); ?>. Capture Id: <?php echo $getCapture->getId();?> </div> - <pre> - <?php var_dump($getCapture->toArray());?> - </pre> + <pre><?php var_dump($getCapture->toArray());?></pre> <a href='../index.html'>Back</a> </body> -</html> -<?php -function createAuthorization($apiContext) -{ - $addr = new Address(); - $addr->setLine1("3909 Witmer Road"); - $addr->setLine2("Niagara Falls"); - $addr->setCity("Niagara Falls"); - $addr->setState("NY"); - $addr->setPostal_code("14305"); - $addr->setCountry_code("US"); - $addr->setPhone("716-298-1822"); - - $card = new CreditCard(); - $card->setType("visa"); - $card->setNumber("4417119669820331"); - $card->setExpire_month("11"); - $card->setExpire_year("2019"); - $card->setCvv2("012"); - $card->setFirst_name("Joe"); - $card->setLast_name("Shopper"); - $card->setBilling_address($addr); - - $fi = new FundingInstrument(); - $fi->setCredit_card($card); - - $payer = new Payer(); - $payer->setPayment_method("credit_card"); - $payer->setFunding_instruments(array($fi)); - - $amount = new Amount(); - $amount->setCurrency("USD"); - $amount->setTotal("1.00"); - - $transaction = new Transaction(); - $transaction->setAmount($amount); - $transaction->setDescription("This is the payment description."); - - $payment = new Payment(); - $payment->setIntent("authorize"); - $payment->setPayer($payer); - $payment->setTransactions(array($transaction)); - - $paymnt = $payment->create($apiContext); - $resArray = $paymnt->toArray(); - - return $authId = $resArray['transactions'][0]['related_resources'][0]['authorization']['id']; -}
\ No newline at end of file +</html>
\ No newline at end of file diff --git a/sample/source/CreateCreditCard.html b/sample/source/CreateCreditCard.html index 23b4c92..e3a0edd 100644 --- a/sample/source/CreateCreditCard.html +++ b/sample/source/CreateCreditCard.html @@ -1,42 +1,40 @@ -CreateCreditCard
<?php

Create Credit Card Sample

+CreateCreditCard
CreateCreditCard.php
<?php

Create Credit Card Sample

-

Using the 'vault' API, you can store a -Credit Card securely on PayPal. You can -use a saved Credit Card to process -a payment in the future. -The following code demonstrates how -can save a Credit Card on PayPal using -the Vault API. +

You can store credit card details securely +with PayPal. You can then use the returned +Credit card id to process future payments. API used: POST /v1/vault/credit-card

require __DIR__ . '/../bootstrap.php'; -use PayPal\Api\CreditCard; -use PayPal\Api\Address;

CreditCard

+use PayPal\Api\CreditCard;

CreditCard

-

A resource representing a credit card that can be -used to fund a payment.

$card = new CreditCard(); -$card->setType("visa"); -$card->setNumber("4417119669820331"); -$card->setExpire_month("11"); -$card->setExpire_year("2019"); -$card->setCvv2("012"); -$card->setFirst_name("Joe"); -$card->setLast_name("Shopper");

Save card

+

A resource representing a credit card that is +to be stored with PayPal.

$card = new CreditCard(); +$card->setType("visa") + ->setNumber("4417119669820331") + ->setExpireMonth("11") + ->setExpireYear("2019") + ->setCvv2("012") + ->setFirstName("Joe") + ->setLastName("Shopper");

Save card

Creates the credit card as a resource in the PayPal vault. The response contains an 'id' that you can use to refer to it -in the future payments. +in future payments. (See bootstrap.php for more on ApiContext)

try { $card->create($apiContext); -} catch (\PPConnectionException $ex) { +} catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception:" . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); exit(1); } ?> <html> +<head> + <title>Save a credit card</title> +</head> <body> <div>Saved a new credit card with id: <?php echo $card->getId();?></div> <pre><?php var_dump($card);?></pre> <a href='../index.html'>Back</a> </body> -</html>
\ No newline at end of file +</html>
\ No newline at end of file diff --git a/sample/source/CreatePayment.html b/sample/source/CreatePayment.html index 89b6e93..e3f1073 100644 --- a/sample/source/CreatePayment.html +++ b/sample/source/CreatePayment.html @@ -1,7 +1,7 @@ -CreatePayment
<?php

CreatePaymentSample

- -

This sample code demonstrate how you can process -a payment with a credit card. +CreatePayment

CreatePayment.php
<?php

CreatePaymentSample

//

This sample code demonstrate how you can process +a direct credit card payment. Please note that direct +credit card payment and related features using the +REST API is restricted in some countries. API used: /v1/payments/payment

require __DIR__ . '/../bootstrap.php'; use PayPal\Api\Address; use PayPal\Api\Amount; @@ -9,62 +9,60 @@ API used: /v1/payments/payment

use PayPal\Api\Payer; use PayPal\Api\Payment; use PayPal\Api\FundingInstrument; -use PayPal\Api\Transaction;

Address

+use PayPal\Api\Transaction;

Address

-

Base Address object used as shipping or billing -address in a payment. [Optional]

$addr = new Address(); -$addr->setLine1("3909 Witmer Road"); -$addr->setLine2("Niagara Falls"); -$addr->setCity("Niagara Falls"); -$addr->setState("NY"); -$addr->setPostal_code("14305"); -$addr->setCountry_code("US"); -$addr->setPhone("716-298-1822");

CreditCard

+

[Optional] Billing address associated with card.

$addr = new Address(); +$addr->setLine1("3909 Witmer Road") + ->setLine2("Niagara Falls") + ->setCity("Niagara Falls") + ->setState("NY") + ->setPostalCode("14305") + ->setCountryCode("US") + ->setPhone("716-298-1822");

CreditCard

A resource representing a credit card that can be used to fund a payment.

$card = new CreditCard(); -$card->setType("visa"); -$card->setNumber("4417119669820331"); -$card->setExpire_month("11"); -$card->setExpire_year("2019"); -$card->setCvv2("012"); -$card->setFirst_name("Joe"); -$card->setLast_name("Shopper"); -$card->setBilling_address($addr);

FundingInstrument

+$card->setType("visa") + ->setNumber("4417119669820331") + ->setExpireMonth("11") + ->setExpireYear("2019") + ->setCvv2("012") + ->setFirstName("Joe") + ->setLastName("Shopper") + ->setBillingAddress($addr);

FundingInstrument

A resource representing a Payer's funding instrument. -Use a Payer ID (A unique identifier of the payer generated -and provided by the facilitator. This is required when -creating or using a tokenized funding instrument) -and the CreditCardDetails

$fi = new FundingInstrument(); -$fi->setCredit_card($card);

Payer

+For direct credit card payments, set the CreditCard +field on this object.

$fi = new FundingInstrument(); +$fi->setCreditCard($card);

Payer

A resource representing a Payer that funds a payment -Use the List of FundingInstrument and the Payment Method -as 'credit_card'

$payer = new Payer(); -$payer->setPayment_method("credit_card"); -$payer->setFunding_instruments(array($fi));

Amount

+For direct credit card payments, set payment method +to 'credit_card' and add an array of funding instruments.

$payer = new Payer(); +$payer->setPaymentMethod("credit_card") + ->setFundingInstruments(array($fi));

Amount

-

Let's you specify a payment amount.

$amount = new Amount(); -$amount->setCurrency("USD"); -$amount->setTotal("1.00");

Transaction

+

Lets you specify a payment amount. +You can also specify additional details +such as shipping, tax.

$amount = new Amount(); +$amount->setCurrency("USD") + ->setTotal("1.00");

Transaction

A transaction defines the contract of a payment - what is the payment for and who -is fulfilling it. Transaction is created with -a Payee and Amount types

$transaction = new Transaction(); -$transaction->setAmount($amount); -$transaction->setDescription("This is the payment description.");

Payment

+is fulfilling it.

$transaction = new Transaction(); +$transaction->setAmount($amount) + ->setDescription("Payment description");

Payment

A Payment Resource; create one using -the above types and intent as 'sale'

$payment = new Payment(); -$payment->setIntent("sale"); -$payment->setPayer($payer); -$payment->setTransactions(array($transaction));

Create Payment

+the above types and intent set to sale 'sale'

$payment = new Payment(); +$payment->setIntent("sale") + ->setPayer($payer) + ->setTransactions(array($transaction));

Create Payment

Create a payment by posting to the APIService using a valid ApiContext (See bootstrap.php for more on ApiContext) -The return object contains the status;

try { +The return object contains the state.

try { $payment->create($apiContext); } catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; @@ -73,6 +71,9 @@ The return object contains the status;

} ?> <html> +<head> + <title>Direct Credit card payments</title> +</head> <body> <div> Created payment: @@ -81,4 +82,4 @@ The return object contains the status;

<pre><?php var_dump($payment->toArray());?></pre> <a href='../index.html'>Back</a> </body> -</html>
\ No newline at end of file +</html>
\ No newline at end of file diff --git a/sample/source/CreatePaymentUsingPayPal.html b/sample/source/CreatePaymentUsingPayPal.html index de7b031..d1b0aae 100644 --- a/sample/source/CreatePaymentUsingPayPal.html +++ b/sample/source/CreatePaymentUsingPayPal.html @@ -1,50 +1,49 @@ -CreatePaymentUsingPayPal
<?php

Create Payment using PayPal as payment method

+CreatePaymentUsingPayPal
CreatePaymentUsingPayPal.php
<?php

Create Payment using PayPal as payment method

This sample code demonstrates how you can process a PayPal Account based Payment. API used: /v1/payments/payment

require __DIR__ . '/../bootstrap.php'; -use PayPal\Api\Address; use PayPal\Api\Amount; use PayPal\Api\Payer; use PayPal\Api\Payment; -use PayPal\Api\FundingInstrument; use PayPal\Api\RedirectUrls; use PayPal\Api\Transaction; -session_start();

Payer

+session_start();

Payer

A resource representing a Payer that funds a payment -Use the List of FundingInstrument and the Payment Method -as 'credit_card'

$payer = new Payer(); -$payer->setPayment_method("paypal");

Amount

+For paypal account payments, set payment method +to 'paypal'.

$payer = new Payer(); +$payer->setPaymentMethod("paypal");

Amount

-

Let's you specify a payment amount.

$amount = new Amount(); -$amount->setCurrency("USD"); -$amount->setTotal("1.00");

Transaction

+

Lets you specify a payment amount. +You can also specify additional details +such as shipping, tax.

$amount = new Amount(); +$amount->setCurrency("USD") + ->setTotal("1.00");

Transaction

A transaction defines the contract of a payment - what is the payment for and who -is fulfilling it. Transaction is created with -a Payee and Amount types

$transaction = new Transaction(); -$transaction->setAmount($amount); -$transaction->setDescription("This is the payment description.");

Redirect urls

+is fulfilling it.

$transaction = new Transaction(); +$transaction->setAmount($amount) + ->setDescription("Payment description");

Redirect urls

Set the urls that the buyer must be redirected to after payment approval/ cancellation.

$baseUrl = getBaseUrl(); $redirectUrls = new RedirectUrls(); -$redirectUrls->setReturn_url("$baseUrl/ExecutePayment.php?success=true"); -$redirectUrls->setCancel_url("$baseUrl/ExecutePayment.php?success=false");

Payment

+$redirectUrls->setReturnUrl("$baseUrl/ExecutePayment.php?success=true") + ->setCancelUrl("$baseUrl/ExecutePayment.php?success=false");

Payment

A Payment Resource; create one using -the above types and intent as 'sale'

$payment = new Payment(); -$payment->setIntent("sale"); -$payment->setPayer($payer); -$payment->setRedirect_urls($redirectUrls); -$payment->setTransactions(array($transaction));

Create Payment

+the above types and intent set to 'sale'

$payment = new Payment(); +$payment->setIntent("sale") + ->setPayer($payer) + ->setRedirectUrls($redirectUrls) + ->setTransactions(array($transaction));

Create Payment

-

Create a payment by posting to the APIService -using a valid apiContext. +

Create a payment by calling the 'create' method +passing it a valid apiContext. (See bootstrap.php for more on ApiContext) -The return object contains the status and the +The return object contains the state and the url to which the buyer must be redirected to for payment approval

try { $payment->create($apiContext); @@ -52,16 +51,23 @@ for payment approval

echo "Exception: " . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); exit(1); -}

Redirect buyer to paypal

+}

Get redirect url

-

Retrieve buyer approval url from the payment object.

foreach($payment->getLinks() as $link) { +

The API response provides the url that you must redirect +the buyer to. Retrieve the url from the $payment->getLinks() +method

foreach($payment->getLinks() as $link) { if($link->getRel() == 'approval_url') { $redirectUrl = $link->getHref(); + break; } -}

It is not really a great idea to store the payment id -in the session. In a real world app, please store the -payment id in a database.

$_SESSION['paymentId'] = $payment->getId(); +}

Redirect buyer to PayPal website

+ +

Save payment id so that you can 'complete' the payment +once the buyer approves the payment and is redirected +bacl to your website.

//

It is not really a great idea to store the payment id +in the session. In a real world app, you may want to +store the payment id in a database.

$_SESSION['paymentId'] = $payment->getId(); if(isset($redirectUrl)) { header("Location: $redirectUrl"); exit; -}
\ No newline at end of file +}
\ No newline at end of file diff --git a/sample/source/CreatePaymentUsingSavedCard.html b/sample/source/CreatePaymentUsingSavedCard.html index 07417ff..3788f73 100644 --- a/sample/source/CreatePaymentUsingSavedCard.html +++ b/sample/source/CreatePaymentUsingSavedCard.html @@ -1,65 +1,63 @@ -CreatePaymentUsingSavedCard
<?php

Create payment using a saved credit card

+CreatePaymentUsingSavedCard
CreatePaymentUsingSavedCard.php
<?php

Create payment using a saved credit card

This sample code demonstrates how you can process a -Payment using a previously saved credit card. +Payment using a previously stored credit card token. API used: /v1/payments/payment

require __DIR__ . '/../bootstrap.php'; -use PayPal\Api\Address; use PayPal\Api\Amount; -use PayPal\Api\CreditCard; use PayPal\Api\CreditCardToken; use PayPal\Api\Payer; use PayPal\Api\Payment; use PayPal\Api\FundingInstrument; -use PayPal\Api\RedirectUrls; -use PayPal\Api\Transaction; -use PayPal\Auth\OAuthTokenCredential;

Credit card token

+use PayPal\Api\Transaction;

Credit card token

Saved credit card id from a previous call to -CreateCreditCard.php

$creditCardId = 'CARD-5BT058015C739554AKE2GCEI'; -$creditCardToken = new CreditCardToken(); -$creditCardToken->setCredit_card_id($creditCardId);

FundingInstrument

+CreateCreditCard.php

$creditCardToken = new CreditCardToken(); +$creditCardToken->setCreditCardId('CARD-29H07236G1554552FKINPBHQ');

FundingInstrument

A resource representing a Payer's funding instrument. -Use a Payer ID (A unique identifier of the payer generated -and provided by the facilitator. This is required when -creating or using a tokenized funding instrument) -and the CreditCardDetails

$fi = new FundingInstrument(); -$fi->setCredit_card_token($creditCardToken);

Payer

+For stored credit card payments, set the CreditCardToken +field on this object.

$fi = new FundingInstrument(); +$fi->setCreditCardToken($creditCardToken);

Payer

A resource representing a Payer that funds a payment -Use the List of FundingInstrument and the Payment Method -as 'credit_card'

$payer = new Payer(); -$payer->setPayment_method("credit_card"); -$payer->setFunding_instruments(array($fi));

Amount

+For stored credit card payments, set payment method +to 'credit_card'.

$payer = new Payer(); +$payer->setPaymentMethod("credit_card") + ->setFundingInstruments(array($fi));

Amount

-

Let's you specify a payment amount.

$amount = new Amount(); -$amount->setCurrency("USD"); -$amount->setTotal("1.00");

Transaction

+

Lets you specify a payment amount. +You can also specify additional details +such as shipping, tax.

$amount = new Amount(); +$amount->setCurrency("USD") + ->setTotal("1.00");

Transaction

A transaction defines the contract of a payment - what is the payment for and who -is fulfilling it. Transaction is created with -a Payee and Amount types

$transaction = new Transaction(); -$transaction->setAmount($amount); -$transaction->setDescription("This is the payment description.");

Payment

+is fulfilling it.

$transaction = new Transaction(); +$transaction->setAmount($amount) + ->setDescription("Payment description");

Payment

A Payment Resource; create one using -the above types and intent as 'sale'

$payment = new Payment(); -$payment->setIntent("sale"); -$payment->setPayer($payer); -$payment->setTransactions(array($transaction));

Create Payment

+the above types and intent set to 'sale'

$payment = new Payment(); +$payment->setIntent("sale") + ->setPayer($payer) + ->setTransactions(array($transaction));

Create Payment

-

Create a payment by posting to the APIService +

Create a payment by calling the 'create' method +passing it a valid apiContext. (See bootstrap.php for more on ApiContext) -The return object contains the status;

try { +The return object contains the state.

try { $payment->create($apiContext); -} catch (PayPal\ExceptionPayPal\Exception\PPConnectionException $ex) { +} catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); exit(1); } ?> <html> +<head> + <title>Saved Credit card payments</title> +</head> <body> <div> Created payment: @@ -68,4 +66,4 @@ The return object contains the status;

<pre><?php var_dump($payment->toArray());?></pre> <a href='../index.html'>Back</a> </body> -</html>
\ No newline at end of file +</html>
\ No newline at end of file diff --git a/sample/source/DeleteCreditCard.html b/sample/source/DeleteCreditCard.html index f8e45ed..c66e287 100644 --- a/sample/source/DeleteCreditCard.html +++ b/sample/source/DeleteCreditCard.html @@ -1,50 +1,50 @@ -DeleteCreditCard
<?php

Delete CreditCard Sample

+DeleteCreditCard
DeleteCreditCard.php
<?php

Delete CreditCard Sample

-

This sample code demonstrate how you can

//delete a saved creditcard

using the delete API. +

This sample code demonstrate how you can +delete a saved credit card. API used: /v1/vault/credit-card/{} NOTE: HTTP method used here is DELETE

require __DIR__ . '/../bootstrap.php'; -use PayPal\Api\CreditCard; -use PayPal\Api\Address;

save card for demo

+use PayPal\Api\CreditCard;

Store a mock card that can be deleted later.

CreditCard

A resource representing a credit card that can be used to fund a payment.

$card = new CreditCard(); -$card->setType("visa"); -$card->setNumber("4417119669820331"); -$card->setExpire_month("11"); -$card->setExpire_year("2019"); -$card->setCvv2("012"); -$card->setFirst_name("Joe"); -$card->setLast_name("Shopper");

Save card

+$card->setType("visa") + ->setNumber("4417119669820331") + ->setExpireMonth("11") + ->setExpireYear("2019") + ->setCvv2("012") + ->setFirstName("Joe") + ->setLastName("Shopper");

Save card

Creates the credit card as a resource in the PayPal vault. The response contains -an 'id' that you can use to refer to it -in the future payments. +an 'id' that you can use to refer to it later. (See bootstrap.php for more on ApiContext)

try { - $res = $card->create($apiContext); -} catch (\PPConnectionException $ex) { + $card = $card->create($apiContext); +} catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception:" . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); exit(1); } -$creditCard = CreditCard::get($res->getId(), $apiContext); -try {

Delete Card

+try {

Delete Card

deletes saved credit card -(See bootstrap.php for more on ApiContext)

$creditCard->delete($apiContext); -} catch (\PPConnectionException $ex) { +(See bootstrap.php for more on ApiContext)

$creditCard = CreditCard::get($card->getId(), $apiContext); + $creditCard->delete($apiContext); +} catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; exit(1); } ?> - <html> +<head> + <title>Delete a saved credit card</title> +</head> <body> -<div>Delete CreditCard:</div> <p> Credit Card deleted Successfully</p> <a href='../index.html'>Back</a> </body> -</html>
\ No newline at end of file +</html>
\ No newline at end of file diff --git a/sample/source/ExecutePayment.html b/sample/source/ExecutePayment.html index ab77e3d..9812667 100644 --- a/sample/source/ExecutePayment.html +++ b/sample/source/ExecutePayment.html @@ -1,4 +1,4 @@ -ExecutePayment
<?php

Execute Payment Sample

+ExecutePayment
ExecutePayment.php
<?php

Execute Payment Sample

This sample shows how you can complete a payment that has been approved by @@ -11,17 +11,17 @@ API used: POST '/v1/payments/payment//execute'.

use PayPal\Api\PaymentExecution; session_start(); if(isset($_GET['success']) && $_GET['success'] == 'true') { -

Get the payment Object by passing paymentId +

Get the payment Object by passing paymentId payment id was previously stored in session in CreatePaymentUsingPayPal.php

$paymentId = $_SESSION['paymentId']; $payment = Payment::get($paymentId, $apiContext); -

PaymentExecution object includes information necessary +

PaymentExecution object includes information necessary to execute a PayPal account payment. The payer_id is added to the request query parameters when the user is redirected from paypal back to your site

$execution = new PaymentExecution(); - $execution->setPayer_id($_GET['PayerID']); + $execution->setPayerId($_GET['PayerID']); - //Execute the payment

(See bootstrap.php for more on ApiContext)

$payment->execute($execution, $apiContext); + //Execute the payment

(See bootstrap.php for more on ApiContext)

$payment->execute($execution, $apiContext); echo "<html><body><pre>"; var_dump($payment->toArray()); @@ -29,4 +29,4 @@ when the user is redirected from paypal back to your site

} else { echo "User cancelled payment."; -}
\ No newline at end of file +}
\ No newline at end of file diff --git a/sample/source/GetAuthorization.html b/sample/source/GetAuthorization.html index 0648f9c..0bf6b5b 100644 --- a/sample/source/GetAuthorization.html +++ b/sample/source/GetAuthorization.html @@ -1,22 +1,17 @@ -GetAuthorization
<?php

GetAuthorization

+GetAuthorization
GetAuthorization.php
<?php

GetAuthorization

-

This sample code demonstrate how you can get details of an authorized payment +

This sample code demonstrates how you can get details +of an authorized payment. API used: /v1/payments/authorization/<$authorizationId>

require __DIR__ . '/../bootstrap.php'; -use PayPal\Api\Authorization; -use PayPal\Api\Address; -use PayPal\Api\Amount; -use PayPal\Api\CreditCard; -use PayPal\Api\Payer; -use PayPal\Api\Payment; -use PayPal\Api\FundingInstrument; -use PayPal\Api\Transaction;

GetAuthorization

+use PayPal\Api\Authorization;

GetAuthorization

-

GetAuthorization by posting to the APIService -using a valid ApiContext (See bootstrap.php for more on ApiContext) -The return object contains the status;

try {

create payment to get authorization Id

$authId = createAuthorization($apiContext); - - $authorization = Authorization::get($authId, $apiContext); +

You can retrieve info about an Authorization +by invoking the Authorization::get method +with a valid ApiContext (See bootstrap.php for more on ApiContext) +The return object contains the authorization state.

try {

create a authorization to get authorization Id +createAuthorization is defined in common.php

$authId = createAuthorization($apiContext); +

Retrieve the authorization

$authorization = Authorization::get($authId, $apiContext); } catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); @@ -24,59 +19,15 @@ The return object contains the status;

} ?> <html> +<head> + <title>Lookup an authorization</title> +</head> <body> <div> - Get Authorization: + Retrieved Authorization: <?php echo $authorization->getId();?> </div> <pre><?php var_dump($authorization->toArray());?></pre> <a href='../index.html'>Back</a> </body> -</html> -<?php -function createAuthorization($apiContext) -{ - $addr = new Address(); - $addr->setLine1("3909 Witmer Road"); - $addr->setLine2("Niagara Falls"); - $addr->setCity("Niagara Falls"); - $addr->setState("NY"); - $addr->setPostal_code("14305"); - $addr->setCountry_code("US"); - $addr->setPhone("716-298-1822"); - - $card = new CreditCard(); - $card->setType("visa"); - $card->setNumber("4417119669820331"); - $card->setExpire_month("11"); - $card->setExpire_year("2019"); - $card->setCvv2("012"); - $card->setFirst_name("Joe"); - $card->setLast_name("Shopper"); - $card->setBilling_address($addr); - - $fi = new FundingInstrument(); - $fi->setCredit_card($card); - - $payer = new Payer(); - $payer->setPayment_method("credit_card"); - $payer->setFunding_instruments(array($fi)); - - $amount = new Amount(); - $amount->setCurrency("USD"); - $amount->setTotal("1.00"); - - $transaction = new Transaction(); - $transaction->setAmount($amount); - $transaction->setDescription("This is the payment description."); - - $payment = new Payment(); - $payment->setIntent("authorize"); - $payment->setPayer($payer); - $payment->setTransactions(array($transaction)); - - $paymnt = $payment->create($apiContext); - $resArray = $paymnt->toArray(); - - return $authId = $resArray['transactions'][0]['related_resources'][0]['authorization']['id']; -}
\ No newline at end of file +</html>
\ No newline at end of file diff --git a/sample/source/GetCapture.html b/sample/source/GetCapture.html index 50302d9..521bb68 100644 --- a/sample/source/GetCapture.html +++ b/sample/source/GetCapture.html @@ -1,40 +1,33 @@ -GetCapture
<?php

GetCapture

+GetCapture
GetCapture.php
<?php

GetCapture

-

This sample code demonstrate how you can get the details of Captured Payment +

This sample code demonstrates how you can lookup the details +of a captured payment. API used: /v1/payments/capture/<$captureId>

require __DIR__ . '/../bootstrap.php'; + use PayPal\Api\Capture; -use PayPal\Api\Address; use PayPal\Api\Amount; -use PayPal\Api\CreditCard; -use PayPal\Api\Payer; -use PayPal\Api\Payment; -use PayPal\Api\FundingInstrument; -use PayPal\Api\Transaction; -use PayPal\Api\Authorization;

Capture Payment

- -

Capture Payment by posting to the APIService -using a valid ApiContext (See bootstrap.php for more on ApiContext) -The return object contains the status;

try {

create payment to get authorization Id

$authId = createAuthorization($apiContext); - $amt = new Amount(); - $amt->setCurrency("USD"); - $amt->setTotal("1.00"); +use PayPal\Api\Authorization;

Create a mock Capture

try {

create a mock authorization to get authorization Id +createAuthorization is defined in common.php

$authId = createAuthorization($apiContext);

Lookup the authorization

$authorization = Authorization::get($authId, $apiContext); ### Capture - $captur = new Capture(); - $captur->setId($authId); - $captur->setAmount($amt);

get the authorization

$authorization = Authorization::get($authId, $apiContext); - $capt = $authorization->capture($captur, $apiContext); + $amt = new Amount(); + $amt->setCurrency("USD") + ->setTotal("1.00"); +

Create a capture

$captureInfo = new Capture(); + $captureInfo->setId($authId) + ->setAmount($amt); + + $capture = $authorization->capture($captureInfo, $apiContext); } catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); exit(1); -}

Get Capture

+}

Retrieve Capture details

-

Get Capture by posting to the APIService -using a valid ApiContext (See bootstrap.php for more on ApiContext) -The return object contains the status;

try { - $capture = Capture::get($capt->getId(), $apiContext); +

You can look up a capture by invoking the Capture::get method +with a valid ApiContext (See bootstrap.php for more on ApiContext)

try { + $capture = Capture::get($capture->getId(), $apiContext); } catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); @@ -42,59 +35,15 @@ The return object contains the status;

} ?> <html> +<head> + <title>Lookup a capture</title> +</head> <body> <div> - Get Capture : + Capture Id: <?php echo $capture->getId();?> </div> <pre><?php var_dump($capture->toArray());?></pre> <a href='../index.html'>Back</a> </body> -</html> -<?php -function createAuthorization($apiContext) -{ - $addr = new Address(); - $addr->setLine1("3909 Witmer Road"); - $addr->setLine2("Niagara Falls"); - $addr->setCity("Niagara Falls"); - $addr->setState("NY"); - $addr->setPostal_code("14305"); - $addr->setCountry_code("US"); - $addr->setPhone("716-298-1822"); - - $card = new CreditCard(); - $card->setType("visa"); - $card->setNumber("4417119669820331"); - $card->setExpire_month("11"); - $card->setExpire_year("2019"); - $card->setCvv2("012"); - $card->setFirst_name("Joe"); - $card->setLast_name("Shopper"); - $card->setBilling_address($addr); - - $fi = new FundingInstrument(); - $fi->setCredit_card($card); - - $payer = new Payer(); - $payer->setPayment_method("credit_card"); - $payer->setFunding_instruments(array($fi)); - - $amount = new Amount(); - $amount->setCurrency("USD"); - $amount->setTotal("1.00"); - - $transaction = new Transaction(); - $transaction->setAmount($amount); - $transaction->setDescription("This is the payment description."); - - $payment = new Payment(); - $payment->setIntent("authorize"); - $payment->setPayer($payer); - $payment->setTransactions(array($transaction)); - - $paymnt = $payment->create($apiContext); - $resArray = $paymnt->toArray(); - - return $authId = $resArray['transactions'][0]['related_resources'][0]['authorization']['id']; -}
\ No newline at end of file +</html>
\ No newline at end of file diff --git a/sample/source/GetCreditCard.html b/sample/source/GetCreditCard.html index a46eaae..8761a9f 100644 --- a/sample/source/GetCreditCard.html +++ b/sample/source/GetCreditCard.html @@ -1,26 +1,28 @@ -GetCreditCard
<?php

Get Credit Card Sample

+GetCreditCard
GetCreditCard.php
<?php

Get Credit Card Sample

The CreditCard resource allows you to -retrieve previously saved CreditCards, -by sending a GET request to the URI -'/v1/vault/credit-card' +retrieve previously saved CreditCards. +API called: '/v1/vault/credit-card' The following code takes you through the process of retrieving a saved CreditCard

require __DIR__ . '/../bootstrap.php'; -use PayPal\Api\CreditCard;

The cardId can be obtained from a previous save credit -card operation. Use $card->getId()

$cardId = "CARD-5BT058015C739554AKE2GCEI"; +use PayPal\Api\CreditCard;

The cardId can be obtained from a previous save credit +card operation. Use $card->getId()

$cardId = "CARD-5AR29593TC404090HKIKN77Q"; -/// ### Retrieve card

(See bootstrap.php for more on ApiContext)

try { +/// ### Retrieve card

(See bootstrap.php for more on ApiContext)

try { $card = CreditCard::get($cardId, $apiContext); -} catch (\PPConnectionException $ex) { +} catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); exit(1); } ?> <html> +<head> + <title>Lookup a saved credit card</title> +</head> <body> - <div>Retrieving credit card: <?php echo $cardId;?></div> + <div>Retrieving saved credit card: <?php echo $cardId;?></div> <pre><?php var_dump($card);?></pre> <a href='../index.html'>Back</a> </body> -</html>
\ No newline at end of file +</html>
\ No newline at end of file diff --git a/sample/source/GetPayment.html b/sample/source/GetPayment.html index ddbcd9b..dba7df8 100644 --- a/sample/source/GetPayment.html +++ b/sample/source/GetPayment.html @@ -1,4 +1,4 @@ -GetPayment
<?php

GetPaymentSample

+GetPayment
GetPayment.php
<?php

GetPaymentSample

This sample code demonstrate how you can retrieve a list of all Payment resources @@ -9,7 +9,7 @@ payments list. API used: GET /v1/payments/payments

require __DIR__ . '/../bootstrap.php'; use PayPal\Api\Payment; -$paymentId = "PAY-0XL713371A312273YKE2GCNI";

Retrieve payment

+$paymentId = "PAY-0XL713371A312273YKE2GCNI";

Retrieve payment

Retrieve the payment object by calling the static get method @@ -24,9 +24,12 @@ Payment ID } ?> <html> +<head> + <title>Lookup a payment</title> +</head> <body> <div>Retrieving Payment ID: <?php echo $paymentId;?></div> <pre><?php var_dump($payment->toArray());?></pre> <a href='../index.html'>Back</a> </body> -</html>

\ No newline at end of file +</html>
\ No newline at end of file diff --git a/sample/source/GetSale.html b/sample/source/GetSale.html index 5330fac..6aa2ea5 100644 --- a/sample/source/GetSale.html +++ b/sample/source/GetSale.html @@ -1,13 +1,14 @@ -GetSale
<?php

Get Sale sample

+GetSale
GetSale.php
<?php

Get Sale sample

-

This sample code demonstrates how you can retrieve +

Sale transactions are nothing but completed payments. +This sample code demonstrates how you can retrieve details of completed Sale Transaction. API used: /v1/payments/sale/{sale-id}

require __DIR__ . '/../bootstrap.php'; use PayPal\Api\Sale; $saleId = '3RM92092UW5126232'; -try {

Retrieve the sale object

+try {

Retrieve the sale object

Pass the ID of the sale transaction from your payment resource.

$sale = Sale::get($saleId, $apiContext); @@ -18,9 +19,12 @@ transaction from your payment resource.

} ?> <html> +<head> + <title>Lookup a sale</title> +</head> <body> <div>Retrieving sale id: <?php echo $saleId;?></div> <pre><?php var_dump($sale);?></pre> <a href='../index.html'>Back</a> </body> -</html>
\ No newline at end of file +</html>
\ No newline at end of file diff --git a/sample/source/ListPayments.html b/sample/source/ListPayments.html index b420ec8..f56e302 100644 --- a/sample/source/ListPayments.html +++ b/sample/source/ListPayments.html @@ -1,4 +1,4 @@ -ListPayments
<?php

GetPaymentList

+ListPayments
ListPayments.php
<?php

GetPaymentList

This sample code demonstrate how you can retrieve a list of all Payment resources @@ -7,7 +7,7 @@ Note various query parameters that you can use to filter, and paginate through the payments list. API used: GET /v1/payments/payments

require __DIR__ . '/../bootstrap.php'; -use PayPal\Api\Payment;

Retrieve payment

+use PayPal\Api\Payment;

Retrieve payment

Retrieve the PaymentHistory object by calling the static get method on the Payment class, @@ -23,9 +23,12 @@ Refer the method doc for valid values for keys } ?> <html> +<head> + <title>Lookup payment history</title> +</head> <body> <div>Got <?php echo $payments->getCount(); ?> matching payments </div> <pre><?php var_dump($payments->toArray());?></pre> <a href='../index.html'>Back</a> </body> -</html>

\ No newline at end of file +</html>
\ No newline at end of file diff --git a/sample/source/Reauthorization.html b/sample/source/Reauthorization.html index a42eb16..76c9b24 100644 --- a/sample/source/Reauthorization.html +++ b/sample/source/Reauthorization.html @@ -1,35 +1,34 @@ -Reauthorization
<?php

Reauthorization Sample

+Reauthorization
Reauthorization.php
<?php

Reauthorization Sample

-

Sample showing how to do a reauthorization +

This sample code demonstrates how you can reauthorize a PayPal +account payment. API used: v1/payments/authorization/{authorization_id}/reauthorize

require __DIR__ . '/../bootstrap.php'; use PayPal\Api\Authorization; -use PayPal\Api\Amount; - -try {

Reauthorization

+use PayPal\Api\Amount;

Reauthorization

-

Retrieve a authorization id from authorization object -by making a Payment Using PayPal with intent -as authorize. You can reauthorize a payment only once 4 to 29 -days after 3-day honor period for the original authorization -expires.

$authorization = Authorization::get('7GH53639GA425732B', $apiContext); +

Reauthorization is available only for PayPal account payments +and not for credit card payments.

You can reauthorize a payment only once 4 to 29 +days after the 3-day honor period for the original authorization +has expired.

try { +

Lookup authorization using the authorization id

$authorization = Authorization::get('7GH53639GA425732B', $apiContext); $amount = new Amount(); $amount->setCurrency("USD"); - $amount->setTotal("1.00"); - - $authorization->setAmount($amount); - + $amount->setTotal("1.00");

Reauthorize with amount being reauthorized

$authorization->setAmount($amount); $reauthorization = $authorization->reauthorize($apiContext); -}catch (PayPal\Exception\PPConnectionException $ex){ +} catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); exit(1); } ?> <html> +<head> + <title>Reauthorize a payment</title> +</head> <body> <div> - Reauthorize: + Reauthorization Id: <?php echo $reauthorization->getId();?> </div> <pre> @@ -37,4 +36,4 @@ expires.

</pre> <a href='../index.html'>Back</a> </body> -</html>
\ No newline at end of file +</html>
\ No newline at end of file diff --git a/sample/source/RefundCapture.html b/sample/source/RefundCapture.html index c53b095..7d237ad 100644 --- a/sample/source/RefundCapture.html +++ b/sample/source/RefundCapture.html @@ -1,49 +1,39 @@ -RefundCapture
<?php

Refund Capture Sample

+RefundCapture
RefundCapture.php
<?php

Refund Capture Sample

-

This sample code demonstrate how you can -process a refund on a Captured transaction created -using the Capture API. +

This sample code demonstrates how you can +process a refund on a Captured transaction. API used: /v1/payments/capture/{}/refund

require __DIR__ . '/../bootstrap.php'; + use PayPal\Api\Authorization; use PayPal\Api\Capture; use PayPal\Api\Refund; -use PayPal\Api\Address; use PayPal\Api\Amount; -use PayPal\Api\CreditCard; -use PayPal\Api\Payer; -use PayPal\Api\Payment; -use PayPal\Api\FundingInstrument; -use PayPal\Api\Transaction; use PayPal\Rest\ApiContext; -use PayPal\Auth\OAuthTokenCredential;

Capture Payment

- -

Capture Payment by posting to the APIService -using a valid ApiContext (See bootstrap.php for more on ApiContext) -The return object contains the status;

try {

create payment to get authorization Id

$authId = createAuthorization($apiContext); - $amt = new Amount(); - $amt->setCurrency("USD"); - $amt->setTotal("1.00"); - ### Capture - $captur = new Capture(); - $captur->setAmount($amt);

get the authorization

$authorization = Authorization::get($authId, $apiContext); +try {

Create a mock authorization to get authorization Id

$authId = createAuthorization($apiContext);

Get the authorization

$authorization = Authorization::get($authId, $apiContext); - $capt = $authorization->capture($captur, $apiContext); +

Capture

+ $amt = new Amount(); + $amt->setCurrency("USD") + ->setTotal("1.00"); +

Create a capture

$captureInfo = new Capture(); + $captureInfo->setAmount($amt); + + $capture = $authorization->capture($captureInfo, $apiContext); } catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); exit(1); -}

Refund

+}

Refund

Create a refund object indicating -refund amount

$refund = new Refund(); +refund amount and call the refund method

$refund = new Refund(); $refund->setAmount($amt); - -try { - $capture = Capture::get($capt->getId(), $apiContext);

Create a new apiContext object so we send a new +try {

Create a new apiContext object so we send a new PayPal-Request-Id (idempotency) header for this resource

$apiContext = new ApiContext($apiContext->getCredential()); + $captureRefund = $capture->refund($refund, $apiContext); } catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; @@ -53,56 +43,12 @@ PayPal-Request-Id (idempotency) header for this resource

?> <html> +<head> + <title>Refund a captured payment</title> +</head> <body> <div>Refund Capture:</div> <pre><?php var_dump($captureRefund);?></pre> <a href='../index.html'>Back</a> </body> -</html> -<?php -function createAuthorization($apiContext) -{ - $addr = new Address(); - $addr->setLine1("3909 Witmer Road"); - $addr->setLine2("Niagara Falls"); - $addr->setCity("Niagara Falls"); - $addr->setState("NY"); - $addr->setPostal_code("14305"); - $addr->setCountry_code("US"); - $addr->setPhone("716-298-1822"); - - $card = new CreditCard(); - $card->setType("visa"); - $card->setNumber("4417119669820331"); - $card->setExpire_month("11"); - $card->setExpire_year("2019"); - $card->setCvv2("012"); - $card->setFirst_name("Joe"); - $card->setLast_name("Shopper"); - $card->setBilling_address($addr); - - $fi = new FundingInstrument(); - $fi->setCredit_card($card); - - $payer = new Payer(); - $payer->setPayment_method("credit_card"); - $payer->setFunding_instruments(array($fi)); - - $amount = new Amount(); - $amount->setCurrency("USD"); - $amount->setTotal("10.00"); - - $transaction = new Transaction(); - $transaction->setAmount($amount); - $transaction->setDescription("This is the payment description."); - - $payment = new Payment(); - $payment->setIntent("authorize"); - $payment->setPayer($payer); - $payment->setTransactions(array($transaction)); - - $paymnt = $payment->create($apiContext); - $resArray = $paymnt->toArray(); - - return $authId = $resArray['transactions'][0]['related_resources'][0]['authorization']['id']; -}
\ No newline at end of file +</html>
\ No newline at end of file diff --git a/sample/source/RefundSale.html b/sample/source/RefundSale.html index 3c18b91..0b33301 100644 --- a/sample/source/RefundSale.html +++ b/sample/source/RefundSale.html @@ -1,4 +1,4 @@ -RefundSale
<?php

Sale Refund Sample

+RefundSale
RefundSale.php
<?php

Sale Refund Sample

This sample code demonstrate how you can process a refund on a sale transaction created @@ -6,24 +6,22 @@ using the Payments API. API used: /v1/payments/sale/{sale-id}/refund

require __DIR__ . '/../bootstrap.php'; use PayPal\Api\Amount; use PayPal\Api\Refund; -use PayPal\Api\Sale;

Refund

+use PayPal\Api\Sale;

Refund amount

-

Create a refund object indicating -refund amount

$amt = new Amount(); -$amt->setCurrency('USD'); -$amt->setTotal('0.01'); - -$refund = new Refund(); +

Includes both the refunded amount (to Payer) +and refunded fee (to Payee). Use the $amt->details +field to mention fees refund details.

$amt = new Amount(); +$amt->setCurrency('USD') + ->setTotal('0.01');

Refund object

$refund = new Refund(); $refund->setAmount($amt); -$saleId = '3RM92092UW5126232';

Sale

+$saleId = '3RM92092UW5126232';

Sale

A sale transaction. Create a Sale object with the given sale transaction id.

$sale = new Sale(); $sale->setId($saleId); - -try {

Refund the sale +try {

Refund the sale (See bootstrap.php for more on ApiContext)

$sale->refund($refund, $apiContext); } catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception:" . $ex->getMessage() . PHP_EOL; @@ -32,9 +30,12 @@ given sale transaction id.

} ?> <html> +<head> + <title>Refund a sale</title> +</head> <body> <div>Refunding sale id: <?php echo $saleId;?></div> <pre><?php var_dump($sale);?></pre> <a href='../index.html'>Back</a> </body> -</html>
\ No newline at end of file +</html>
\ No newline at end of file diff --git a/sample/source/VoidAuthorization.html b/sample/source/VoidAuthorization.html index bf9b900..3aea3e0 100644 --- a/sample/source/VoidAuthorization.html +++ b/sample/source/VoidAuthorization.html @@ -1,23 +1,15 @@ -VoidAuthorization
<?php

VoidAuthorization

+VoidAuthorization
VoidAuthorization.php
<?php

VoidAuthorization

-

This sample code demonstrate how you can void an authorized payment +

This sample code demonstrates how you can +void an authorized payment. API used: /v1/payments/authorization/<{authorizationid}>/void"

require __DIR__ . '/../bootstrap.php'; -use PayPal\Api\Authorization; -use PayPal\Api\Address; -use PayPal\Api\Amount; -use PayPal\Api\CreditCard; -use PayPal\Api\Payer; -use PayPal\Api\Payment; -use PayPal\Api\FundingInstrument; -use PayPal\Api\Transaction;

VoidAuthorization

+use PayPal\Api\Authorization;

VoidAuthorization

-

VoidAuthorization by posting to the APIService -using a valid ApiContext (See bootstrap.php for more on ApiContext) -The return object contains the status;

try {

create payment to get authorization Id

$authId = createAuthorization($apiContext); - $authorization = Authorization::get($authId, $apiContext); - - $void = $authorization->void($apiContext); +

You can void a previously authorized payment +by invoking the $authorization->void method +with a valid ApiContext (See bootstrap.php for more on ApiContext)

try {

create an authorization to get authorization Id +createAuthorization is defined in common.php

$authId = createAuthorization($apiContext);

Lookup the authorization

$authorization = Authorization::get($authId, $apiContext);

Void the authorization

$voidedAuth = $authorization->void($apiContext); } catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); @@ -25,58 +17,14 @@ The return object contains the status;

} ?> <html> +<head> + <title>Void an authorization</title> +</head> <body> <div> - Void Authorization: + Voided authorization </div> - <pre><?php var_dump($void->toArray());?></pre> + <pre><?php var_dump($voidedAuth->toArray());?></pre> <a href='../index.html'>Back</a> </body> -</html> -<?php -function createAuthorization($apiContext) -{ - $addr = new Address(); - $addr->setLine1("3909 Witmer Road"); - $addr->setLine2("Niagara Falls"); - $addr->setCity("Niagara Falls"); - $addr->setState("NY"); - $addr->setPostal_code("14305"); - $addr->setCountry_code("US"); - $addr->setPhone("716-298-1822"); - - $card = new CreditCard(); - $card->setType("visa"); - $card->setNumber("4417119669820331"); - $card->setExpire_month("11"); - $card->setExpire_year("2019"); - $card->setCvv2("012"); - $card->setFirst_name("Joe"); - $card->setLast_name("Shopper"); - $card->setBilling_address($addr); - - $fi = new FundingInstrument(); - $fi->setCredit_card($card); - - $payer = new Payer(); - $payer->setPayment_method("credit_card"); - $payer->setFunding_instruments(array($fi)); - - $amount = new Amount(); - $amount->setCurrency("USD"); - $amount->setTotal("1.00"); - - $transaction = new Transaction(); - $transaction->setAmount($amount); - $transaction->setDescription("This is the payment description."); - - $payment = new Payment(); - $payment->setIntent("authorize"); - $payment->setPayer($payer); - $payment->setTransactions(array($transaction)); - - $paymnt = $payment->create($apiContext); - $resArray = $paymnt->toArray(); - - return $authId = $resArray['transactions'][0]['related_resources'][0]['authorization']['id']; -}
\ No newline at end of file +</html>
\ No newline at end of file diff --git a/sample/source/assets/behavior.js b/sample/source/assets/behavior.js index c76f978..ae56507 100644 --- a/sample/source/assets/behavior.js +++ b/sample/source/assets/behavior.js @@ -2,7 +2,7 @@ (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() {for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);(function() { - var MAX_FILTER_SIZE, appendSearchNode, buildNav, buildTOCNode, clearFilter, clearHighlight, currentNode$, currentQuery, fileMap, focusCurrentNode, highlightMatch, moveCurrentNode, nav$, searchNodes, searchableNodes, selectNode, selectNodeByDocumentPath, setCurrentNodeExpanded, setTableOfContentsActive, sidenav$, tableOfContents, toc$, toggleTableOfContents, visitCurrentNode; + var MAX_FILTER_SIZE, appendSearchNode, buildNav, buildTOCNode, clearFilter, clearHighlight, currentNode$, currentQuery, fileMap, focusCurrentNode, highlightMatch, moveCurrentNode, nav$, searchNodes, searchableNodes, selectNode, selectNodeByDocumentPath, setCurrentNodeExpanded, setTableOfContentsActive, tableOfContents, toc$, toggleTableOfContents, visitCurrentNode; tableOfContents = [ { @@ -14,7 +14,7 @@ f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3 "singleLineComment": ["//"], "name": "PHP" }, - "sourcePath": "c:\\xcommerce\\repo\\PayPalSDKs\\rest-api-sdk-php\\sample\\sale\\GetSale.php", + "sourcePath": "c:\\xcommerce\\repo\\PayPalSDKs\\rest\\rest-api-sdk-php\\sample\\sale\\GetSale.php", "projectPath": "GetSale.php", "targetPath": "GetSale", "title": "GetSale" @@ -31,14 +31,6 @@ f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3 "depth": 1, "children": [ { - "type": "heading", - "data": { - "level": 3, - "title": "Authentication", - "slug": "authentication" - }, - "depth": 3 - }, { "type": "heading", "data": { "level": 3, @@ -59,7 +51,7 @@ f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3 "singleLineComment": ["//"], "name": "PHP" }, - "sourcePath": "c:\\xcommerce\\repo\\PayPalSDKs\\rest-api-sdk-php\\sample\\sale\\RefundSale.php", + "sourcePath": "c:\\xcommerce\\repo\\PayPalSDKs\\rest\\rest-api-sdk-php\\sample\\sale\\RefundSale.php", "projectPath": "RefundSale.php", "targetPath": "RefundSale", "title": "RefundSale" @@ -79,8 +71,16 @@ f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3 "type": "heading", "data": { "level": 3, - "title": "Refund", - "slug": "refund" + "title": "Refund amount", + "slug": "refund-amount" + }, + "depth": 3 + }, { + "type": "heading", + "data": { + "level": 3, + "title": "Refund object", + "slug": "refund-object" }, "depth": 3 }, { @@ -91,14 +91,6 @@ f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3 "slug": "sale" }, "depth": 3 - }, { - "type": "heading", - "data": { - "level": 3, - "title": "Api Context", - "slug": "api-context" - }, - "depth": 3 } ] } @@ -110,8 +102,6 @@ f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3 toc$ = null; - sidenav$ = null; - setTableOfContentsActive = function(active) { var html$; html$ = $('html'); @@ -323,7 +313,7 @@ f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3 buildNav = function(metaInfo) { var node, sourceURL, _i, _len; - nav$ = $("
\n").appendTo($('body')); + nav$ = $("").appendTo($('body')); toc$ = nav$.find('.toc'); if (metaInfo.githubURL) { if (metaInfo.documentPath === 'index') { diff --git a/sample/source/assets/style.css b/sample/source/assets/style.css index b1b603b..85842ac 100644 --- a/sample/source/assets/style.css +++ b/sample/source/assets/style.css @@ -1 +1 @@ -html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}html{line-height:1}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}q,blockquote{quotes:none}q:before,q:after,blockquote:before,blockquote:after{content:"";content:none}a img{border:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary{display:block}html,body{height:100%}#document{min-height:100%}body{max-width:29em}.segment{padding:0.5em 0 0.5em 29em;white-space:nowrap}.segment:first-child{padding-top:4em}.segment:last-child{padding-bottom:2em}.segment .comments,.segment .code{display:inline-block;vertical-align:top;padding:0 2em}.segment .comments{margin-left:-29em;width:25em;white-space:normal}.segment .code{white-space:pre}#meta{position:absolute;left:29em;padding:0.25em 1em}@media (max-width: 49em){html{font-size:1em}}@media (max-width: 48.94556em){html{font-size:0.99889em}}@media (max-width: 48.89111em){html{font-size:0.99778em}}@media (max-width: 48.83667em){html{font-size:0.99667em}}@media (max-width: 48.78222em){html{font-size:0.99556em}}@media (max-width: 48.72778em){html{font-size:0.99444em}}@media (max-width: 48.67333em){html{font-size:0.99333em}}@media (max-width: 48.61889em){html{font-size:0.99222em}}@media (max-width: 48.56444em){html{font-size:0.99111em}}@media (max-width: 48.51em){html{font-size:0.99em}}@media (max-width: 48.45556em){html{font-size:0.98889em}}@media (max-width: 48.40111em){html{font-size:0.98778em}}@media (max-width: 48.34667em){html{font-size:0.98667em}}@media (max-width: 48.29222em){html{font-size:0.98556em}}@media (max-width: 48.23778em){html{font-size:0.98444em}}@media (max-width: 48.18333em){html{font-size:0.98333em}}@media (max-width: 48.12889em){html{font-size:0.98222em}}@media (max-width: 48.07444em){html{font-size:0.98111em}}@media (max-width: 48.02em){html{font-size:0.98em}}@media (max-width: 47.96556em){html{font-size:0.97889em}}@media (max-width: 47.91111em){html{font-size:0.97778em}}@media (max-width: 47.85667em){html{font-size:0.97667em}}@media (max-width: 47.80222em){html{font-size:0.97556em}}@media (max-width: 47.74778em){html{font-size:0.97444em}}@media (max-width: 47.69333em){html{font-size:0.97333em}}@media (max-width: 47.63889em){html{font-size:0.97222em}}@media (max-width: 47.58444em){html{font-size:0.97111em}}@media (max-width: 47.53em){html{font-size:0.97em}}@media (max-width: 47.47556em){html{font-size:0.96889em}}@media (max-width: 47.42111em){html{font-size:0.96778em}}@media (max-width: 47.36667em){html{font-size:0.96667em}}@media (max-width: 47.31222em){html{font-size:0.96556em}}@media (max-width: 47.25778em){html{font-size:0.96444em}}@media (max-width: 47.20333em){html{font-size:0.96333em}}@media (max-width: 47.14889em){html{font-size:0.96222em}}@media (max-width: 47.09444em){html{font-size:0.96111em}}@media (max-width: 47.04em){html{font-size:0.96em}}@media (max-width: 46.98556em){html{font-size:0.95889em}}@media (max-width: 46.93111em){html{font-size:0.95778em}}@media (max-width: 46.87667em){html{font-size:0.95667em}}@media (max-width: 46.82222em){html{font-size:0.95556em}}@media (max-width: 46.76778em){html{font-size:0.95444em}}@media (max-width: 46.71333em){html{font-size:0.95333em}}@media (max-width: 46.65889em){html{font-size:0.95222em}}@media (max-width: 46.60444em){html{font-size:0.95111em}}@media (max-width: 46.55em){html{font-size:0.95em}}@media (max-width: 46.49556em){html{font-size:0.94889em}}@media (max-width: 46.44111em){html{font-size:0.94778em}}@media (max-width: 46.38667em){html{font-size:0.94667em}}@media (max-width: 46.33222em){html{font-size:0.94556em}}@media (max-width: 46.27778em){html{font-size:0.94444em}}@media (max-width: 46.22333em){html{font-size:0.94333em}}@media (max-width: 46.16889em){html{font-size:0.94222em}}@media (max-width: 46.11444em){html{font-size:0.94111em}}@media (max-width: 46.06em){html{font-size:0.94em}}@media (max-width: 46.00556em){html{font-size:0.93889em}}@media (max-width: 45.95111em){html{font-size:0.93778em}}@media (max-width: 45.89667em){html{font-size:0.93667em}}@media (max-width: 45.84222em){html{font-size:0.93556em}}@media (max-width: 45.78778em){html{font-size:0.93444em}}@media (max-width: 45.73333em){html{font-size:0.93333em}}@media (max-width: 45.67889em){html{font-size:0.93222em}}@media (max-width: 45.62444em){html{font-size:0.93111em}}@media (max-width: 45.57em){html{font-size:0.93em}}@media (max-width: 45.51556em){html{font-size:0.92889em}}@media (max-width: 45.46111em){html{font-size:0.92778em}}@media (max-width: 45.40667em){html{font-size:0.92667em}}@media (max-width: 45.35222em){html{font-size:0.92556em}}@media (max-width: 45.29778em){html{font-size:0.92444em}}@media (max-width: 45.24333em){html{font-size:0.92333em}}@media (max-width: 45.18889em){html{font-size:0.92222em}}@media (max-width: 45.13444em){html{font-size:0.92111em}}@media (max-width: 45.08em){html{font-size:0.92em}}@media (max-width: 45.02556em){html{font-size:0.91889em}}@media (max-width: 44.97111em){html{font-size:0.91778em}}@media (max-width: 44.91667em){html{font-size:0.91667em}}@media (max-width: 44.86222em){html{font-size:0.91556em}}@media (max-width: 44.80778em){html{font-size:0.91444em}}@media (max-width: 44.75333em){html{font-size:0.91333em}}@media (max-width: 44.69889em){html{font-size:0.91222em}}@media (max-width: 44.64444em){html{font-size:0.91111em}}@media (max-width: 44.59em){html{font-size:0.91em}}@media (max-width: 44.53556em){html{font-size:0.90889em}}@media (max-width: 44.48111em){html{font-size:0.90778em}}@media (max-width: 44.42667em){html{font-size:0.90667em}}@media (max-width: 44.37222em){html{font-size:0.90556em}}@media (max-width: 44.31778em){html{font-size:0.90444em}}@media (max-width: 44.26333em){html{font-size:0.90333em}}@media (max-width: 44.20889em){html{font-size:0.90222em}}@media (max-width: 44.15444em){html{font-size:0.90111em}}@media (max-width: 44.1em){html{font-size:0.9em}}@media (max-width: 44.04556em){html{font-size:0.89889em}}@media (max-width: 43.99111em){html{font-size:0.89778em}}@media (max-width: 43.93667em){html{font-size:0.89667em}}@media (max-width: 43.88222em){html{font-size:0.89556em}}@media (max-width: 43.82778em){html{font-size:0.89444em}}@media (max-width: 43.77333em){html{font-size:0.89333em}}@media (max-width: 43.71889em){html{font-size:0.89222em}}@media (max-width: 43.66444em){html{font-size:0.89111em}}@media (max-width: 43.61em){html{font-size:0.89em}}@media (max-width: 43.55556em){html{font-size:0.88889em}}@media (max-width: 43.50111em){html{font-size:0.88778em}}@media (max-width: 43.44667em){html{font-size:0.88667em}}@media (max-width: 43.39222em){html{font-size:0.88556em}}@media (max-width: 43.33778em){html{font-size:0.88444em}}@media (max-width: 43.28333em){html{font-size:0.88333em}}@media (max-width: 43.22889em){html{font-size:0.88222em}}@media (max-width: 43.17444em){html{font-size:0.88111em}}@media (max-width: 43.12em){html{font-size:0.88em}}@media (max-width: 43.06556em){html{font-size:0.87889em}}@media (max-width: 43.01111em){html{font-size:0.87778em}}@media (max-width: 42.95667em){html{font-size:0.87667em}}@media (max-width: 42.90222em){html{font-size:0.87556em}}@media (max-width: 42.84778em){html{font-size:0.87444em}}@media (max-width: 42.79333em){html{font-size:0.87333em}}@media (max-width: 42.73889em){html{font-size:0.87222em}}@media (max-width: 42.68444em){html{font-size:0.87111em}}@media (max-width: 42.63em){html{font-size:0.87em}}@media (max-width: 42.57556em){html{font-size:0.86889em}}@media (max-width: 42.52111em){html{font-size:0.86778em}}@media (max-width: 42.46667em){html{font-size:0.86667em}}@media (max-width: 42.41222em){html{font-size:0.86556em}}@media (max-width: 42.35778em){html{font-size:0.86444em}}@media (max-width: 42.30333em){html{font-size:0.86333em}}@media (max-width: 42.24889em){html{font-size:0.86222em}}@media (max-width: 42.19444em){html{font-size:0.86111em}}@media (max-width: 42.14em){html{font-size:0.86em}}@media (max-width: 42.08556em){html{font-size:0.85889em}}@media (max-width: 42.03111em){html{font-size:0.85778em}}@media (max-width: 41.97667em){html{font-size:0.85667em}}@media (max-width: 41.92222em){html{font-size:0.85556em}}@media (max-width: 41.86778em){html{font-size:0.85444em}}@media (max-width: 41.81333em){html{font-size:0.85333em}}@media (max-width: 41.75889em){html{font-size:0.85222em}}@media (max-width: 41.70444em){html{font-size:0.85111em}}@media (max-width: 41.65em){html{font-size:1em}body{margin:0 auto}.segment{padding:0;white-space:normal;max-width:25em;margin:0 auto}.segment .comments,.segment .code{display:block;padding:1em}.segment .comments{margin-left:0;width:auto}.segment .code{display:block;overflow-y:hidden;overflow-x:auto}.segment .code .wrapper{display:inline-block}}nav{position:fixed;top:0;right:0;width:20em}@media (max-width: 41.65em){nav{left:0;width:100%}}nav .tools{position:relative;z-index:100}nav .tools li{display:table-cell;vertical-align:middle;text-align:center;white-space:nowrap;height:2em;padding:0 0.5em}nav .tools .github{padding:0}nav .tools .github a{display:block;height:2em;width:2em;text-indent:-9001em}nav .tools .search{width:100%}nav .tools .search input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;width:100%}nav .toc{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;top:2em;bottom:0;width:100%;overflow-x:hidden;overflow-y:auto}nav .toc li{position:relative}nav .toc .label{display:block;line-height:2em;padding:0 0.5em 0 0.5em}nav .toc li li .label{padding-left:1em}nav .toc li li li .label{padding-left:1.5em}nav .toc li li li li .label{padding-left:2em}nav .toc li li li li li .label{padding-left:2.5em}nav .toc li li li li li li .label{padding-left:3em}nav{-webkit-transition:height 0;-webkit-transition-delay:150ms;-moz-transition:height 0 150ms;-o-transition:height 0 150ms;transition:height 0 150ms}nav .tools .toggle{-webkit-transition:background 150ms;-moz-transition:background 150ms;-o-transition:background 150ms;transition:background 150ms}nav.active{-webkit-transition:height 0 0;-moz-transition:height 0 0;-o-transition:height 0 0;transition:height 0 0;height:100%}nav .toc{-webkit-transition:right 150ms;-moz-transition:right 150ms;-o-transition:right 150ms;transition:right 150ms;right:-100%}nav.active .toc{right:0}@media (max-width: 41.65em){nav .toc{-webkit-transition:left 150ms;-moz-transition:left 150ms;-o-transition:left 150ms;transition:left 150ms;right:auto;left:-100%}nav.active .toc{left:0}}@media (max-width: 41.65em){body{-webkit-transition:left 150ms;-moz-transition:left 150ms;-o-transition:left 150ms;transition:left 150ms;position:relative;left:0}html.popped{overflow:hidden}html.popped body{left:100%;overflow:hidden}}nav .toc .children,nav .toc .outline{display:none}nav .toc .expanded>.children,nav .toc .expanded>.outline,nav .toc .expanded>.outline .children{display:block}nav .toc .discloser{-webkit-transition-property:-moz-transform,-webkit-transform,-o-transform,-webkit-transform;-moz-transition-property:-moz-transform,-webkit-transform,-o-transform,-moz-transform;-o-transition-property:-moz-transform,-webkit-transform,-o-transform,-o-transform;transition-property:-moz-transform -webkit-transform -o-transform transform;-webkit-transition-duration:200ms;-moz-transition-duration:200ms;-o-transition-duration:200ms;transition-duration:200ms;-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg);display:inline-block;height:9px;width:9px;padding:0.2em;margin:0.2em 0.2em -0.2em 0.2em;vertical-align:baseline;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowOEFDRENGQzE2NEUxMUUxODdDNUQ2ODM0QzVGRkVBMSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowOEFDRENGRDE2NEUxMUUxODdDNUQ2ODM0QzVGRkVBMSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjA4QUNEQ0ZBMTY0RTExRTE4N0M1RDY4MzRDNUZGRUExIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjA4QUNEQ0ZCMTY0RTExRTE4N0M1RDY4MzRDNUZGRUExIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+nQHMgwAAAM1JREFUeNpi/P//P0NJSYkuAwNDJhDXAPE7BjIAExIbZNA9IC4CYjZKDAIBfiDuBeLzQOxBiUEwoAXE26FYixKDYMAD6rpeqGvJNogBGl5F0PDLpMQgGBAC4mlQF9pTYhAMGADxASBeB8RylBgEA4FAfAOIW4CYhxKDQIAZxmChwJD1QFwGxHfINegaEGcB8UFyA/sd1AA9dEOIddFfIJ4OzdAfcSkiZNAOIC6GegcvwGXQHagBm8jNtB+hBmiTYgi6i+ZCw+EFOWkBIMAA1W4l62UzKWwAAAAASUVORK5CYII=') center center no-repeat;background-size:9px 9px}nav .toc .discloser.placeholder,nav .toc .expanded>.outline .discloser{background:none}nav .toc .expanded>.label .discloser{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}nav .toc .filtered>.label{display:none}nav .toc .matched-child>.label{display:block}nav .toc .matched-child>.children,nav .toc .matched-child>.outline,nav .toc .matched-child>.outline .children{display:block}nav .toc .matched>.children,nav .toc .matched>.outline,nav .toc .matched>.outline .children{display:block}nav.searching .toc .discloser{display:none}.comments .wrapper{font-family:"Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:300;font-size:0.82em;line-height:1.3}.comments .wrapper h1,.comments .wrapper h2,.comments .wrapper h3,.comments .wrapper h4,.comments .wrapper h5,.comments .wrapper h6{font-family:"HelveticaNeue-UltraLight","Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:100;letter-spacing:0.0625em}.comments .wrapper h1{font-size:1.6em}.comments .wrapper h2{font-size:1.4em}.comments .wrapper h3{font-size:1.2em}.comments .wrapper h4{font-size:1em}.comments .wrapper h5{font-size:1em}.comments .wrapper h6{font-size:1em}.comments .wrapper p{margin:1em 0}.comments .wrapper>*:first-child{margin-top:-60px;padding-top:60px}.comments .wrapper>*:last-child{margin-bottom:0}.comments .wrapper ol,.comments .wrapper ul{padding-left:1.75em}.comments .wrapper ol li{list-style:decimal}.comments .wrapper ul li{list-style:disc}.comments .wrapper li{margin:1em 0}.comments .wrapper li:first-child{margin-top:0}.comments .wrapper li:last-child{margin-bottom:0}.comments .wrapper code{display:inline-block;padding:0.25em 0.25em 0 0.25em}.comments .wrapper pre{display:block;overflow-x:auto;overflow-y:hidden}.comments .wrapper pre code{padding:1em}.comments .wrapper blockquote{padding:0 1em}html{background:#f3f3f3}#document{background-color:#fff;margin-right:-1em;padding-right:1em}@media (max-width: 41.65em){#document{margin-right:0;padding-right:0}}#meta>*{font-family:"Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:300;font-size:0.82em;line-height:1.3;text-shadow:#cdcdcd 1px 1px 0}#meta>*,#meta>* a{color:#0d0d0d}#meta>* a{text-decoration:none}.comments .wrapper{font-family:"Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:300;font-size:0.82em;line-height:1.3;text-shadow:#fff 1px 1px 0;color:#4a525a}.code .wrapper{font-family:"Droid Sans Mono",Menlo,Monaco,monospace;font-size:0.75em;line-height:1.4;color:#333}.code .wrapper .k{color:#d14}.code .wrapper .kn{color:#d14}.code .wrapper .kc{color:#d14}.code .wrapper .kd{color:#d14}.code .wrapper .kp{color:#d14}.code .wrapper .kr{color:#d14}.code .wrapper .kt{color:#d14}.code .wrapper .na{color:teal}.code .wrapper .nc{color:#458}.code .wrapper .no{color:#458}.code .wrapper .nd{color:#458}.code .wrapper .nf{color:navy}.code .wrapper .py{color:navy}.code .wrapper .nv{color:teal}.code .wrapper .vc{color:teal}.code .wrapper .vg{color:teal}.code .wrapper .vi{color:teal}.code .wrapper .s{color:#2a9e3d}.code .wrapper .sb{color:#2a9e3d}.code .wrapper .sc{color:#2a9e3d}.code .wrapper .sd{color:#2a9e3d}.code .wrapper .s2{color:#2a9e3d}.code .wrapper .se{color:#2a9e3d}.code .wrapper .sh{color:#2a9e3d}.code .wrapper .si{color:#2a9e3d}.code .wrapper .sx{color:#2a9e3d}.code .wrapper .sr{color:#333}.code .wrapper .s1{color:#2a9e3d}.code .wrapper .ss{color:#333}.code .wrapper .m{color:#333}.code .wrapper .mf{color:#333}.code .wrapper .mh{color:#333}.code .wrapper .mi{color:#333}.code .wrapper .il{color:#333}.code .wrapper .mo{color:#333}.code .wrapper .o{color:#882d17}.code .wrapper .ow{color:#882d17}.code .wrapper .p{color:#882d17}.code .wrapper .c,.code .wrapper .cm,.code .wrapper .cp,.code .wrapper .c1,.code .wrapper .cs{font-style:italic}.code .wrapper .c{color:#666}.code .wrapper .cm{color:#666}.code .wrapper .cp{color:#666}.code .wrapper .c1{color:#666}.code .wrapper .cs{color:#666}@media (max-width: 41.65em){.code{-webkit-border-radius:0.4em;-moz-border-radius:0.4em;-ms-border-radius:0.4em;-o-border-radius:0.4em;border-radius:0.4em;-webkit-box-shadow:#cdcdcd 0 0 0.5em 0.2em inset;-moz-box-shadow:#cdcdcd 0 0 0.5em 0.2em inset;box-shadow:#cdcdcd 0 0 0.5em 0.2em inset;background:#f3f3f3}.code .wrapper{-webkit-box-shadow:#f3f3f3 0 0 0.25em 0.75em;-moz-box-shadow:#f3f3f3 0 0 0.25em 0.75em;box-shadow:#f3f3f3 0 0 0.25em 0.75em;background:#f3f3f3}}@media (max-width: 25em){.code{-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0}}nav{text-shadow:#f0f0f0 1px 1px 0;color:#4a525a}nav .tools,nav .toc{font-family:"Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:300;font-size:0.82em;line-height:1.3}nav .tools{-webkit-box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;-moz-box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255,255,255,0.9)), color-stop(100%, rgba(205,205,205,0.9)));background:-webkit-linear-gradient(top, rgba(255,255,255,0.9),rgba(205,205,205,0.9));background:-moz-linear-gradient(top, rgba(255,255,255,0.9),rgba(205,205,205,0.9));background:-o-linear-gradient(top, rgba(255,255,255,0.9),rgba(205,205,205,0.9));background:linear-gradient(top, rgba(255,255,255,0.9),rgba(205,205,205,0.9));-moz-border-radius-bottomleft:0.4em;-webkit-border-bottom-left-radius:0.4em;border-bottom-left-radius:0.4em;border-bottom:1px solid #4a525a;border-left:1px solid #4a525a}@media (max-width: 49em){nav .tools{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0}}nav .tools li{border-right:1px solid #4a525a}nav .tools li:last-child{border-right:none}nav .tools .toggle{cursor:pointer}nav .tools .github a{-webkit-transition:opacity 200ms;-moz-transition:opacity 200ms;-o-transition:opacity 200ms;transition:opacity 200ms;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);opacity:0.5;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAwCAYAAACScGMWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowOEFDRENGODE2NEUxMUUxODdDNUQ2ODM0QzVGRkVBMSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowOEFDRENGOTE2NEUxMUUxODdDNUQ2ODM0QzVGRkVBMSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjA4QUNEQ0Y2MTY0RTExRTE4N0M1RDY4MzRDNUZGRUExIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjA4QUNEQ0Y3MTY0RTExRTE4N0M1RDY4MzRDNUZGRUExIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+FC/Z5AAACv9JREFUeNrMWXl0VNUdvu/NmzWZJQnZN0hCWIQEIQuErUCBI2qwEAFRBJUeDvUPDwfKVhDUY2mPp8spakVELSq11goIiCBbUVKKUGKQQFiCSBJIQjLJZPbJzOt3J/dOXiYJgcqh3nO+vPfm3Xfvd3/3t94IsiyTH2sTyY+4SfxGpVIpfzdBokdxjQHOADuAj4GmuzRvFjAbmAZkAocEQZjLX/r9/vYbuq0UgigoQKagsxyG74FlgB4gYdAA0UASkAIkACahvSn70Xd/AlrCxm4VRDEBIBScUxg5wiCs7oZcEJDwN7g+AswH3gAOApVALdAIWIEGtpgyYAfwPFtYTU/jbtmy5W/gsZAugnMKbSsJ2oXAn1J62o9AIJCDy/ZgbzbQLVoqkAtM722fa2pqYnHJwfgmXG23MgjV7SjO3bR06BnlogUSe7PW+ntplXQHUlNTHewxqjdyR+8lOehxYNCgQa3hnHoil8a18F60trY2cenSpYU+n48qfXMnvaEQYcIMQ4KmrbAk/Cb3ZGV3gt7GWbx4cSm4xHd1JR2+aPfdIPK/ICIiwlNaWroKfMSgwDq0Moj78feB/1e4cjqdmq1btz6C25921jk5iOLe4i2XdDh+aF/ejhw5ksYEZJE6BAeHSuT83nyaMTLSZzAYfO2K7BPdbo/k9ngkOM8u32i1moBep2/TarVtGrU64PZ6VC0tLVqv1ydyFxLeamtrzbgYgJFSh+Bk2jOpe1ICmf7QtKp5856sHJo7zGoym4Lk3G636HQ4JXurTd3U1KTBtqgcTpcQZTYHIiIjfNExMV6DIaINuuTX6XQBp8sp1t24odv3+d6UN9/cPPTqtWpjOEFYLOeUI3CJwJJULAMZFE5u9cqVx1/esKE8jLebgWc3akCjjIFKbwF46dw0AlLXVnXpUlzx9OJpZyvO9VEShJR9LpfrHdy2SgqDCEB83i7Elj53NozYKeAY3QHAE0ZOz0KQmukuJ+VifUPkMrKyjO9t2bzvwUdmbL5eV2/gBBVE1crAL/OAy4mlJSe5Vq5Zd0pB7O/4OB7XXwJbgC/pYLHRFhJtNhONRk1q6xtIv+RE4vJ4SUOTldTdDKWABcBi+g3wdtH9OfaHJ4zaVpg7NHvH/oPrFKGMW4wghYn/uvJhwvjx1UZLFN+6I/iQ3r/Pnh+iGQcWUVPfaCWNzTZiiowgMA5yo7GJ1N5oIP4OI4llmQzV6QVAdenp8v3J8X1IhF7aplarV0HXaE5IJEniH8md/RwhFZ1iWFoqj3dUop8yQrzFPPvss78Cuf48e7W22IjL7SHXauuUxGgbpTS2goKC5fhu9InyCnLmfFWDiByQv6OOuCu5dmEeU46Iyfj7CqzKwXQp1OLj4wfSrcJEll78q0b5EBMTQ4k++V3N9cE6rVYCuRCP5OTkFm5ECskJFMdxd5X/dLOh3shuG9n1n8pMYuLEiQ10sawmuFU7SQMAfxg3bhxXn1yLyWDx+X0mhVT5O2d4NLADb/GHr0/9J97ltFO9lDJSgruyC3gpNjb20tq1a4+OHj26OaxQGgDMYxarbN8BTxuNxm9nzZr1zZIlS6r4GiWVekhbW0BL9Q0L9s+dO/dqKKfsJvCb4fMuMKuRP/nwvSN4//PHH55CsAXckqkhbGJ4nWYSbMCXmIKkKRNJhQeIATYqvs3PGZD1EX1F55s0adI5xbupXciJ7ddCWBCVopyekuw8ffJr2lkzMLMviYky0/7UeRcDNIMYxbeIKf6IvLy8madOnZqId1KEQU8S4/rA1ZiwODX9Ng9YCcxc/sxjkyWVivo+GRGkurKy8j1G7DW6YGWECMVY2hKTEicjHH1stVpNSYkJztmPlqw/uG/vK/6ATPeC+Nv88JIqUg2X0epwEo/XW4LPltMaFNs+vays7HhSUtLS9OTEpgi9jkRbTMRmd5Ios5G0OuGTA/LkMxcubWtr89MIcRnZyLYnnniC70Ap8JfutjWE9evXF02YMKGCiz0hPu5YWlLC/PuyMzOGZGdKOQP7k76pSSR3YDZJSYyDVE0js7KyVhw88MVQjJkODAR0AzLSyJi8XIJvzMMGZU+M7xP9V5p4snHf3/jqxp+g35+Z1F4GTEFOCsktYCHmANCgKAX779q1a9W7776bd/jw4b6QpFEtSUSr0VyTJPE8vMB3Br2uSRREh0oUbPEpaQlFhQW5dXU3mtUaddzBA4crHE5HItba3+ly9/V4fWbMSQuo7SD2DsanPnQhEMnmfYM66c4Vf3txTFdSDTwakqAYrE2jgAV2u/2tvXv3/mPRokUfZWdnfwhvXhHKBBm4IYXhX8BrwC/wvmDZsmV9mFQXKgzgaeovRUXFr5QcdQcvAKupwFJSUkqqa6q3Kxw0lWIqU/rhly9fTsKWP1hdXR3dW4YL3fumqqrq1xqNhpZ9cewMhiYJNAKdpjqG+a9wy+56VsIkNXLkSOqIZXjx5s/37Z3QnS5SK4yMjDx8J/VBSUlJOb5bATwGUB3rC2j57gQ9BSuyeixwEJLiYdbUucq5uTnXNm3a1B3BXKDtTshZLBbnxYsXV1M31GW82yXH8ArXHbPZbENa/kc8zwPoQcvrwDU+Kd7ZIUUXq57cc+bMKeMlICKCC1sZWsTOnTs/wVyP3i65noqZjezEiNhsNiP83XPovBXYzHKy0EHPzJkzz6elpQXDGIj48/Pz67mWjhgxorqoqOhKKJGwWmkCUADdNXSuBTqrWG8V//d0hXq93spDEEd4Gz58eCMqdoENLtPqPXQyKUl+vK8PS8tMQaMQeDkqk477zkm+dAsjOzxjxozxXq/3rZMnT2Y0NzcbaIWFrXLjKqJKCqZJCHOy4qTIj+ghK47GBLwPhEsITddxL/R+7Npd++CDD86AyJPAMzU1NXGYW0C+5UHkGLhhw4axzL0IyiCvUomBsPM84QefCfd4oi2KlZhgQ2pq6ng83ke3xeFweHo6ykIKJCuykB90GCTdTicQpLq3AyR30oIXQXoRPzLopu9dO52S7uSUkrkXmq67uzMOOAMZRtDj6aeisrqt+UIjqTWasEHbM/eo2HiiQ07G9JtodDpibahTNdXdCPYzRBoFo8XCDr2D48h8clRutH8oROoMkaEVpQ8YzCxE6PEoMERubPHPFJZDvXOwpiB6gyF4/E5/87jcJDE9gxz7bMcDlBx1mOkZGS5UXMFxNHq9v29mf4+I+oIarj9ApCE5w+x8jhNl5emzSmbUBM8aRo3lUaBdCjJzKQrrVUhO23kVcrsP8nk9TJdUxGGzJXz2/pYXbtbWBI/JxkyavKd/Zlbr1StV9PCFDB6aW1dUmN/YLzOr5cK5iuizZ8v7PDD17S+HDLu/8tuy0wP+8NuXh/jdds/8BU9Fet3uXrc2RM7a0NBOjq1ECB0CtBMVoUu2psZxrVbrOKM5emeE2bj7iz27Ilauf/EZR2srVE3tXvP8ui+R55Hla9Z9tfDx2cVVFy6YP9r5acaRQ4deLZk9K9Nlt5fs3r0nc3h+4RRbc+PJAETL5RH0jWHOMKQPk+fM7+7cq+NjSSQum4M01V8nZ//9FfXyxRevXJ02ZtTI6TGxsVf6ZWWv2LP946ms8iofkDOsKeBx/06j1WtPHC99E7XEizSfA7LZ6LSSOzBl7lPuTkqOtn/bO53J3WHLAx4G6igRlvPPZO6FFiy/B2j5V0hLQvYNPcY4AVB/Sa3BEqwTCLnSo3e4S//oiGHFDTXh3cDFsIVMZXH8N4z8bbX/CjAA0UTEH4oMvREAAAAASUVORK5CYII=') center center no-repeat;background-size:19.5px 24px}nav .tools .github a:hover{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=90);opacity:0.9}nav.active .tools{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0}nav.active .tools .toggle{background:rgba(205,205,205,0.9);position:relative}nav .toc{-webkit-box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;-moz-box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;background:rgba(230,230,230,0.9);border-left:1px solid #4a525a}nav .toc .label{color:#4a525a;text-decoration:none;border-top:1px solid rgba(192,192,192,0.9);border-bottom:1px solid rgba(192,192,192,0.9);margin-top:-1px}nav .toc .label:hover{background:rgba(205,205,205,0.9)}nav .toc .file>.label{font-weight:bold}nav .toc .selected>.label{background:#fff}nav .toc .label em{font-weight:bold}nav .toc .file>.label em{color:#101214}nav .toc .matched-child>.label{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);opacity:0.65;text-shadow:none;background:rgba(192,192,192,0.9)}@media (max-width: 41.65em){nav .tools,nav .toc{border-left-width:0}nav .tools{background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #cdcdcd));background:-webkit-linear-gradient(top, #ffffff,#cdcdcd);background:-moz-linear-gradient(top, #ffffff,#cdcdcd);background:-o-linear-gradient(top, #ffffff,#cdcdcd);background:linear-gradient(top, #ffffff,#cdcdcd)}nav .toc{background:#e6e6e6}}.comments .wrapper a{display:inline-block;color:#a8614e;text-decoration:none}.comments .wrapper a:hover,.comments .wrapper a:hover *{text-decoration:underline}.comments .wrapper code{font-family:"Droid Sans Mono",Menlo,Monaco,monospace;font-size:0.75em;line-height:1.4;border:1px solid #e6e0d5}.comments .wrapper pre,.comments .wrapper code{-webkit-border-radius:0.4em;-moz-border-radius:0.4em;-ms-border-radius:0.4em;-o-border-radius:0.4em;border-radius:0.4em;background:#fbf8f3}.comments .wrapper pre{-webkit-box-shadow:#f2ece3 0 0 0.4em 0.2em;-moz-box-shadow:#f2ece3 0 0 0.4em 0.2em;box-shadow:#f2ece3 0 0 0.4em 0.2em;border:1px solid #d9c9af}.comments .wrapper pre code{border-width:0;background:transparent}.comments .wrapper blockquote{border-left:0.15em solid #959fa8;margin-left:-0.15em}body{-webkit-text-size-adjust:100%}input[type="search"]{-webkit-border-radius:1em;-moz-border-radius:1em;-ms-border-radius:1em;-o-border-radius:1em;border-radius:1em;-webkit-box-shadow:#ddd 0 1px 1px 0 inset;-moz-box-shadow:#ddd 0 1px 1px 0 inset;box-shadow:#ddd 0 1px 1px 0 inset;border:1px solid #959595;padding:0.15em 0.8em}#document .pilwrap{position:relative}#document .pilcrow{color:#454545;font:12px Arial;left:-20px;opacity:0;padding:1px 2px;position:absolute;text-decoration:none;top:3px}#document .comments:hover .pilcrow{opacity:1}#side-nav{left:10px;position:fixed;top:40%;z-index:1000}#side-nav li{margin:10px 0}#side-nav li a{background:url("sideNavOut.png") no-repeat scroll left top transparent;display:block;height:12px;position:relative;width:12px}#side-nav li a .text{display:none}#side-nav li a.active{background:url("sideNavOver.png") no-repeat scroll left top transparent}#flybar{font-family:"Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:300;font-size:0.82em;line-height:1.3;background-color:#267bb6;background-image:-moz-linear-gradient(center bottom, #2576b4 0px, #348dce 94%);border-bottom:1px solid #888;box-shadow:0 3px 5px rgba(0,0,0,0.1);height:35px;left:0;min-width:745px;padding-left:777px;position:fixed;right:0;top:0;z-index:100;color:#fff}#nav-logo,#nav-logo-nav,#nav-logo-doc{display:block;height:30px;left:10px;position:absolute;top:9px;font-weight:bold}#nav-logo-doc{padding-left:290px}.flybar-button{border-left:1px solid transparent;border-right:1px solid transparent;color:#fff;font-size:12px;font-weight:bold;line-height:35px;padding:0 1em;text-align:center;text-decoration:none;text-transform:uppercase}.flybar-nav{display:block;float:left;position:relative;width:220px}.flybar-language{display:block;float:left;position:relative}.flybar-language .flybar-button{border-left:1px solid transparent;border-right:1px solid transparent;clear:none;float:left;margin-left:-1px;min-width:80px}.flybar-menu{-moz-border-bottom-colors:none;-moz-border-left-colors:none;-moz-border-right-colors:none;-moz-border-top-colors:none;background-color:rgba(249,249,249,0.99);border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-color:-moz-use-text-color #bbb #bbb;border-image:none;border-right:1px solid #bbb;border-style:none solid solid;border-width:0 1px 1px;box-shadow:0 3px 5px rgba(0,0,0,0.1);display:none;padding:1em;position:absolute;top:41px;width:870px}#toc-menu{right:-345px}#language-menu{left:-25px}#language-menu li{display:inline-block;margin-right:25px}.flybar-menu h3{font-size:100%;text-transform:uppercase}.flybar-menu h4{color:#9b9b9b;font-size:90%;margin:0.5em 0;text-transform:uppercase}.flybar-menu ul{margin:0 0 1em 1em}.flybar-nav:hover .flybar-menu,.flybar-nav.active .flybar-menu{display:block}.flybar-button:hover,.flybar-button.active{background:none repeat scroll 0 0 #1d77bc;text-decoration:none}.flybar-nav:hover .flybar-button,.flybar-nav.active .flybar-button{background:-moz-linear-gradient(center top, #eee, #f8f8f8) repeat scroll 0 0 transparent;border-left:1px solid #bbb;border-right:1px solid #bbb}.flybar-nav:hover .flybar-button,.flybar-nav.active .flybar-button{background:-moz-linear-gradient(center top, #e5e5e5, #fff) repeat scroll 0 0 transparent;color:#000;height:51px}.sidebar{font-family:"Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:300;font-size:0.82em;line-height:1.3;border-right:1px solid #e8e8e8;display:inline-block;padding:10px 30px 30px;vertical-align:top;width:220px;z-index:1}.sidebar ul{margin:0}.sidebar .menu li{position:relative}.sidebar .menu a{display:block;margin-top:10px}.sidebar .menu>li{margin-top:20px}.sidebar .menu>li:first-child{margin-top:0}.sidebar .menu>li:first-child>a{margin-top:0}.sidebar .menu>li>a{color:#333;font-weight:bold;margin-bottom:5px;text-decoration:none;text-transform:uppercase}.sidebar .menu .has_sub_menu>a{font-weight:bold}.sidebar .sub-menu .sub-menu{display:none;margin-left:9px}.sub_menu_arrow{border-bottom:3px solid transparent;border-left:3px solid #1a74ba;border-top:3px solid transparent;cursor:pointer;display:block;height:0;left:-10px;position:absolute;top:4px;width:0}.sub_menu_arrow:after{content:"";display:block;height:18px;left:-10px;position:absolute;top:-10px;width:18px}.lte_ie8 .sub_menu_arrow{display:none}.sub_menu_active>.sub_menu_arrow{border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #1a74ba}.sidebar_popout{background:none repeat scroll 0 0 #fcfcfc;height:100%;padding-left:20px;padding-top:60px;position:fixed}.sidebar_popout .menu-container{padding-left:10px}.sidebar_popout a{color:#1a74ba;text-decoration:none}.sidebar_popout a:link,.sidebar_popout a:visited{color:#1a74ba;text-decoration:none}.sidebar_popout a:hover{text-decoration:underline}.sidebar_popout a.no_underline{text-decoration:none}.sidebar_popout a.block_link{display:block;text-decoration:none}.sidebar_popout a.block_link:hover{background:none repeat scroll 0 0 #f8fbfd}.sidebar_no_fixed{position:absolute}.sidebar_button{background:none repeat scroll 0 0 #eaeaea;border-left:1px solid #d7d7d7;border-radius:0 10px 10px 0;cursor:pointer;height:45px;left:270px;position:fixed;top:60px;width:20px;z-index:1}.sidebar_button:hover{background:none repeat scroll 0 0 #dedede}.sidebar_button:after{border-bottom:6px solid transparent;border-right:6px solid #bbb;border-top:6px solid transparent;content:"";display:block;height:0;margin:17px 0 0 5px;width:0}.sidebar_hidden .sidebar_button:after{border-left:6px solid #bbb;border-right:0 none}.content_sidebar{border-left:1px solid #e8e8e8;display:inline-block;margin-left:-5px;padding-left:34px;vertical-align:top;width:640px}.content_sidebar_popout{display:block;padding-left:300px;width:100%}.content_no_fixed_header{margin-top:-66px}.section_anchor{display:block;height:60px;margin-top:-60px} +html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}html{line-height:1}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}q,blockquote{quotes:none}q:before,q:after,blockquote:before,blockquote:after{content:"";content:none}a img{border:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary{display:block}html,body{height:100%}#document{min-height:100%}body{max-width:33em}.segment{padding:0.5em 0 0.5em 33em;white-space:nowrap}.segment:first-child{padding-top:4.1em}.segment:last-child{padding-bottom:2em}.segment .comments,.segment .code{display:inline-block;vertical-align:top;padding:0 2em}.segment .comments{margin-left:-33em;width:29em;white-space:normal}.segment .code{white-space:pre}#meta{position:absolute;left:33em;padding:0.25em 1em}@media (max-width: 53em){html{font-size:1em}}@media (max-width: 52.94111em){html{font-size:0.99889em}}@media (max-width: 52.88222em){html{font-size:0.99778em}}@media (max-width: 52.82333em){html{font-size:0.99667em}}@media (max-width: 52.76444em){html{font-size:0.99556em}}@media (max-width: 52.70556em){html{font-size:0.99444em}}@media (max-width: 52.64667em){html{font-size:0.99333em}}@media (max-width: 52.58778em){html{font-size:0.99222em}}@media (max-width: 52.52889em){html{font-size:0.99111em}}@media (max-width: 52.47em){html{font-size:0.99em}}@media (max-width: 52.41111em){html{font-size:0.98889em}}@media (max-width: 52.35222em){html{font-size:0.98778em}}@media (max-width: 52.29333em){html{font-size:0.98667em}}@media (max-width: 52.23444em){html{font-size:0.98556em}}@media (max-width: 52.17556em){html{font-size:0.98444em}}@media (max-width: 52.11667em){html{font-size:0.98333em}}@media (max-width: 52.05778em){html{font-size:0.98222em}}@media (max-width: 51.99889em){html{font-size:0.98111em}}@media (max-width: 51.94em){html{font-size:0.98em}}@media (max-width: 51.88111em){html{font-size:0.97889em}}@media (max-width: 51.82222em){html{font-size:0.97778em}}@media (max-width: 51.76333em){html{font-size:0.97667em}}@media (max-width: 51.70444em){html{font-size:0.97556em}}@media (max-width: 51.64556em){html{font-size:0.97444em}}@media (max-width: 51.58667em){html{font-size:0.97333em}}@media (max-width: 51.52778em){html{font-size:0.97222em}}@media (max-width: 51.46889em){html{font-size:0.97111em}}@media (max-width: 51.41em){html{font-size:0.97em}}@media (max-width: 51.35111em){html{font-size:0.96889em}}@media (max-width: 51.29222em){html{font-size:0.96778em}}@media (max-width: 51.23333em){html{font-size:0.96667em}}@media (max-width: 51.17444em){html{font-size:0.96556em}}@media (max-width: 51.11556em){html{font-size:0.96444em}}@media (max-width: 51.05667em){html{font-size:0.96333em}}@media (max-width: 50.99778em){html{font-size:0.96222em}}@media (max-width: 50.93889em){html{font-size:0.96111em}}@media (max-width: 50.88em){html{font-size:0.96em}}@media (max-width: 50.82111em){html{font-size:0.95889em}}@media (max-width: 50.76222em){html{font-size:0.95778em}}@media (max-width: 50.70333em){html{font-size:0.95667em}}@media (max-width: 50.64444em){html{font-size:0.95556em}}@media (max-width: 50.58556em){html{font-size:0.95444em}}@media (max-width: 50.52667em){html{font-size:0.95333em}}@media (max-width: 50.46778em){html{font-size:0.95222em}}@media (max-width: 50.40889em){html{font-size:0.95111em}}@media (max-width: 50.35em){html{font-size:0.95em}}@media (max-width: 50.29111em){html{font-size:0.94889em}}@media (max-width: 50.23222em){html{font-size:0.94778em}}@media (max-width: 50.17333em){html{font-size:0.94667em}}@media (max-width: 50.11444em){html{font-size:0.94556em}}@media (max-width: 50.05556em){html{font-size:0.94444em}}@media (max-width: 49.99667em){html{font-size:0.94333em}}@media (max-width: 49.93778em){html{font-size:0.94222em}}@media (max-width: 49.87889em){html{font-size:0.94111em}}@media (max-width: 49.82em){html{font-size:0.94em}}@media (max-width: 49.76111em){html{font-size:0.93889em}}@media (max-width: 49.70222em){html{font-size:0.93778em}}@media (max-width: 49.64333em){html{font-size:0.93667em}}@media (max-width: 49.58444em){html{font-size:0.93556em}}@media (max-width: 49.52556em){html{font-size:0.93444em}}@media (max-width: 49.46667em){html{font-size:0.93333em}}@media (max-width: 49.40778em){html{font-size:0.93222em}}@media (max-width: 49.34889em){html{font-size:0.93111em}}@media (max-width: 49.29em){html{font-size:0.93em}}@media (max-width: 49.23111em){html{font-size:0.92889em}}@media (max-width: 49.17222em){html{font-size:0.92778em}}@media (max-width: 49.11333em){html{font-size:0.92667em}}@media (max-width: 49.05444em){html{font-size:0.92556em}}@media (max-width: 48.99556em){html{font-size:0.92444em}}@media (max-width: 48.93667em){html{font-size:0.92333em}}@media (max-width: 48.87778em){html{font-size:0.92222em}}@media (max-width: 48.81889em){html{font-size:0.92111em}}@media (max-width: 48.76em){html{font-size:0.92em}}@media (max-width: 48.70111em){html{font-size:0.91889em}}@media (max-width: 48.64222em){html{font-size:0.91778em}}@media (max-width: 48.58333em){html{font-size:0.91667em}}@media (max-width: 48.52444em){html{font-size:0.91556em}}@media (max-width: 48.46556em){html{font-size:0.91444em}}@media (max-width: 48.40667em){html{font-size:0.91333em}}@media (max-width: 48.34778em){html{font-size:0.91222em}}@media (max-width: 48.28889em){html{font-size:0.91111em}}@media (max-width: 48.23em){html{font-size:0.91em}}@media (max-width: 48.17111em){html{font-size:0.90889em}}@media (max-width: 48.11222em){html{font-size:0.90778em}}@media (max-width: 48.05333em){html{font-size:0.90667em}}@media (max-width: 47.99444em){html{font-size:0.90556em}}@media (max-width: 47.93556em){html{font-size:0.90444em}}@media (max-width: 47.87667em){html{font-size:0.90333em}}@media (max-width: 47.81778em){html{font-size:0.90222em}}@media (max-width: 47.75889em){html{font-size:0.90111em}}@media (max-width: 47.7em){html{font-size:0.9em}}@media (max-width: 47.64111em){html{font-size:0.89889em}}@media (max-width: 47.58222em){html{font-size:0.89778em}}@media (max-width: 47.52333em){html{font-size:0.89667em}}@media (max-width: 47.46444em){html{font-size:0.89556em}}@media (max-width: 47.40556em){html{font-size:0.89444em}}@media (max-width: 47.34667em){html{font-size:0.89333em}}@media (max-width: 47.28778em){html{font-size:0.89222em}}@media (max-width: 47.22889em){html{font-size:0.89111em}}@media (max-width: 47.17em){html{font-size:0.89em}}@media (max-width: 47.11111em){html{font-size:0.88889em}}@media (max-width: 47.05222em){html{font-size:0.88778em}}@media (max-width: 46.99333em){html{font-size:0.88667em}}@media (max-width: 46.93444em){html{font-size:0.88556em}}@media (max-width: 46.87556em){html{font-size:0.88444em}}@media (max-width: 46.81667em){html{font-size:0.88333em}}@media (max-width: 46.75778em){html{font-size:0.88222em}}@media (max-width: 46.69889em){html{font-size:0.88111em}}@media (max-width: 46.64em){html{font-size:0.88em}}@media (max-width: 46.58111em){html{font-size:0.87889em}}@media (max-width: 46.52222em){html{font-size:0.87778em}}@media (max-width: 46.46333em){html{font-size:0.87667em}}@media (max-width: 46.40444em){html{font-size:0.87556em}}@media (max-width: 46.34556em){html{font-size:0.87444em}}@media (max-width: 46.28667em){html{font-size:0.87333em}}@media (max-width: 46.22778em){html{font-size:0.87222em}}@media (max-width: 46.16889em){html{font-size:0.87111em}}@media (max-width: 46.11em){html{font-size:0.87em}}@media (max-width: 46.05111em){html{font-size:0.86889em}}@media (max-width: 45.99222em){html{font-size:0.86778em}}@media (max-width: 45.93333em){html{font-size:0.86667em}}@media (max-width: 45.87444em){html{font-size:0.86556em}}@media (max-width: 45.81556em){html{font-size:0.86444em}}@media (max-width: 45.75667em){html{font-size:0.86333em}}@media (max-width: 45.69778em){html{font-size:0.86222em}}@media (max-width: 45.63889em){html{font-size:0.86111em}}@media (max-width: 45.58em){html{font-size:0.86em}}@media (max-width: 45.52111em){html{font-size:0.85889em}}@media (max-width: 45.46222em){html{font-size:0.85778em}}@media (max-width: 45.40333em){html{font-size:0.85667em}}@media (max-width: 45.34444em){html{font-size:0.85556em}}@media (max-width: 45.28556em){html{font-size:0.85444em}}@media (max-width: 45.22667em){html{font-size:0.85333em}}@media (max-width: 45.16778em){html{font-size:0.85222em}}@media (max-width: 45.10889em){html{font-size:0.85111em}}@media (max-width: 45.05em){html{font-size:1em}body{margin:0 auto}.segment{padding:0;white-space:normal;max-width:29em;margin:0 auto}.segment .comments,.segment .code{display:block;padding:1em}.segment .comments{margin-left:0;width:auto}.segment .code{display:block;overflow-y:hidden;overflow-x:auto}.segment .code .wrapper{display:inline-block}}nav{position:fixed;top:0;right:0;width:20em}@media (max-width: 45.05em){nav{left:0;width:100%}}nav .tools{position:relative;z-index:100}nav .tools li{display:table-cell;vertical-align:middle;text-align:center;white-space:nowrap;height:2.1em;padding:0 0.55em}nav .tools .github{padding:0}nav .tools .github a{display:block;height:2.1em;width:2.1em;text-indent:-9001em}nav .tools .search{width:100%}nav .tools .search input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;width:100%}nav .toc{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;top:2.1em;bottom:0;width:100%;overflow-x:hidden;overflow-y:auto}nav .toc li{position:relative}nav .toc .label{display:block;line-height:2em;padding:0 0.55em 0 0.55em}nav .toc li li .label{padding-left:1.1em}nav .toc li li li .label{padding-left:1.65em}nav .toc li li li li .label{padding-left:2.2em}nav .toc li li li li li .label{padding-left:2.75em}nav .toc li li li li li li .label{padding-left:3.3em}nav{-webkit-transition:height 0;-webkit-transition-delay:150ms;-moz-transition:height 0 150ms;-o-transition:height 0 150ms;transition:height 0 150ms}nav .tools .toggle{-webkit-transition:background 150ms;-moz-transition:background 150ms;-o-transition:background 150ms;transition:background 150ms}nav.active{-webkit-transition:height 0 0;-moz-transition:height 0 0;-o-transition:height 0 0;transition:height 0 0;height:100%}nav .toc{-webkit-transition:right 150ms;-moz-transition:right 150ms;-o-transition:right 150ms;transition:right 150ms;right:-100%}nav.active .toc{right:0}@media (max-width: 45.05em){nav .toc{-webkit-transition:left 150ms;-moz-transition:left 150ms;-o-transition:left 150ms;transition:left 150ms;right:auto;left:-100%}nav.active .toc{left:0}}@media (max-width: 45.05em){body{-webkit-transition:left 150ms;-moz-transition:left 150ms;-o-transition:left 150ms;transition:left 150ms;position:relative;left:0}html.popped{overflow:hidden}html.popped body{left:100%;overflow:hidden}}nav .toc .children,nav .toc .outline{display:none}nav .toc .expanded>.children,nav .toc .expanded>.outline,nav .toc .expanded>.outline .children{display:block}nav .toc .discloser{-webkit-transition-property:-moz-transform,-webkit-transform,-o-transform,-webkit-transform;-moz-transition-property:-moz-transform,-webkit-transform,-o-transform,-moz-transform;-o-transition-property:-moz-transform,-webkit-transform,-o-transform,-o-transform;transition-property:-moz-transform -webkit-transform -o-transform transform;-webkit-transition-duration:200ms;-moz-transition-duration:200ms;-o-transition-duration:200ms;transition-duration:200ms;-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg);display:inline-block;height:9px;width:9px;padding:0.2em;margin:0.2em 0.2em -0.2em 0.2em;vertical-align:baseline;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowOEFDRENGQzE2NEUxMUUxODdDNUQ2ODM0QzVGRkVBMSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowOEFDRENGRDE2NEUxMUUxODdDNUQ2ODM0QzVGRkVBMSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjA4QUNEQ0ZBMTY0RTExRTE4N0M1RDY4MzRDNUZGRUExIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjA4QUNEQ0ZCMTY0RTExRTE4N0M1RDY4MzRDNUZGRUExIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+nQHMgwAAAM1JREFUeNpi/P//P0NJSYkuAwNDJhDXAPE7BjIAExIbZNA9IC4CYjZKDAIBfiDuBeLzQOxBiUEwoAXE26FYixKDYMAD6rpeqGvJNogBGl5F0PDLpMQgGBAC4mlQF9pTYhAMGADxASBeB8RylBgEA4FAfAOIW4CYhxKDQIAZxmChwJD1QFwGxHfINegaEGcB8UFyA/sd1AA9dEOIddFfIJ4OzdAfcSkiZNAOIC6GegcvwGXQHagBm8jNtB+hBmiTYgi6i+ZCw+EFOWkBIMAA1W4l62UzKWwAAAAASUVORK5CYII=') center center no-repeat;background-size:9px 9px}nav .toc .discloser.placeholder,nav .toc .expanded>.outline .discloser{background:none}nav .toc .expanded>.label .discloser{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}nav .toc .filtered>.label{display:none}nav .toc .matched-child>.label{display:block}nav .toc .matched-child>.children,nav .toc .matched-child>.outline,nav .toc .matched-child>.outline .children{display:block}nav .toc .matched>.children,nav .toc .matched>.outline,nav .toc .matched>.outline .children{display:block}nav.searching .toc .discloser{display:none}.comments .wrapper{font-family:"Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:300;font-size:0.9375em;line-height:1.35}.comments .wrapper h1,.comments .wrapper h2,.comments .wrapper h3,.comments .wrapper h4,.comments .wrapper h5,.comments .wrapper h6{font-family:"HelveticaNeue-UltraLight","Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:100;letter-spacing:0.0625em;line-height:1.75}.comments .wrapper h1{font-size:2.5em}.comments .wrapper h2{font-size:2em}.comments .wrapper h3{font-size:1.6em}.comments .wrapper h4{font-size:1.4em}.comments .wrapper h5{font-size:1.3em}.comments .wrapper h6{font-size:1.2em}.comments .wrapper p{margin:1em 0}.comments .wrapper>*:first-child{margin-top:0}.comments .wrapper>*:last-child{margin-bottom:0}.comments .wrapper ol,.comments .wrapper ul{padding-left:1.75em}.comments .wrapper ol li{list-style:decimal}.comments .wrapper ul li{list-style:disc}.comments .wrapper li{margin:1em 0}.comments .wrapper li:first-child{margin-top:0}.comments .wrapper li:last-child{margin-bottom:0}.comments .wrapper code{display:inline-block;padding:0.25em 0.25em 0 0.25em}.comments .wrapper pre{display:block;overflow-x:auto;overflow-y:hidden}.comments .wrapper pre code{padding:1em}.comments .wrapper blockquote{padding:0 1em}.comments .wrapper strong{font-weight:700}.comments .wrapper em{font-style:italic}html{background:#4a525a}#document{background:#f5fbff -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #272c30), color-stop(30%, #3e454c), color-stop(100%, #4a525a)) 33em no-repeat;background:#f5fbff -webkit-linear-gradient(left, #272c30,#3e454c 0.3em,#4a525a 1em) 33em no-repeat;background:#f5fbff -moz-linear-gradient(left, #272c30,#3e454c 0.3em,#4a525a 1em) 33em no-repeat;background:#f5fbff -o-linear-gradient(left, #272c30,#3e454c 0.3em,#4a525a 1em) 33em no-repeat;background:#f5fbff linear-gradient(left, #272c30,#3e454c 0.3em,#4a525a 1em) 33em no-repeat;margin-right:-1em;padding-right:1em}@media (max-width: 45.05em){#document{margin-right:0;padding-right:0}}#meta>*{font-family:"Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:300;font-size:0.9375em;line-height:1.35;text-shadow:#272c30 1px 1px 0}#meta>*,#meta>* a{color:#9faab7}#meta>* a{text-decoration:none}.comments .wrapper{font-family:"Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:300;font-size:0.9375em;line-height:1.35;text-shadow:#fff 1px 1px 0;color:#4a525a}.code .wrapper{font-family:"Droid Sans Mono",Menlo,Monaco,monospace;font-size:0.75em;line-height:1.4;text-shadow:#272c30 1px 1px 0;color:#cbd1d8}.code .wrapper .k{color:#e0c090}.code .wrapper .kc{color:#e0c090}.code .wrapper .kd{color:#e0c090}.code .wrapper .kp{color:#e0c090}.code .wrapper .kr{color:#e0c090}.code .wrapper .kt{color:#e0c090}.code .wrapper .na{color:#a9c2ba}.code .wrapper .nc{color:#cee4dd}.code .wrapper .no{color:#cee4dd}.code .wrapper .nd{color:#cee4dd}.code .wrapper .nf{color:#abd9cf}.code .wrapper .py{color:#abd9cf}.code .wrapper .nv{color:#b9d0af}.code .wrapper .vc{color:#b9d0af}.code .wrapper .vg{color:#b9d0af}.code .wrapper .vi{color:#b9d0af}.code .wrapper .s{color:#e9baba}.code .wrapper .sb{color:#e9baba}.code .wrapper .sc{color:#e9baba}.code .wrapper .sd{color:#e9baba}.code .wrapper .s2{color:#e9baba}.code .wrapper .se{color:#e9baba}.code .wrapper .sh{color:#e9baba}.code .wrapper .si{color:#e9baba}.code .wrapper .sx{color:#e9baba}.code .wrapper .sr{color:#cba8d6}.code .wrapper .s1{color:#e9baba}.code .wrapper .ss{color:#cba8d6}.code .wrapper .m{color:#cba8d6}.code .wrapper .mf{color:#cba8d6}.code .wrapper .mh{color:#cba8d6}.code .wrapper .mi{color:#cba8d6}.code .wrapper .il{color:#cba8d6}.code .wrapper .mo{color:#cba8d6}.code .wrapper .o{color:#ded3a1}.code .wrapper .ow{color:#ded3a1}.code .wrapper .p{color:#ded3a1}.code .wrapper .c,.code .wrapper .cm,.code .wrapper .cp,.code .wrapper .c1,.code .wrapper .cs{font-style:italic}.code .wrapper .c{color:#b1bac4}.code .wrapper .cm{color:#b1bac4}.code .wrapper .cp{color:#b1bac4}.code .wrapper .c1{color:#b1bac4}.code .wrapper .cs{color:#b1bac4}@media (max-width: 45.05em){.code{-webkit-border-radius:0.4em;-moz-border-radius:0.4em;-ms-border-radius:0.4em;-o-border-radius:0.4em;border-radius:0.4em;-webkit-box-shadow:#272c30 0 0 0.5em 0.2em inset;-moz-box-shadow:#272c30 0 0 0.5em 0.2em inset;box-shadow:#272c30 0 0 0.5em 0.2em inset;background:#4a525a}.code .wrapper{-webkit-box-shadow:#4a525a 0 0 0.25em 0.75em;-moz-box-shadow:#4a525a 0 0 0.25em 0.75em;box-shadow:#4a525a 0 0 0.25em 0.75em;background:#4a525a}}@media (max-width: 29em){.code{-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0}}nav{text-shadow:#f0f0f0 1px 1px 0;color:#4a525a}nav .tools,nav .toc{font-family:"Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:300;font-size:0.9375em;line-height:1.35}nav .tools{-webkit-box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;-moz-box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255,255,255,0.9)), color-stop(100%, rgba(205,205,205,0.9)));background:-webkit-linear-gradient(top, rgba(255,255,255,0.9),rgba(205,205,205,0.9));background:-moz-linear-gradient(top, rgba(255,255,255,0.9),rgba(205,205,205,0.9));background:-o-linear-gradient(top, rgba(255,255,255,0.9),rgba(205,205,205,0.9));background:linear-gradient(top, rgba(255,255,255,0.9),rgba(205,205,205,0.9));-moz-border-radius-bottomleft:0.4em;-webkit-border-bottom-left-radius:0.4em;border-bottom-left-radius:0.4em;border-bottom:1px solid #4a525a;border-left:1px solid #4a525a}@media (max-width: 53em){nav .tools{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0}}nav .tools li{border-right:1px solid #4a525a}nav .tools li:last-child{border-right:none}nav .tools .toggle{cursor:pointer}nav .tools .github a{-webkit-transition:opacity 200ms;-moz-transition:opacity 200ms;-o-transition:opacity 200ms;transition:opacity 200ms;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);opacity:0.5;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAwCAYAAACScGMWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowOEFDRENGODE2NEUxMUUxODdDNUQ2ODM0QzVGRkVBMSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowOEFDRENGOTE2NEUxMUUxODdDNUQ2ODM0QzVGRkVBMSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjA4QUNEQ0Y2MTY0RTExRTE4N0M1RDY4MzRDNUZGRUExIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjA4QUNEQ0Y3MTY0RTExRTE4N0M1RDY4MzRDNUZGRUExIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+FC/Z5AAACv9JREFUeNrMWXl0VNUdvu/NmzWZJQnZN0hCWIQEIQuErUCBI2qwEAFRBJUeDvUPDwfKVhDUY2mPp8spakVELSq11goIiCBbUVKKUGKQQFiCSBJIQjLJZPbJzOt3J/dOXiYJgcqh3nO+vPfm3Xfvd3/3t94IsiyTH2sTyY+4SfxGpVIpfzdBokdxjQHOADuAj4GmuzRvFjAbmAZkAocEQZjLX/r9/vYbuq0UgigoQKagsxyG74FlgB4gYdAA0UASkAIkACahvSn70Xd/AlrCxm4VRDEBIBScUxg5wiCs7oZcEJDwN7g+AswH3gAOApVALdAIWIEGtpgyYAfwPFtYTU/jbtmy5W/gsZAugnMKbSsJ2oXAn1J62o9AIJCDy/ZgbzbQLVoqkAtM722fa2pqYnHJwfgmXG23MgjV7SjO3bR06BnlogUSe7PW+ntplXQHUlNTHewxqjdyR+8lOehxYNCgQa3hnHoil8a18F60trY2cenSpYU+n48qfXMnvaEQYcIMQ4KmrbAk/Cb3ZGV3gt7GWbx4cSm4xHd1JR2+aPfdIPK/ICIiwlNaWroKfMSgwDq0Moj78feB/1e4cjqdmq1btz6C25921jk5iOLe4i2XdDh+aF/ejhw5ksYEZJE6BAeHSuT83nyaMTLSZzAYfO2K7BPdbo/k9ngkOM8u32i1moBep2/TarVtGrU64PZ6VC0tLVqv1ydyFxLeamtrzbgYgJFSh+Bk2jOpe1ICmf7QtKp5856sHJo7zGoym4Lk3G636HQ4JXurTd3U1KTBtqgcTpcQZTYHIiIjfNExMV6DIaINuuTX6XQBp8sp1t24odv3+d6UN9/cPPTqtWpjOEFYLOeUI3CJwJJULAMZFE5u9cqVx1/esKE8jLebgWc3akCjjIFKbwF46dw0AlLXVnXpUlzx9OJpZyvO9VEShJR9LpfrHdy2SgqDCEB83i7Elj53NozYKeAY3QHAE0ZOz0KQmukuJ+VifUPkMrKyjO9t2bzvwUdmbL5eV2/gBBVE1crAL/OAy4mlJSe5Vq5Zd0pB7O/4OB7XXwJbgC/pYLHRFhJtNhONRk1q6xtIv+RE4vJ4SUOTldTdDKWABcBi+g3wdtH9OfaHJ4zaVpg7NHvH/oPrFKGMW4wghYn/uvJhwvjx1UZLFN+6I/iQ3r/Pnh+iGQcWUVPfaCWNzTZiiowgMA5yo7GJ1N5oIP4OI4llmQzV6QVAdenp8v3J8X1IhF7aplarV0HXaE5IJEniH8md/RwhFZ1iWFoqj3dUop8yQrzFPPvss78Cuf48e7W22IjL7SHXauuUxGgbpTS2goKC5fhu9InyCnLmfFWDiByQv6OOuCu5dmEeU46Iyfj7CqzKwXQp1OLj4wfSrcJEll78q0b5EBMTQ4k++V3N9cE6rVYCuRCP5OTkFm5ECskJFMdxd5X/dLOh3shuG9n1n8pMYuLEiQ10sawmuFU7SQMAfxg3bhxXn1yLyWDx+X0mhVT5O2d4NLADb/GHr0/9J97ltFO9lDJSgruyC3gpNjb20tq1a4+OHj26OaxQGgDMYxarbN8BTxuNxm9nzZr1zZIlS6r4GiWVekhbW0BL9Q0L9s+dO/dqKKfsJvCb4fMuMKuRP/nwvSN4//PHH55CsAXckqkhbGJ4nWYSbMCXmIKkKRNJhQeIATYqvs3PGZD1EX1F55s0adI5xbupXciJ7ddCWBCVopyekuw8ffJr2lkzMLMviYky0/7UeRcDNIMYxbeIKf6IvLy8madOnZqId1KEQU8S4/rA1ZiwODX9Ng9YCcxc/sxjkyWVivo+GRGkurKy8j1G7DW6YGWECMVY2hKTEicjHH1stVpNSYkJztmPlqw/uG/vK/6ATPeC+Nv88JIqUg2X0epwEo/XW4LPltMaFNs+vays7HhSUtLS9OTEpgi9jkRbTMRmd5Ios5G0OuGTA/LkMxcubWtr89MIcRnZyLYnnniC70Ap8JfutjWE9evXF02YMKGCiz0hPu5YWlLC/PuyMzOGZGdKOQP7k76pSSR3YDZJSYyDVE0js7KyVhw88MVQjJkODAR0AzLSyJi8XIJvzMMGZU+M7xP9V5p4snHf3/jqxp+g35+Z1F4GTEFOCsktYCHmANCgKAX779q1a9W7776bd/jw4b6QpFEtSUSr0VyTJPE8vMB3Br2uSRREh0oUbPEpaQlFhQW5dXU3mtUaddzBA4crHE5HItba3+ly9/V4fWbMSQuo7SD2DsanPnQhEMnmfYM66c4Vf3txTFdSDTwakqAYrE2jgAV2u/2tvXv3/mPRokUfZWdnfwhvXhHKBBm4IYXhX8BrwC/wvmDZsmV9mFQXKgzgaeovRUXFr5QcdQcvAKupwFJSUkqqa6q3Kxw0lWIqU/rhly9fTsKWP1hdXR3dW4YL3fumqqrq1xqNhpZ9cewMhiYJNAKdpjqG+a9wy+56VsIkNXLkSOqIZXjx5s/37Z3QnS5SK4yMjDx8J/VBSUlJOb5bATwGUB3rC2j57gQ9BSuyeixwEJLiYdbUucq5uTnXNm3a1B3BXKDtTshZLBbnxYsXV1M31GW82yXH8ArXHbPZbENa/kc8zwPoQcvrwDU+Kd7ZIUUXq57cc+bMKeMlICKCC1sZWsTOnTs/wVyP3i65noqZjezEiNhsNiP83XPovBXYzHKy0EHPzJkzz6elpQXDGIj48/Pz67mWjhgxorqoqOhKKJGwWmkCUADdNXSuBTqrWG8V//d0hXq93spDEEd4Gz58eCMqdoENLtPqPXQyKUl+vK8PS8tMQaMQeDkqk477zkm+dAsjOzxjxozxXq/3rZMnT2Y0NzcbaIWFrXLjKqJKCqZJCHOy4qTIj+ghK47GBLwPhEsITddxL/R+7Npd++CDD86AyJPAMzU1NXGYW0C+5UHkGLhhw4axzL0IyiCvUomBsPM84QefCfd4oi2KlZhgQ2pq6ng83ke3xeFweHo6ykIKJCuykB90GCTdTicQpLq3AyR30oIXQXoRPzLopu9dO52S7uSUkrkXmq67uzMOOAMZRtDj6aeisrqt+UIjqTWasEHbM/eo2HiiQ07G9JtodDpibahTNdXdCPYzRBoFo8XCDr2D48h8clRutH8oROoMkaEVpQ8YzCxE6PEoMERubPHPFJZDvXOwpiB6gyF4/E5/87jcJDE9gxz7bMcDlBx1mOkZGS5UXMFxNHq9v29mf4+I+oIarj9ApCE5w+x8jhNl5emzSmbUBM8aRo3lUaBdCjJzKQrrVUhO23kVcrsP8nk9TJdUxGGzJXz2/pYXbtbWBI/JxkyavKd/Zlbr1StV9PCFDB6aW1dUmN/YLzOr5cK5iuizZ8v7PDD17S+HDLu/8tuy0wP+8NuXh/jdds/8BU9Fet3uXrc2RM7a0NBOjq1ECB0CtBMVoUu2psZxrVbrOKM5emeE2bj7iz27Ilauf/EZR2srVE3tXvP8ui+R55Hla9Z9tfDx2cVVFy6YP9r5acaRQ4deLZk9K9Nlt5fs3r0nc3h+4RRbc+PJAETL5RH0jWHOMKQPk+fM7+7cq+NjSSQum4M01V8nZ//9FfXyxRevXJ02ZtTI6TGxsVf6ZWWv2LP946ms8iofkDOsKeBx/06j1WtPHC99E7XEizSfA7LZ6LSSOzBl7lPuTkqOtn/bO53J3WHLAx4G6igRlvPPZO6FFiy/B2j5V0hLQvYNPcY4AVB/Sa3BEqwTCLnSo3e4S//oiGHFDTXh3cDFsIVMZXH8N4z8bbX/CjAA0UTEH4oMvREAAAAASUVORK5CYII=') center center no-repeat;background-size:19.5px 24px}nav .tools .github a:hover{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=90);opacity:0.9}nav.active .tools{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0}nav.active .tools .toggle{background:rgba(205,205,205,0.9);position:relative}nav .toc{-webkit-box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;-moz-box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;background:rgba(230,230,230,0.9);border-left:1px solid #4a525a}nav .toc .label{color:#4a525a;text-decoration:none;border-top:1px solid rgba(192,192,192,0.9);border-bottom:1px solid rgba(192,192,192,0.9);margin-top:-1px}nav .toc .label:hover{background:rgba(205,205,205,0.9)}nav .toc .file>.label{font-weight:bold}nav .toc .selected>.label{background:#f5fbff}nav .toc .label em{font-weight:bold}nav .toc .file>.label em{color:#101214}nav .toc .matched-child>.label{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);opacity:0.65;text-shadow:none;background:rgba(192,192,192,0.9)}@media (max-width: 45.05em){nav .tools,nav .toc{border-left-width:0}nav .tools{background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #cdcdcd));background:-webkit-linear-gradient(top, #ffffff,#cdcdcd);background:-moz-linear-gradient(top, #ffffff,#cdcdcd);background:-o-linear-gradient(top, #ffffff,#cdcdcd);background:linear-gradient(top, #ffffff,#cdcdcd)}nav .toc{background:#e6e6e6}}.comments .wrapper a{display:inline-block;color:#a8614e;text-decoration:none}.comments .wrapper a:hover,.comments .wrapper a:hover *{text-decoration:underline}.comments .wrapper code{font-family:"Droid Sans Mono",Menlo,Monaco,monospace;font-size:0.75em;line-height:1.4;border:1px solid #e6e0d5}.comments .wrapper pre,.comments .wrapper code{-webkit-border-radius:0.4em;-moz-border-radius:0.4em;-ms-border-radius:0.4em;-o-border-radius:0.4em;border-radius:0.4em;background:#fbf8f3}.comments .wrapper pre{-webkit-box-shadow:#f2ece3 0 0 0.4em 0.2em;-moz-box-shadow:#f2ece3 0 0 0.4em 0.2em;box-shadow:#f2ece3 0 0 0.4em 0.2em;border:1px solid #d9c9af}.comments .wrapper pre code{border-width:0;background:transparent}.comments .wrapper blockquote{border-left:0.15em solid #959fa8;margin-left:-0.15em}body{-webkit-text-size-adjust:100%}input[type="search"]{-webkit-border-radius:1em;-moz-border-radius:1em;-ms-border-radius:1em;-o-border-radius:1em;border-radius:1em;-webkit-box-shadow:#ddd 0 1px 1px 0 inset;-moz-box-shadow:#ddd 0 1px 1px 0 inset;box-shadow:#ddd 0 1px 1px 0 inset;border:1px solid #959595;padding:0.15em 0.8em} diff --git a/sample/vault/CreateCreditCard.php b/sample/vault/CreateCreditCard.php index bf50d4c..4953550 100644 --- a/sample/vault/CreateCreditCard.php +++ b/sample/vault/CreateCreditCard.php @@ -1,50 +1,48 @@ -setType("visa"); -$card->setNumber("4417119669820331"); -$card->setExpire_month("11"); -$card->setExpire_year("2019"); -$card->setCvv2("012"); -$card->setFirst_name("Joe"); -$card->setLast_name("Shopper"); - -// ### Save card -// Creates the credit card as a resource -// in the PayPal vault. The response contains -// an 'id' that you can use to refer to it -// in the future payments. -// (See bootstrap.php for more on `ApiContext`) -try { - $card->create($apiContext); -} catch (\PPConnectionException $ex) { - echo "Exception:" . $ex->getMessage() . PHP_EOL; - var_dump($ex->getData()); - exit(1); -} -?> - - -
Saved a new credit card with id: getId();?>
-
- Back - - \ No newline at end of file +// # Create Credit Card Sample +// You can store credit card details securely +// with PayPal. You can then use the returned +// Credit card id to process future payments. +// API used: POST /v1/vault/credit-card + + +require __DIR__ . '/../bootstrap.php'; +use PayPal\Api\CreditCard; + +// ### CreditCard +// A resource representing a credit card that is +// to be stored with PayPal. +$card = new CreditCard(); +$card->setType("visa") + ->setNumber("4417119669820331") + ->setExpireMonth("11") + ->setExpireYear("2019") + ->setCvv2("012") + ->setFirstName("Joe") + ->setLastName("Shopper"); + +// ### Save card +// Creates the credit card as a resource +// in the PayPal vault. The response contains +// an 'id' that you can use to refer to it +// in future payments. +// (See bootstrap.php for more on `ApiContext`) +try { + $card->create($apiContext); +} catch (PayPal\Exception\PPConnectionException $ex) { + echo "Exception:" . $ex->getMessage() . PHP_EOL; + var_dump($ex->getData()); + exit(1); +} +?> + + + Save a credit card + + +
Saved a new credit card with id: getId();?>
+
+ Back + + diff --git a/sample/vault/DeleteCreditCard.php b/sample/vault/DeleteCreditCard.php index 29d25e0..0de5bba 100644 --- a/sample/vault/DeleteCreditCard.php +++ b/sample/vault/DeleteCreditCard.php @@ -1,57 +1,57 @@ } // NOTE: HTTP method used here is DELETE + require __DIR__ . '/../bootstrap.php'; use PayPal\Api\CreditCard; -use PayPal\Api\Address; -// save card for demo +// Store a mock card that can be deleted later. // ### CreditCard // A resource representing a credit card that can be // used to fund a payment. $card = new CreditCard(); -$card->setType("visa"); -$card->setNumber("4417119669820331"); -$card->setExpire_month("11"); -$card->setExpire_year("2019"); -$card->setCvv2("012"); -$card->setFirst_name("Joe"); -$card->setLast_name("Shopper"); +$card->setType("visa") + ->setNumber("4417119669820331") + ->setExpireMonth("11") + ->setExpireYear("2019") + ->setCvv2("012") + ->setFirstName("Joe") + ->setLastName("Shopper"); // ### Save card // Creates the credit card as a resource // in the PayPal vault. The response contains -// an 'id' that you can use to refer to it -// in the future payments. +// an 'id' that you can use to refer to it later. // (See bootstrap.php for more on `ApiContext`) try { - $res = $card->create($apiContext); -} catch (\PPConnectionException $ex) { + $card = $card->create($apiContext); +} catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception:" . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); exit(1); } -$creditCard = CreditCard::get($res->getId(), $apiContext); try { // ### Delete Card // deletes saved credit card // (See bootstrap.php for more on `ApiContext`) + + $creditCard = CreditCard::get($card->getId(), $apiContext); $creditCard->delete($apiContext); -} catch (\PPConnectionException $ex) { +} catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; exit(1); } ?> - + + Delete a saved credit card + -
Delete CreditCard:

Credit Card deleted Successfully

Back - \ No newline at end of file + diff --git a/sample/vault/GetCreditCard.php b/sample/vault/GetCreditCard.php index 815bfaf..c33e333 100644 --- a/sample/vault/GetCreditCard.php +++ b/sample/vault/GetCreditCard.php @@ -1,33 +1,35 @@ -getId() -$cardId = "CARD-5BT058015C739554AKE2GCEI"; - -/// ### Retrieve card -// (See bootstrap.php for more on `ApiContext`) -try { - $card = CreditCard::get($cardId, $apiContext); -} catch (\PPConnectionException $ex) { - echo "Exception: " . $ex->getMessage() . PHP_EOL; - var_dump($ex->getData()); - exit(1); -} -?> - - -
Retrieving credit card:
-
- Back - - \ No newline at end of file +getId() +$cardId = "CARD-5AR29593TC404090HKIKN77Q"; + +/// ### Retrieve card +// (See bootstrap.php for more on `ApiContext`) +try { + $card = CreditCard::get($cardId, $apiContext); +} catch (PayPal\Exception\PPConnectionException $ex) { + echo "Exception: " . $ex->getMessage() . PHP_EOL; + var_dump($ex->getData()); + exit(1); +} +?> + + + Lookup a saved credit card + + +
Retrieving saved credit card:
+
+ Back + + diff --git a/tests/PayPal/Test/Api/AddressTest.php b/tests/PayPal/Test/Api/AddressTest.php index ec271c9..b02dd07 100644 --- a/tests/PayPal/Test/Api/AddressTest.php +++ b/tests/PayPal/Test/Api/AddressTest.php @@ -51,4 +51,4 @@ class AddressTest extends \PHPUnit_Framework_TestCase { $this->assertEquals($a1, $a2); } -} \ No newline at end of file +} diff --git a/tests/PayPal/Test/Api/AuthorizationTest.php b/tests/PayPal/Test/Api/AuthorizationTest.php index 63ba8cb..73b2f25 100644 --- a/tests/PayPal/Test/Api/AuthorizationTest.php +++ b/tests/PayPal/Test/Api/AuthorizationTest.php @@ -47,26 +47,26 @@ class AuthorizationTest extends \PHPUnit_Framework_TestCase { $addr->setLine2("Niagara Falls"); $addr->setCity("Niagara Falls"); $addr->setState("NY"); - $addr->setPostal_code("14305"); - $addr->setCountry_code("US"); + $addr->setPostalCode("14305"); + $addr->setCountryCode("US"); $addr->setPhone("716-298-1822"); $card = new CreditCard(); $card->setType("visa"); $card->setNumber("4417119669820331"); - $card->setExpire_month("11"); - $card->setExpire_year("2019"); + $card->setExpireMonth("11"); + $card->setExpireYear("2019"); $card->setCvv2("012"); - $card->setFirst_name("Joe"); - $card->setLast_name("Shopper"); - $card->setBilling_address($addr); + $card->setFirstName("Joe"); + $card->setLastName("Shopper"); + $card->setBillingAddress($addr); $fi = new FundingInstrument(); - $fi->setCredit_card($card); + $fi->setCreditCard($card); $payer = new Payer(); - $payer->setPayment_method("credit_card"); - $payer->setFunding_instruments(array($fi)); + $payer->setPaymentMethod("credit_card"); + $payer->setFundingInstruments(array($fi)); $amount = new Amount(); $amount->setCurrency("USD"); @@ -153,4 +153,4 @@ class AuthorizationTest extends \PHPUnit_Framework_TestCase { $this->assertEquals(strpos($ex->getMessage(),"500"), false); } } -} \ No newline at end of file +} diff --git a/tests/PayPal/Test/Api/TransactionTest.php b/tests/PayPal/Test/Api/TransactionTest.php index f2e0ba3..4659f0d 100644 --- a/tests/PayPal/Test/Api/TransactionTest.php +++ b/tests/PayPal/Test/Api/TransactionTest.php @@ -46,4 +46,4 @@ class TransactionTest extends \PHPUnit_Framework_TestCase { $this->assertEquals($t1, $t2); } -} \ No newline at end of file +}