2017-03-22 2 views
0

j'ai utilisé Laravel dans mon projet. Dans mon projet utilisant paypal pour le module de paiement. Transactions de paiement Paypal effectuées avec succès. Mais je veux intégrer l'auditeur IPN dans Laravel. Je ne sais pas comment intégrer écouteur IPN dans le contrôleur de Laravel.Comment coder paypal IPN auditeur dans Laravel

Merci avancé, Saran

Répondre

1

Suivez Bellow quelques pas:
1) Installer Laravel application
2) configuration de base de données
3) installer les packages requis
4) configuration fichier paypal.php
5) créer itinéraire
6) créer contrôleur
7) créer un fichier de vue

Etape 1: Installez Laravel application
nous allons à partir de zéro, donc nous avons besoin de obtenir l'application fraîche Laravel en utilisant la commande ci-dessous, donc ouvrez votre terminal OU invite de commande et exécutez la commande ci-dessous:

 
composer create-project --prefer-dist laravel/laravel blog 

Étape 2: Configuration Database
Dans cette étape, nous avons besoin de faire la configuration de base de données, vous devez ajouter
détails suivants sur votre fichier .env.
1.Database Nom d'utilisateur
1.Database Mot de passe
1.Database Nom

Dans .env fichier également hôte disponibles et les détails port, vous pouvez configurer tous les détails que dans votre système, vous pouvez donc comme comme ci-dessous: .env

DB_HOST=localhost 
DB_DATABASE=homestead 
DB_USERNAME=homestead 
DB_PASSWORD=secret 

Étape 3: installation de paquets requis
Nous avons requis à la suite 2 packages pour intégrer le paiement par PayPal dans notre application Laravel. ajoutez deux paquet suivant dans votre fichier composer.json.

"guzzlehttp/guzzle": "~5.4", 
"paypal/rest-api-sdk-php": "*", 

puis après l'exécution commande suivante dans votre terminal

php artisan vendore:publlish 

après l'exécution de cette commande, puis après le fichier automatique de créer paypal.php dans votre chemin config/paypal.php.

Etape 4: paypal Configuration.fichier php

<?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' 
    ), 
); 

Étape 5: Créer un chemin
Dans c'est pas, nous devons créer la route pour le paiement par PayPal. alors ouvrez votre fichier routes/web.php et ajoutez l'itinéraire suivant. routes/web.php

Route::get('paywithpaypal', array('as' => 'addmoney.paywithpaypal','uses' => '[email protected]',)); 
Route::post('paypal', array('as' => 'addmoney.paypal','uses' => '[email protected]',)); 
Route::get('paypal', array('as' => 'payment.status','uses' => '[email protected]',)); 

Étape 6: Créer contrôleur
Dans ce point, maintenant, nous devons créer un nouveau contrôleur comme AddMoneyController dans cette voie app/Http/Contrôleurs/AddMoneyController.php . ce contrôleur va gérer la mise en page et demande de poste de paiement, donc exécuter la commande ci-dessous pour générer un nouveau contrôleur:

php artisan make:controller AddMoneyController 

Ok, maintenant mettre du contenu ci-dessous dans le fichier du contrôleur:
app/Http/Contrôleurs/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'); 
    } 
    } 

étape 7: Créer une vue
En dernière étape, nous allons créer paywithpaypal.blade.php (ressources/vues/paywithpaypal.blade.php) pour layou t et nous allons écrire le code de conception ici et aussi pour former le montant de payer par paypal, donc placer le code suivant: ressources/vues/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 

Maintenant, nous sommes prêts à exécuter notre exemple si exécuter la commande ci-dessous ro course rapide:

php artisan serve 

vous pouvez maintenant ouvrir l'URL ci-dessous sur votre navigateur:

http://localhost:8000/paywithpaypal 

s'il vous plaît visitez ce lien toturials ..

https://www.youtube.com/watch?v=ly2xm_NM46g