Package Data | |
---|---|
Maintainer Username: | saleemepoch |
Maintainer Contact: | saleem@web-epoch.com (Saleem Beg) |
Package Create Date: | 2016-05-14 |
Package Last Update: | 2016-05-14 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-19 03:18:26 |
Package Statistics | |
---|---|
Total Downloads: | 73 |
Monthly Downloads: | 1 |
Daily Downloads: | 0 |
Total Stars: | 2 |
Total Watchers: | 1 |
Total Forks: | 1 |
Total Open Issues: | 0 |
This is a fork of Srmklive/laravel-paypal. The plan is to make it more enhanced and agile.
Laravel plugin For Processing Payments Through Paypal. Using this plugin you can process or refund payments and handle IPN (Instant Payment Notification) from PayPal in your Laravel application.
Currently only PayPal Express Checkout, Adaptive Payments API & In-Context Checkout Is Supported.
composer require saleemepoch/paypal
'saleemepoch\PayPal\Providers\PayPalServiceProvider' // Laravel 5
saleemepoch\PayPal\Providers\PayPalServiceProvider::class // Laravel 5.1 or greater
'PayPal' => 'saleemepoch\PayPal\Facades\PayPal' // Laravel 5
'PayPal' => saleemepoch\PayPal\Facades\PayPal::class // Laravel 5.1 or greater
php artisan vendor:publish
return [
'mode' => 'sandbox', // Can only be 'sandbox' Or 'live'. If empty or invalid, 'live' will be used.
'sandbox' => [
'username' => '',
'password' => '',
'secret' => '',
'certificate' => '',
/*
If using In-Context Checkout uncomment the following line. Otherwise,
leave it commented and it will use the default gateway: https://www.sandbox.paypal.com
*/
//'gateway_url' => 'https://www.sandbox.paypal.com/checkoutnow/',
],
'live' => [
'username' => '',
'password' => '',
'secret' => '',
'certificate' => '',
/*
If using In-Context Checkout uncomment the following line. Otherwise,
leave it commented and it will use the default gateway: https://www.sandbox.paypal.com
*/
//'gateway_url' => 'https://www.paypal.com/checkoutnow/',
],
'payment_action' => 'Sale', // Can Only Be 'Sale', 'Authorization', 'Order'
'currency' => 'USD',
'notify_url' => '', // Change this accordingly for your application.
];
Apart from changing the gateway (as mentioned above), remember to also include required JS without which In-Context wouldn't work.
Clic here for more info: https://developer.paypal.com/docs/classic/express-checkout/in-context/integration/
PayPal::setProvider('express_checkout'); // To use PayPal Express Checkout API (Used by default)
PayPal::setProvider('adaptive_payments'); // To use PayPal Adaptive Payments API
$data = [];
$data['items'] = [
[
'name' => 'Product 1',
'price' => 9.99
],
[
'name' => 'Product 2',
'price' => 4.99
]
];
$data['invoice_id'] = 1;
$data['invoice_description'] = "Order #$data[invoice_id] Invoice";
$data['return_url'] = url('/payment/success');
$data['cancel_url'] = url('/cart');
$total = 0;
foreach($data['items'] as $item) {
$total += $item['price'];
}
$data['total'] = $total;
SetExpressCheckout
$response = PayPal::getProvider()->setExpressCheckout($data);
// Use the following line when creating recurring payment profiles (subscriptions)
$response = PayPal::getProvider()->setExpressCheckout($data, true);
// This will redirect user to PayPal
return redirect($response['paypal_link']);
GetExpressCheckoutDetails
$response = PayPal::getProvider()->getExpressCheckoutDetails($token);
DoExpressCheckoutPayment
// Note that 'token', 'PayerID' are values returned by PayPal when it redirects to success page after successful verification of user's PayPal info.
$response = PayPal::getProvider()->doExpressCheckoutPayment($data, $token, $PayerID);
RefundTransaction
$response = PayPal::getProvider()->refundTransaction($transactionid);
CreateBillingAgreement
// The $token is the value returned from SetExpressCheckout API call
$response = PayPal::getProvider()->createBillingAgreement($token);
CreateRecurringPaymentsProfile
// The $token is the value returned from SetExpressCheckout API call
$startdate = Carbon::now()->toAtomString();
$profile_desc = !empty($data['subscription_desc']) ?
$data['subscription_desc'] : $data['invoice_description'];
$data = [
'PROFILESTARTDATE' => $startdate,
'DESC' => $profile_desc,
'BILLINGPERIOD' => 'Month', // Can be 'Day', 'Week', 'SemiMonth', 'Month', 'Year'
'BILLINGFREQUENCY' => 12, // set 12 for monthly, 52 for yearly
'AMT' => 10, // Billing amount for each billing cycle
'CURRENCYCODE' => 'USD', // Currency code
'TRIALBILLINGPERIOD' => 'Day', // (Optional) Can be 'Day', 'Week', 'SemiMonth', 'Month', 'Year'
'TRIALBILLINGFREQUENCY' => 10, // (Optional) set 12 for monthly, 52 for yearly
'TRIALTOTALBILLINGCYCLES' => 1, // (Optional) Change it accordingly
'TRIALAMT' => 0, // (Optional) Change it accordingly
];
$response = PayPal::getProvider()->createRecurringPaymentsProfile($data, $token);
GetRecurringPaymentsProfileDetails
$response = PayPal::getProvider()->getRecurringPaymentsProfileDetails($profileid);
UpdateRecurringPaymentsProfile
$response = PayPal::getProvider()->updateRecurringPaymentsProfile($data, $profileid);
ManageRecurringPaymentsProfileStatus
// Cancel recurring payment profile
$response = PayPal::getProvider()->cancelRecurringPaymentsProfile($profileid);
// Suspend recurring payment profile
$response = PayPal::getProvider()->suspendRecurringPaymentsProfile($profileid);
// Reactivate recurring payment profile
$response = PayPal::getProvider()->reactivateRecurringPaymentsProfile($profileid);
You can also handle Instant Payment Notifications from PayPal. Suppose you have set IPN URL to http://example.com/ipn/notify/ in PayPal. To handle IPN you should do the following:
First add the ipn/notify tp your routes file:
Route::post('ipn/notify','PayPalController@postNotify'); // Change it accordingly in your application
Open App\Http\Middleware\VerifyCsrfToken.php and add your IPN route to $excluded routes variable.
'ipn/notify'
Then in the controller where you are handling IPN, do the following:
// Put this above controller definition
use saleemepoch\PayPal\Traits\IPNResponse As PayPalIPN;
// Then add the following before function declaration
use PayPalIPN;
The above step saves the PayPal IPN response as ipn in session. Following is the code you can change to your own requirements for handling IPN:
/**
* Retrieve IPN Response From PayPal
*
* @param \Illuminate\Http\Request $request
*/
public function postNotify(Request $request)
{
$post = [];
$request_params = $request->all();
foreach ($request_params as $key=>$value)
$post[$key] = $value;
$post['cmd'] = '_notify-validate';
$response = $this->verifyIPN($post);
session([
'ipn' => $response
]);
}
This plugin only supports Laravel 5 or greater.