invoice/CreateThirdPartyInvoice.php
<?php

Create Third Party Invoice Sample

This sample code demonstrate how you can create third party invoice on someone else's behalf. This requires using Obtain User's Consent to fetch the refresh token of the third party merchant. Please look at http://paypal.github.io/PayPal-PHP-SDK/sample/doc/lipp/ObtainUserConsent.html for more info. You need the email address of the third party. This can be retrieved using the refresh token obtained from previous call. Please refere to http://paypal.github.io/PayPal-PHP-SDK/sample/doc/lipp/GetUserInfo.html for more info. Please make sure to use merchantInfo.email as the email address of the third party.

require __DIR__ . '/../bootstrap.php'; use PayPal\Api\BillingInfo; use PayPal\Api\Currency; use PayPal\Api\Invoice; use PayPal\Api\InvoiceAddress; use PayPal\Api\InvoiceItem; use PayPal\Api\MerchantInfo; use PayPal\Api\PaymentTerm; use PayPal\Api\ShippingInfo; $invoice = new Invoice();

Invoice Info

Fill in all the information that is required for invoice APIs

$invoice ->setMerchantInfo(new MerchantInfo()) ->setBillingInfo(array(new BillingInfo())) ->setNote("Medical Invoice 16 Jul, 2013 PST") ->setPaymentTerm(new PaymentTerm());

Merchant Info

A resource representing merchant information that can be used to identify merchant

$invoice->getMerchantInfo()

This would be the email address of third party merchant.

->setEmail("developer@sample.com") ->setFirstName("Dennis") ->setLastName("Doctor") ->setbusinessName("Medical Professionals, LLC") ->setAddress(new InvoiceAddress());

Address Information

The address used for creating the invoice

$invoice->getMerchantInfo()->getAddress() ->setLine1("1234 Main St.") ->setCity("Portland") ->setState("OR") ->setPostalCode("97217") ->setCountryCode("US");

Billing Information

Set the email address for each billing

$billing = $invoice->getBillingInfo(); $billing[0] ->setEmail("sample@buy.com"); $billing[0]->setBusinessName("Jay Inc") ->setAdditionalInfo("This is the billing Info") ->setAddress(new InvoiceAddress()); $billing[0]->getAddress() ->setLine1("1234 Main St.") ->setCity("Portland") ->setState("OR") ->setPostalCode("97217") ->setCountryCode("US");

Items List

You could provide the list of all items for detailed breakdown of invoice

$items = array(); $items[0] = new InvoiceItem(); $items[0] ->setName("Sutures") ->setQuantity(100) ->setUnitPrice(new Currency()); $items[0]->getUnitPrice() ->setCurrency("USD") ->setValue(5); $invoice->getPaymentTerm() ->setTermType("NET_45");

For Sample Purposes Only.

$request = clone $invoice;
$refreshToken = "SCNWVZfdg43XaOmoEicazpkXyda32CGnP208EkuQ_QBIrXCYMhlvORFHHyoXPT0VbEMIHYVJEm0gVf1Vf72YgJzPScBenKoVPq__y1QRT7wwJo3WYADwUW4Q5ic"; try {

Use Refresh Token. MAKE SURE TO update MerchantInfo.Email based on

$invoice->updateAccessToken($refreshToken, $apiContext);

Create Invoice

Create an invoice by calling the invoice->create() method with a valid ApiContext (See bootstrap.php for more on ApiContext)

$invoice->create($apiContext); } catch (Exception $ex) {

NOTE: PLEASE DO NOT USE RESULTPRINTER CLASS IN YOUR ORIGINAL CODE. FOR SAMPLE ONLY

ResultPrinter::printError("Create Invoice", "Invoice", null, $request, $ex); exit(1); }

NOTE: PLEASE DO NOT USE RESULTPRINTER CLASS IN YOUR ORIGINAL CODE. FOR SAMPLE ONLY

ResultPrinter::printResult("Create Invoice", "Invoice", $invoice->getId(), $request, $invoice);

Send Invoice

try {

Send Invoice

$invoice->send($apiContext); $invoice = Invoice::get($invoice->getId(), $apiContext); } catch (Exception $ex) {

NOTE: PLEASE DO NOT USE RESULTPRINTER CLASS IN YOUR ORIGINAL CODE. FOR SAMPLE ONLY

ResultPrinter::printError("Send Invoice", "Invoice", null, $request, $ex); exit(1); }

NOTE: PLEASE DO NOT USE RESULTPRINTER CLASS IN YOUR ORIGINAL CODE. FOR SAMPLE ONLY

ResultPrinter::printResult("Send Invoice", "Invoice", $invoice->getId(), $request, $invoice); return $invoice;