Paypal payment method in Laravel -
i think have integrate payment method site.my site developed in laravel.that's why looking way add paypal integration.my site there can visit.
follow bellow few step:
1)install laravel application
2)database configuration
3)install required packages
4)configuration paypal.php file
5)create route
6)create controller
7)create view file
step 1 : install laravel application
going scratch, require fresh laravel application using bellow command, open terminal or command prompt , run bellow command:
composer create-project --prefer-dist laravel/laravel blog
step 2 : database configuration
in step, require make database configuration, have add
following details on .env file.
1.database username
1.database password
1.database name
in .env file available host , port details, can configure details in system, can put bellow: .env
db_host=localhost db_database=homestead db_username=homestead db_password=secret
step 3 : install required packages
have required following 2 packages integrate paypal payment in our laravel application. add following 2 package in composer.json file.
"guzzlehttp/guzzle": "~5.4", "paypal/rest-api-sdk-php": "*",
then after run following command in terminal
php artisan vendore:publlish
after run command, after automatic create paypal.php file in config/paypal.php path.
step 4 : configuration paypal.php file
<?php return array( /** set paypal credential **/ 'client_id' =>'paypal client_id', 'secret' => 'paypal secret id', /** * sdk configuration */ 'settings' => array( /** * available option 'sandbox' or 'live' */ 'mode' => 'sandbox', /** * specify max request time in seconds */ 'http.connectiontimeout' => 1000, /** * whether want log file */ 'log.logenabled' => true, /** * specify file want write on */ 'log.filename' => storage_path() . '/logs/paypal.log', /** * available option 'fine', 'info', 'warn' or 'error' * * logging verbose in 'fine' level , decreases * proceed towards error */ 'log.loglevel' => 'fine' ), );
step 5: create route
in step need create route paypal payment. open routes/web.php file , add following route. routes/web.php
route::get('paywithpaypal', array('as' => 'addmoney.paywithpaypal','uses' => 'addmoneycontroller@paywithpaypal',)); route::post('paypal', array('as' => 'addmoney.paypal','uses' => 'addmoneycontroller@postpaymentwithpaypal',)); route::get('paypal', array('as' => 'payment.status','uses' => 'addmoneycontroller@getpaymentstatus',));
step 6: create controller
in point, should create new controller addmoneycontroller in path app/http/controllers/addmoneycontroller.php. controller manage layout , payment post request, run bellow command generate new controller:
php artisan make:controller addmoneycontroller
ok, put bellow content in controller file:
app/http/controllers/addmoneycontroller.php
<?php namespace app\http\controllers; use app\http\requests; use illuminate\http\request; use validator; use url; use session; use redirect; use input; /** paypal details class **/ use paypal\rest\apicontext; use paypal\auth\oauthtokencredential; use paypal\api\amount; use paypal\api\details; use paypal\api\item; use paypal\api\itemlist; use paypal\api\payer; use paypal\api\payment; use paypal\api\redirecturls; use paypal\api\executepayment; use paypal\api\paymentexecution; use paypal\api\transaction; class addmoneycontroller extends homecontroller { private $_api_context; /** * create new controller instance. * * @return void */ public function __construct() { parent::__construct(); /** setup paypal api context **/ $paypal_conf = \config::get('paypal'); $this->_api_context = new apicontext(new oauthtokencredential($paypal_conf['client_id'], $paypal_conf['secret'])); $this->_api_context->setconfig($paypal_conf['settings']); } /** * show application paywith paypalpage. * * @return \illuminate\http\response */ public function paywithpaypal() { return view('paywithpaypal'); } /** * store details of payment paypal. * * @param \illuminate\http\request $request * @return \illuminate\http\response */ public function postpaymentwithpaypal(request $request) { $payer = new payer(); $payer->setpaymentmethod('paypal'); $item_1 = new item(); $item_1->setname('item 1') /** item name **/ ->setcurrency('usd') ->setquantity(1) ->setprice($request->get('amount')); /** unit price **/ $item_list = new itemlist(); $item_list->setitems(array($item_1)); $amount = new amount(); $amount->setcurrency('usd') ->settotal($request->get('amount')); $transaction = new transaction(); $transaction->setamount($amount) ->setitemlist($item_list) ->setdescription('your transaction description'); $redirect_urls = new redirecturls(); $redirect_urls->setreturnurl(url::route('payment.status')) /** specify return url **/ ->setcancelurl(url::route('payment.status')); $payment = new payment(); $payment->setintent('sale') ->setpayer($payer) ->setredirecturls($redirect_urls) ->settransactions(array($transaction)); /** dd($payment->create($this->_api_context));exit; **/ try { $payment->create($this->_api_context); } catch (\paypal\exception\ppconnectionexception $ex) { if (\config::get('app.debug')) { \session::put('error','connection timeout'); return redirect::route('addmoney.paywithpaypal'); /** echo "exception: " . $ex->getmessage() . php_eol; **/ /** $err_data = json_decode($ex->getdata(), true); **/ /** exit; **/ } else { \session::put('error','some error occur, sorry inconvenient'); return redirect::route('addmoney.paywithpaypal'); /** die('some error occur, sorry inconvenient'); **/ } } foreach($payment->getlinks() $link) { if($link->getrel() == 'approval_url') { $redirect_url = $link->gethref(); break; } } /** add payment id session **/ session::put('paypal_payment_id', $payment->getid()); if(isset($redirect_url)) { /** redirect paypal **/ return redirect::away($redirect_url); } \session::put('error','unknown error occurred'); return redirect::route('addmoney.paywithpaypal'); } public function getpaymentstatus() { /** payment id before session clear **/ $payment_id = session::get('paypal_payment_id'); /** clear session payment id **/ session::forget('paypal_payment_id'); if (empty(input::get('payerid')) || empty(input::get('token'))) { \session::put('error','payment failed'); return redirect::route('addmoney.paywithpaypal'); } $payment = payment::get($payment_id, $this->_api_context); /** paymentexecution object includes information necessary **/ /** execute paypal account payment. **/ /** payer_id added request query parameters **/ /** when user redirected paypal site **/ $execution = new paymentexecution(); $execution->setpayerid(input::get('payerid')); /**execute payment **/ $result = $payment->execute($execution, $this->_api_context); /** dd($result);exit; /** debug result, remove later **/ if ($result->getstate() == 'approved') { /** it's right **/ /** here write database logic insert record or value in database if want **/ \session::put('success','payment success'); return redirect::route('addmoney.paywithpaypal'); } \session::put('error','payment failed'); return redirect::route('addmoney.paywithpaypal'); } }
step 7: create view
in last step, let's create paywithpaypal.blade.php(resources/views/paywithpaypal.blade.php) layout , write design code here , form pay amount paypal, put following code: resources/views/paywithpaypal.blade.php
@extends('layouts.app') @section('content') <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <div class="panel panel-default"> @if ($message = session::get('success')) <div class="custom-alerts alert alert-success fade in"> <button type="button" class="close" data-dismiss="alert" aria-hidden="true"></button> {!! $message !!} </div> <?php session::forget('success');?> @endif @if ($message = session::get('error')) <div class="custom-alerts alert alert-danger fade in"> <button type="button" class="close" data-dismiss="alert" aria-hidden="true"></button> {!! $message !!} </div> <?php session::forget('error');?> @endif <div class="panel-heading">paywith paypal</div> <div class="panel-body"> <form class="form-horizontal" method="post" id="payment-form" role="form" action="{!! url::route('addmoney.paypal') !!}" > {{ csrf_field() }} <div class="form-group{{ $errors->has('amount') ? ' has-error' : '' }}"> <label for="amount" class="col-md-4 control-label">amount</label> <div class="col-md-6"> <input id="amount" type="text" class="form-control" name="amount" value="{{ old('amount') }}" autofocus> @if ($errors->has('amount')) <span class="help-block"> <strong>{{ $errors->first('amount') }}</strong> </span> @endif </div> </div> <div class="form-group"> <div class="col-md-6 col-md-offset-4"> <button type="submit" class="btn btn-primary"> paywith paypal </button> </div> </div> </form> </div> </div> </div> </div> </div> @endsection
now ready run our example run bellow command ro quick run:
php artisan serve
now can open bellow url on browser:
http://localhost:8000/paywithpaypal
please visit toturials link..
Comments
Post a Comment