{"id":29696,"date":"2021-06-21T16:38:00","date_gmt":"2021-06-21T13:38:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29696"},"modified":"2021-10-18T03:30:28","modified_gmt":"2021-10-18T00:30:28","slug":"integracja-bramki-platnosci-paypal-w-laravel","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/integracja-bramki-platnosci-paypal-w-laravel\/","title":{"rendered":"Integracja bramki p\u0142atno\u015bci PayPal w Laravel"},"content":{"rendered":"<p>Niedawno opublikowa\u0142em artyku\u0142 na temat <a href=\"https:\/\/themewp.inform.click\/pl\/integracja-paypal-payment-gateway-w-php-za-pomoca-paypal-rest-api\/\" title=\"integracji PayPal Payment Gateway w PHP\" >integracji PayPal Payment Gateway w PHP<\/a>. W tym artykule jeden z naszych czytelnik\u00f3w zapyta\u0142 o integracj\u0119 bramki p\u0142atno\u015bci PayPal w Laravel. Chocia\u017c Laravel jest zbudowany przy u\u017cyciu PHP, ma w\u0142asne standardy, kt\u00f3rych nale\u017cy przestrzega\u0107. Musisz dostosowa\u0107 sw\u00f3j zwyk\u0142y kod PHP zgodnie z przep\u0142ywem Laravel. W tym artykule poka\u017c\u0119 Ci, jak zaakceptowa\u0107 p\u0142atno\u015bci na swojej stronie Laravel za pomoc\u0105 PayPal Rest API.<\/p>\n<p>PayPal to jedna z najbardziej zaufanych marek akceptuj\u0105cych p\u0142atno\u015bci online. PayPal udost\u0119pnia r\u00f3\u017cne sposoby integracji swojego systemu p\u0142atno\u015bci z aplikacjami internetowymi. Jedn\u0105 z us\u0142ug jest PayPal Rest API, kt\u00f3rego u\u017cyjemy w tym samouczku. Aby rozpocz\u0105\u0107, musisz najpierw pobra\u0107 identyfikator klienta i klucz klienta.<\/p>\n<p>Przejd\u017a do swojego konta <a href=\"https:\/\/developer.paypal.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">programisty PayPal<\/a> i zaloguj si\u0119 do niego. W panelu programisty kliknij menu \u201eMoje aplikacje i dane logowania&quot;. Nast\u0119pnie kliknij przycisk \u201eUtw\u00f3rz aplikacj\u0119&#8221; w sekcji Aplikacje REST API.<\/p>\n<p>Post\u0119puj zgodnie z instrukcjami, aby uzyska\u0107 dost\u0119p do piaskownicy i po\u015bwiadcze\u0144 na \u017cywo. Na razie skopiuj identyfikator klienta i klucz klienta trybu piaskownicy.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20136-6081c137ee496.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20136-6081c137ee496.png\" alt=\"Integracja bramki p\u0142atno\u015bci PayPal w Laravel\" ><\/a><\/p>\n<h3>Podstawowa konfiguracja w Laravel do akceptowania p\u0142atno\u015bci przez PayPal<\/h3>\n<p>Kiedy klienci dokonuj\u0105 p\u0142atno\u015bci w Twojej witrynie, musisz przechowywa\u0107 szczeg\u00f3\u0142y p\u0142atno\u015bci do p\u00f3\u017aniejszego wykorzystania. Utw\u00f3rz tabel\u0119 \u201ep\u0142atno\u015bci&#8221; w bazie danych, aby przechowywa\u0107 szczeg\u00f3\u0142y p\u0142atno\u015bci. Utw\u00f3rz migracj\u0119 dla tabeli \u201ep\u0142atno\u015bci&#8221; za pomoc\u0105 polecenia:<\/p>\n<pre><code>php artisan make:migration create_payments_table<\/code><\/pre>\n<p>Otw\u00f3rz plik migracji i zmodyfikuj kolumny w nast\u0119puj\u0105cy spos\u00f3b.<\/p>\n<pre><code>&lt;?php\n...\n...\npublic function up()\n{\n\u00a0\u00a0\u00a0\u00a0Schema::create('payments', function (Blueprint $table) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;bigIncrements('id');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('payment_id');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('payer_id');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('payer_email');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;float('amount', 10, 2);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('currency');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('payment_status');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;timestamps();\n\u00a0\u00a0\u00a0\u00a0});\n}<\/code><\/pre>\n<p>Wykonaj powy\u017csz\u0105 migracj\u0119 za pomoc\u0105 poni\u017cszego polecenia.<\/p>\n<pre><code>php artisan migrate<\/code><\/pre>\n<p>To polecenie utworzy w Twojej bazie danych tabel\u0119 \u201ep\u0142atno\u015bci&#8221;. Nast\u0119pnie utw\u00f3rz model odpowiadaj\u0105cy tabeli \u201ep\u0142atno\u015bci&#8221;.<\/p>\n<pre><code>php artisan make:model Payment<\/code><\/pre>\n<p>Nast\u0119pnie dodaj po\u015bwiadczenia PayPal w swoim <code>.env<\/code>pliku.<\/p>\n<pre><code>PAYPAL_CLIENT_ID=PASTE_HERE_CLIENT_ID\nPAYPAL_CLIENT_SECRET=PASTE_HERE_CLIENT_SECRET\nPAYPAL_CURRENCY=USD<\/code><\/pre>\n<p>Wyczy\u015b\u0107 pami\u0119\u0107 podr\u0119czn\u0105 konfiguracji za pomoc\u0105 polecenia:<\/p>\n<pre><code>php artisan config:cache<\/code><\/pre>\n<p>Przekaza\u0142em walut\u0119 \u201eUSD&#8221;. U\u017cytkownik mo\u017ce to zmieni\u0107 zgodnie z wymaganiami.<\/p>\n<p>Zdefiniujmy trasy, kt\u00f3rych b\u0119dziemy potrzebowa\u0107 w kolejnych krokach.<\/p>\n<p><strong>trasy\/web.php<\/strong><\/p>\n<pre><code>&lt;?php\n...\n...\nRoute::get('payment', 'PaymentController@index');\nRoute::post('charge', 'PaymentController@charge');\nRoute::get('paymentsuccess', 'PaymentController@payment_success');\nRoute::get('paymenterror', 'PaymentController@payment_error');<\/code><\/pre>\n<h3>Integracja bramki p\u0142atno\u015bci PayPal w Laravel<\/h3>\n<p>Zintegrowanie API bramek p\u0142atno\u015bci w aplikacji to do\u015b\u0107 skomplikowana sprawa. Na szcz\u0119\u015bcie biblioteka Omnipay u\u0142atwi\u0142a \u017cycie programistom. <a href=\"https:\/\/github.com\/thephpleague\/omnipay\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Omnipay<\/a> to najpopularniejsza biblioteka przetwarzania p\u0142atno\u015bci dla PHP. Daje \u0142atwy i czysty kod do integracji r\u00f3\u017cnych bramek p\u0142atno\u015bci. Zainstaluj bibliotek\u0119 Omnipay za pomoc\u0105 polecenia:<\/p>\n<pre><code>composer require league\/omnipay omnipay\/paypal<\/code><\/pre>\n<p>Teraz utw\u00f3rz kontroler <code>PaymentController<\/code>i zdefiniuj metody wymienione w pliku trasy.<\/p>\n<pre><code>php artisan make:controller PaymentController<\/code><\/pre>\n<p><strong>PaymentController.php<\/strong><\/p>\n<pre><code>&lt;?php\n\u00a0\u00a0\nnamespace AppHttpControllers;\n\u00a0\u00a0\nuse IlluminateHttpRequest;\nuse OmnipayOmnipay;\nuse AppPayment;\n\u00a0\u00a0\nclass PaymentController extends Controller\n{\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public $gateway;\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function __construct()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;gateway = Omnipay::create('PayPal_Rest');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;gateway-&gt;setClientId(env('PAYPAL_CLIENT_ID'));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;gateway-&gt;setSecret(env('PAYPAL_CLIENT_SECRET'));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;gateway-&gt;setTestMode(true); \/\/set it to 'false' when go live\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function index()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return view('payment');\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function charge(Request $request)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($request-&gt;input('submit'))\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0try {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = $this-&gt;gateway-&gt;purchase(array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'amount' =&gt; $request-&gt;input('amount'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'currency' =&gt; env('PAYPAL_CURRENCY'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'returnUrl' =&gt; url('paymentsuccess'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'cancelUrl' =&gt; url('paymenterror'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0))-&gt;send();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($response-&gt;isRedirect()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response-&gt;redirect(); \/\/ this will automatically forward the customer\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ not successful\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $response-&gt;getMessage();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $e-&gt;getMessage();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function payment_success(Request $request)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Once the transaction has been approved, we need to complete it.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($request-&gt;input('paymentId') &amp;&amp; $request-&gt;input('PayerID'))\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$transaction = $this-&gt;gateway-&gt;completePurchase(array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'payer_id'\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 =&gt; $request-&gt;input('PayerID'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'transactionReference' =&gt; $request-&gt;input('paymentId'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = $transaction-&gt;send();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($response-&gt;isSuccessful())\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ The customer has successfully paid.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$arr_body = $response-&gt;getData();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Insert transaction data into the database\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$isPaymentExist = Payment::where('payment_id', $arr_body['id'])-&gt;first();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if(!$isPaymentExist)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment = new Payment;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment-&gt;payment_id = $arr_body['id'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment-&gt;payer_id = $arr_body['payer']['payer_info']['payer_id'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment-&gt;payer_email = $arr_body['payer']['payer_info']['email'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment-&gt;amount = $arr_body['transactions'][0]['amount']['total'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment-&gt;currency = env('PAYPAL_CURRENCY');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment-&gt;payment_status = $arr_body['state'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment-&gt;save();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"Payment is successful. Your transaction id is: \". $arr_body['id'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $response-&gt;getMessage();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return 'Transaction is declined';\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function payment_error()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return 'User is canceled the payment.';\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n}<\/code><\/pre>\n<p>W powy\u017cszym kontrolerze pobieramy kwot\u0119 z formularza HTML i wysy\u0142amy u\u017cytkownika do PayPal do zap\u0142aty. Po pomy\u015blnej p\u0142atno\u015bci przechowujemy wszystkie szczeg\u00f3\u0142y transakcji w tabeli \u201ep\u0142atno\u015bci&#8221;.<\/p>\n<p>Na koniec utw\u00f3rz plik blade o nazwie <code>payment.blade.php<\/code>i dodaj w nim poni\u017cszy kod.<\/p>\n<pre><code>&lt;form action=\"{{ url('charge') }}\" method=\"post\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;input type=\"text\" name=\"amount\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0{{ csrf_field() }}\n\u00a0\u00a0\u00a0\u00a0&lt;input type=\"submit\" name=\"submit\" value=\"Pay Now\"&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Kiedy prze\u015blemy ten formularz, kontrola przechodzi do <code>charge<\/code>funkcji w <code>PaymentController<\/code>i kontroler przetwarza reszt\u0119 przep\u0142ywu p\u0142atno\u015bci.<\/p>\n<h3>Wy\u015blij informacje o produkcie do PayPal<\/h3>\n<p>W poprzednich krokach wysy\u0142amy kwot\u0119 do zap\u0142aty na PayPal. Mo\u017cesz r\u00f3wnie\u017c wys\u0142a\u0107 informacje o produkcie. U\u017cytkownik mo\u017ce zobaczy\u0107 te szczeg\u00f3\u0142y produktu na stronie p\u0142atno\u015bci przed dokonaniem p\u0142atno\u015bci.<\/p>\n<p>Aby wys\u0142a\u0107 informacje o produkcie, musisz przekaza\u0107 tablic\u0119 'items&#8217; do <code>purchase<\/code>metody w nast\u0119puj\u0105cy spos\u00f3b.<\/p>\n<pre><code>$response = $this-&gt;gateway-&gt;purchase(array(\n\u00a0\u00a0\u00a0\u00a0'amount' =&gt; $request-&gt;input('amount'),\n\u00a0\u00a0\u00a0\u00a0'items' =&gt; array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'name' =&gt; 'Course Subscription',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'price' =&gt; $request-&gt;input('amount'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'description' =&gt; 'Get access to premium courses.',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'quantity' =&gt; 1\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\n\u00a0\u00a0\u00a0\u00a0),\n\u00a0\u00a0\u00a0\u00a0'currency' =&gt; env('PAYPAL_CURRENCY'),\n\u00a0\u00a0\u00a0\u00a0'returnUrl' =&gt; url('paymentsuccess'),\n\u00a0\u00a0\u00a0\u00a0'cancelUrl' =&gt; url('paymenterror'),\n))-&gt;send();<\/code><\/pre>\n<p>Tutaj przekazuj\u0119 statycznie szczeg\u00f3\u0142y produktu. Powiniene\u015b nada\u0107 mu dynamik\u0119 w zale\u017cno\u015bci od produktu.<\/p>\n<p>Mam nadziej\u0119, \u017ce dowiedzia\u0142e\u015b si\u0119 o integracji bramki p\u0142atno\u015bci PayPal w Laravel. Podziel si\u0119 swoimi przemy\u015bleniami i sugestiami w sekcji komentarzy poni\u017cej.<\/p>\n<h4>Powi\u0105zane artyku\u0142y<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/integracja-bramki-platnosci-authorize-net-w-laravel\/\" title=\"Integracja bramki p\u0142atno\u015bci Authorize.Net w Laravel\">Integracja bramki p\u0142atno\u015bci Authorize.Net w Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/integracja-stripe-payment-gateway-w-laravel\/\" title=\"Integracja Stripe Payment Gateway w Laravel\">Integracja Stripe Payment Gateway w Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/integracja-paykun-payment-gateway-w-laravel\/\" title=\"Integracja PayKun Payment Gateway w Laravel\">Integracja PayKun Payment Gateway w Laravel<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W tym artykule om\u00f3wili\u015bmy integracj\u0119 bramki p\u0142atno\u015bci PayPal w Laravel. PayPal to jedna z najpopularniejszych platform do akceptowania online<\/p>\n","protected":false},"author":1,"featured_media":20137,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[501],"tags":[847],"class_list":["post-29696","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/29696","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/comments?post=29696"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/29696\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/20137"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=29696"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=29696"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=29696"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}