2016-11-13 1 views
0

Я просто думаю о том, что мне нужно интегрировать метод оплаты для моего сайта. Мой сайт разработан в laravel. Вот почему я ищу способ добавить интеграцию PayPal. My site Вы можете посетить.Метод оплаты Paypal в Laravel

ответ

0

Follow пыльник Немного Шаг:
1) Установка Laravel Применение
2) База данных конфигурации
3) Установите необходимые пакеты
4) конфигурации paypal.php файл
5) создание маршрута
6) создать контроллер
7) создать файл представления

Шаг 1: Установка Laravel Применение
мы будем с нуля, поэтому мы требуем, чтобы получить свежие приложения Laravel с помощью сильфона команды, так открыть терминал или командную строку и выполните команду: сильфона

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

Шаг 2: База данных конфигурации
На этом этапе нам необходимо создать конфигурацию базы данных, вы должны добавить
следующие данные в вашем .ENV-файле.
1.Database Имя пользователя
1.Database Пароль
1.Database Имя

В .env файле также доступны хоста и порта детали, вы можете настроить все детали, как в вашей системе, Таким образом, вы можете поставить вроде как ниже: .env

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

Шаг 3: Установка обязательных пакетов
Для выполнения оплаты в нашем ларавеле у нас есть следующие 2 пакета. добавьте следующие два пакета в ваш файл composer.json.

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

затем после запуска следующей команды в терминале

php artisan vendore:publlish 

после запуска этой команды, то после автоматического создания файла paypal.php в вашем конфигурации/paypal.php пути.

Шаг 4: Конфигурация paypal.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' 
    ), 
); 

Шаг 5: Создание маршрута
В это шаг нам нужно создать маршрут для компенсации PayPal. поэтому откройте свой файл маршрутов/web.php и добавьте следующий маршрут. маршруты/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]',)); 

Шаг 6: Создание контроллера
В этой точке, теперь мы должны создать новый контроллер как AddMoneyController на этом пути приложение/Http/Контроллеры/AddMoneyController.php , этот контроллер будет управлять раскладкой и запросом оплаты после, Так бегите сильфон команды для создания нового контроллера:

php artisan make:controller AddMoneyController 

Хорошо, теперь положить сильфон содержимого в файле контроллер:
приложение/HTTP/Контроллерах/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'); 
    } 
    } 

Шаг 7: Создание Просмотр
В последнем шаге, давайте создадим paywithpaypal.blade.php (ресурсы/виды/paywithpaypal.blade.php) для Льего т, и мы будем писать код дизайна здесь, а также форму для суммы оплатить, Так положили следующий код: ресурсов/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 

Теперь мы готовы запустить наш пример так запустить сильфон команды ро быстрого запуска:

php artisan serve 

Теперь вы можете открыть сильфон URL в вашем браузере:

http://localhost:8000/paywithpaypal 

пожалуйста посетите эту ссылку по тоталам ..

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

Смежные вопросы