问题
How to Integrate Paypal Payment gateway in Laravel? I tried this http://www.17educations.com/laravel/paypal-integration-in-laravel/ but config have some problem,Please anybody say some ideas
回答1:
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
we are going from scratch, So we require to get fresh Laravel application using bellow command, So open your terminal OR command prompt and run bellow command:
composer create-project --prefer-dist laravel/laravel blog
Step 2 : Database Configuration
In this step, we require to make database configuration, you have to add
following details on your .env file.
1.Database Username
1.Database Password
1.Database Name
In .env file also available host and port details, you can configure all details as in your system, So you can put like as bellow: .env
DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
Step 3 : Install Required Packages
We have required following 2 packages for integrate paypal payment in our laravel application.
add following two package in your composer.json file.
"guzzlehttp/guzzle": "~5.4",
"paypal/rest-api-sdk-php": "*",
then after run following command in your terminal. vendor:publish command is used to copy few configuration file in your application from vendor package file.
php artisan vendor:publish
after run this command, then after automatic create paypal.php file in your config/paypal.php path.
Step 4 : Configuration paypal.php file
<?php
return array(
/** set your paypal credential **/
'client_id' =>'paypal client_id',
'secret' => 'paypal secret ID',
/**
* SDK configuration
*/
'settings' => array(
/**
* Available option 'sandbox' or 'live'
*/
'mode' => 'sandbox',
/**
* Specify the max request time in seconds
*/
'http.ConnectionTimeOut' => 1000,
/**
* Whether want to log to a file
*/
'log.LogEnabled' => true,
/**
* Specify the file that want to write on
*/
'log.FileName' => storage_path() . '/logs/paypal.log',
/**
* Available option 'FINE', 'INFO', 'WARN' or 'ERROR'
*
* Logging is most verbose in the 'FINE' level and decreases as you
* proceed towards ERROR
*/
'log.LogLevel' => 'FINE'
),
);
Step 5: Create Route
In this is step we need to create route for paypal payment. so open your routes/web.php file and 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 this point, now we should create new controller as AddMoneyController in this path app/Http/Controllers/AddMoneyController.php. this controller will manage layout and payment post request, So run bellow command for generate new controller:
php artisan make:controller AddMoneyController
Ok, now 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;
/** All 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 a 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 the application paywith paypalpage.
*
* @return \Illuminate\Http\Response
*/
public function payWithPaypal()
{
return view('paywithpaypal');
}
/**
* Store a details of payment with 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 for inconvenient');
return Redirect::route('addmoney.paywithpaypal');
/** die('Some error occur, sorry for inconvenient'); **/
}
}
foreach($payment->getLinks() as $link) {
if($link->getRel() == 'approval_url') {
$redirect_url = $link->getHref();
break;
}
}
/** add payment ID to session **/
Session::put('paypal_payment_id', $payment->getId());
if(isset($redirect_url)) {
/** redirect to paypal **/
return Redirect::away($redirect_url);
}
\Session::put('error','Unknown error occurred');
return Redirect::route('addmoney.paywithpaypal');
}
public function getPaymentStatus()
{
/** Get the payment ID before session clear **/
$payment_id = Session::get('paypal_payment_id');
/** clear the 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 **/
/** 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->setPayerId(Input::get('PayerID'));
/**Execute the payment **/
$result = $payment->execute($execution, $this->_api_context);
/** dd($result);exit; /** DEBUG RESULT, remove it later **/
if ($result->getState() == 'approved') {
/** it's all right **/
/** Here Write your database logic like that insert record or value in database if you want **/
\Session::put('success','Payment success');
return Redirect::route('addmoney.paywithpaypal');
}
\Session::put('error','Payment failed');
return Redirect::route('addmoney.paywithpaypal');
}
}
Now we are ready to run our example so run bellow command ro quick run:
php artisan serve
Now you can open bellow URL on your browser:
http://localhost:8000/paywithpaypal
please visit this toturials link..
https://www.youtube.com/watch?v=ly2xm_NM46g
http://laravelcode.com/post/how-to-integrate-paypal-payment-gateway-in-laravel-54
回答2:
What are you trying to achieve with PayPal and what problems are you having?
I would advise avoiding the paypal SDK and instead use Omnipay from the PHP league. See http://omnipay.thephpleague.com/ and https://github.com/thephpleague/omnipay-paypal
If you download the omnipay library you will see some examples in the various class headers. You will need to implement calls to purchase() and then have a returnUrl and a cancelUrl, and in your returnUrl you will need to implement a call to completePurchase().
If you tell me what you're trying to achieve I can give you some code examples.
回答3:
Well as of right now here are some simpler options for laravel:
- Omnipay - Multiple Gateways but no subscriptions (great docs)
- Payum - Multiple Gatways with subscriptions (docs suck)
- Srmklive/Paypal - Only paypal with subscriptions (great docs and very active)
The first 2 are framework agnostic, which means you can directly use them but you will have to configure it for laravel, but if you want the easy way around for laravel you should use a wrapper for laravel. Which means that you just have to work with the wrapper and not the library itself. There are tons of wrappers for both of them.
For those who just want to work with paypal then look no further, Srmklive's paypal package is just awesome.
来源:https://stackoverflow.com/questions/32900917/how-to-integrate-paypal-payment-gateway-in-laravel