netshell / paypal
Laravel-Paypal is simple package help you process direct credit card payments, stored credit card payments and PayPal account payments with your Laravel 5 projects using paypal REST API SDK.
Requires
- php: >=5.3.0
- ext-curl: *
- ext-json: *
- illuminate/support: ~5.0
- paypal/rest-api-sdk-php: 0.15.1
Requires (Dev)
- phpspec/phpspec: ~2.0
This package is auto-updated.
Last update: 2024-11-18 04:11:47 UTC
README
laravel-paypal
handless direct credit card payments, stored credit card payments and PayPal account balance payments. It's developed for use with Laravel 5 and leverages the latest Paypal REST API SDK for PHP.
Installation
-
Run this command in your Laravel project root to install using Composer
composer require netshell/paypal dev-master
-
Next, add the service provider to
app/config/app.php
in theproviders
array.
'providers' => array( // ... 'Netshell\Paypal\PaypalServiceProvider', )
- Finally, add an alias to
app/config/app.php
in thealiases
array.
'aliases' => array( // ... 'Paypal' => 'Netshell\Paypal\Facades\Paypal', )
##Configuration
Use the $apiContext->setConfig()
method to pass in your PayPal details.
Below is one example of sandbox configuration in a controller constructor:
private $_apiContext; public function __construct() { $this->_apiContext = PayPal::ApiContext( config('services.paypal.client_id'), config('services.paypal.secret')); $this->_apiContext->setConfig(array( 'mode' => 'sandbox', 'service.EndPoint' => 'https://api.sandbox.paypal.com', 'http.ConnectionTimeOut' => 30, 'log.LogEnabled' => true, 'log.FileName' => storage_path('logs/paypal.log'), 'log.LogLevel' => 'FINE' )); }
Given you have set your developer information in config/services.php
:
'paypal' => [
'client_id' => 'Client_ID',
'secret' => 'Your_secret'
],
Code Samples
List Payments
Paypal::getAll(array('count' => 1, 'start_index' => 0), $this->_apiContext);
Payment Details
Paypal::getById($payment_id, $this->_apiContext);
Example Controller
This example provides you have a controller that runs the package configuration like in the snippet in the Configuration section.
use PayPal; use Redirect; // ... public function getCheckout() { $payer = PayPal::Payer(); $payer->setPaymentMethod('paypal'); $amount = PayPal:: Amount(); $amount->setCurrency('EUR'); $amount->setTotal(42); // This is the simple way, // you can alternatively describe everything in the order separately; // Reference the PayPal PHP REST SDK for details. $transaction = PayPal::Transaction(); $transaction->setAmount($amount); $transaction->setDescription('What are you selling?'); $redirectUrls = PayPal:: RedirectUrls(); $redirectUrls->setReturnUrl(action('ThisController@getDone')); $redirectUrls->setCancelUrl(action('ThisController@getCancel')); $payment = PayPal::Payment(); $payment->setIntent('sale'); $payment->setPayer($payer); $payment->setRedirectUrls($redirectUrls); $payment->setTransactions(array($transaction)); $response = $payment->create($this->_apiContext); $redirectUrl = $response->links[1]->href; return Redirect::to( $redirectUrl ); } public function getDone(Request $request) { $id = $request->get('paymentId'); $token = $request->get('token'); $payer_id = $request->get('PayerID'); $payment = PayPal::getById($id, $this->_apiContext); $paymentExecution = PayPal::PaymentExecution(); $paymentExecution->setPayerId($payer_id); $executePayment = $payment->execute($paymentExecution, $this->_apiContext); // Clear the shopping cart, write to database, send notifications, etc. // Thank the user for the purchase return view('checkout.done'); } public function getCancel() { // Curse and humiliate the user for cancelling this most sacred payment (yours) return view('checkout.cancel'); }
Customize Paypal payment page
First we need to create a new WebProfile for obtain the id, then in the future we can simply set this id to the payment object.
public function createWebProfile(){ $flowConfig = PayPal::FlowConfig(); $presentation = PayPal::Presentation(); $inputFields = PayPal::InputFields(); $webProfile = PayPal::WebProfile(); $flowConfig->setLandingPageType("Billing"); //Set the page type $presentation->setLogoImage("https://www.example.com/images/logo.jpg")->setBrandName("Example ltd"); //NB: Paypal recommended to use https for the logo's address and the size set to 190x60. $inputFields->setAllowNote(true)->setNoShipping(1)->setAddressOverride(0); $webProfile->setName("Example " . uniqid()) ->setFlowConfig($flowConfig) // Parameters for style and presentation. ->setPresentation($presentation) // Parameters for input field customization. ->setInputFields($inputFields); $createProfileResponse = $webProfile->create($this->_apiContext); return $createProfileResponse->getId(); //The new webprofile's id }
Now set the WebProfile's id to the payment object $payment->setExperienceProfileId("XP-ABCD-EFGH-ILMN-OPQR");