ララベル+ PayPal -パート2 : Integra


COM OシステムズベースJは、定義されています.
不当利得のための不当利得のためのA . A . Abordagem que .
Developers PayPal
サンドボックス
AP通信のsは、naを引きます.<研究ノート>サンボックにおけるドリア・ティームの現実的意義Nesse Projeto iRemosの利用は、砂の箱、Porのmクァンドンチェガーは、hora de colocar seu projeto em produの節をo、basta seguir os mesmos passos masのアンビエンテのライブ.

AP通信の選択セリオナノイアンビアンテデサンドボックスは、credenciaisパラo nossoアプリとしてのプリソリクリヤー、パライズソ、basta clicarなしボットは、アプリを作成します.

P .エッセ・プロジェクト・ポール・プエ・プエ・メイ・インジェラド・パラ・エッセ『ティポ・デ』

AP通信は、クリアーOのアプリは、serのAppresentado UMAのTETAのCOMのIDのIDの秘密のアプリは、n ' sのiRemos利用者Elzzar Elesマリスパラfrente、entのo oガードデエッセInformaのシーズ.
パラオステスデPagamentoは、Necessを得ます.項目のアカウントは、メニューのサンドボックスを行います.


como funcionaのOSボット
利用可能なOSのボットは、デPagamentoはPayPalをするPayPalをする.エヌFuncionaデ馬鹿Forumは、seu - siistema、onde ao clicar noボットo o o、o usuええrioを意味します.AP通信は、o o Paypal Processar Aトランスo o o、o usuは、o o seo - siistema、onde assim、onc - assim、voc - de pode realizarに、Finaliza Spliety o o da Prpra、Informaとしてのサルバンドゥとしてのサルビアです.

AP通信のエンタテインメントcomo funcionaエッセmは、todoデIntegra Sounds - o o com O PayPalのものです.

クリッドP .ジジーナドフィルム
Prime a a a a a a a a a a a o o o com o o Payiso existir uma ple ggononde are apresentado o filme de forma個々のパラオo o usumovies/show.blade.php
<x-app-layout>
    <x-slot name="header">
        <h2 class="font-semibold text-xl text-gray-800 leading-tight">
            {{ __('Detalhes filme') }}
        </h2>
    </x-slot>

    <div class="py-12">
        <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
            <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
                <div class="p-6 bg-white border-b border-gray-200 flex justify-center">
                    <div class="flex flex-wrap justify-around border-0 rounded w-9/12 p-5 bg-gray-100">
                        <div class="w-1/3 flex justify-center">
                            <img src="{{ $movie->image }}" alt="">
                        </div>
                        <div class="w-2/3 flex flex-col justify-between">
                            <div>
                                <h1 class="font-bold text-2xl">{{ $movie->title }}</h1>
                            </div>
                            <div>
                                <p>
                                    {{ $movie->overview }}
                                </p>
                            </div>
                            <div class="flex justify-evenly">
                                <button id="purchase" value="{{ $movie->purchase_price }}" class="cursor-pointer w-auto p-2 border border-red-500 rounded bg-red-500 text-white">Aluguel: R${{ $movie->purchase_price }}</button>
                                <button id="rental" value="{{ $movie->rental_price }}" class="cursor-pointer w-auto p-2 border border-red-500 rounded text-red-500">Compra: R${{ $movie->rental_price }}</button>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</x-app-layout>
NOVコントローラO O Comandophp artisan make:controller MovieControllerアッシム:
<?php

namespace App\Http\Controllers;

use App\Models\Movie;

class MovieController extends Controller
{
    public function show(Movie $movie) {
        return view("movie.show", ["movie" => $movie]);
    }
}
E Criamos馬馬ロタパラシュートで降下する人ACessarエサP .PHP
Route::get("/movie/{movie}", [MovieController::class, "show"])->middleware(['auth'])->name("movie.show");
com isso、nossa pξginaデfilme個々のjの接尾語、porのmエラアイダダnのde o o poo ser acessada pelos usuは、rios、para isso vamos adicionar umリンクna view home .ブレード.PHP
<x-app-layout>
    <x-slot name="header">
        <h2 class="font-semibold text-xl text-gray-800 leading-tight">
            {{ __('Filmes disponíveis') }}
        </h2>
    </x-slot>

    <div class="py-12">
        <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
            <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
                <div class="p-6 bg-white border-b border-gray-200">
                    <div class="flex flex-wrap justify-around">
                        @foreach ($movies as $movie)
                            <div class="w-60 rounded shadow-xl m-2 bg-gray-100">
                                <img src="{{ $movie->image }}" class="h-auto w-full" alt="...">
                                <div class="px-6 py-4">
                                    <h5 class="font-bold text-xl mb-2">{{ $movie->title}}</h5>
                                    {{-- Adicionando link --}}
                                    <a href="{{ route('movie.show', $movie) }}" class="py-1 font-semibold text-blue-500 mr-4">Alugar</a>
                                    <a href="{{ route('movie.show', $movie) }}" class="py-1 font-semibold text-blue-500 mr-4">Comprar</a>
                                </div>
                            </div>
                        @endforeach
                    </div>
                </div>
            </div>
        </div>
    </div>
</x-app-layout>
『アゴラ』におけるデスメモス・ターエッセ


Adicionando OSボット
o Primeiro Passo Para A Integra Ses - Astro o o Imperar o SDKは、JavaScript NA P - Genをします.いいえArquivoアプリ.ブレード.PHP adadone essa linha na are a rea de import a dose seusスクリプト
<script src="https://www.paypal.com/sdk/js?client-id=YOUR_CLIENT_ID"></script>
com isso、jは、s posesをします、そして、Vsは、Paypal EM Qualker Lugarをします.パラiSSO、Modificamos O Cはdida da nossaビューを表示します.ブレード.PHP
<x-app-layout>
    <x-slot name="header">
        <h2 class="font-semibold text-xl text-gray-800 leading-tight">
            {{ __('Detalhes filme') }}
        </h2>
    </x-slot>

    <div class="py-12">
        <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
            <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
                <div class="p-6 bg-white border-b border-gray-200 flex justify-center">
                    <div class="flex flex-wrap justify-around border-0 rounded w-9/12 p-5 bg-gray-100">
                        <div class="w-1/3 flex justify-center">
                            <img src="{{ $movie->image }}" alt="">
                        </div>
                        <div class="w-2/3 flex flex-col justify-between">
                            <div>
                                <h1 class="font-bold text-2xl">{{ $movie->title }}</h1>
                            </div>
                            <div>
                                <p>
                                    {{ $movie->overview }}
                                </p>
                            </div>
                            <div class="flex justify-evenly">
                                <button id="purchase" value="{{ $movie->purchase_price }}" class="cursor-pointer w-auto p-2 border border-red-500 rounded bg-red-500 text-white">Aluguel: R${{ $movie->purchase_price }}</button>
                                <button id="rental" value="{{ $movie->rental_price }}" class="cursor-pointer w-auto p-2 border border-red-500 rounded text-red-500">Compra: R${{ $movie->rental_price }}</button>
                            </div>
                            <div class="h-1/4" id="paypal-button-container"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <script>
        paypal.Buttons().render('#paypal-button-container')
    </script>
</x-app-layout>
COMのESSEスクリプトは、OSのボットは、esのPayPal jのAUのclicarは、e jのlareionionaパラオo serviのエドのためにPayPal porのmエレainda n
<x-app-layout>
    <x-slot name="header">
        <h2 class="font-semibold text-xl text-gray-800 leading-tight">
            {{ __('Detalhes filme') }}
        </h2>
    </x-slot>

    <div class="py-12">
        <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
            <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
                <div class="p-6 bg-white border-b border-gray-200 flex justify-center">
                    <div class="flex flex-wrap justify-around border-0 rounded w-9/12 p-5 bg-gray-100">
                        <div class="w-1/3 flex justify-center">
                            <img src="{{ $movie->image }}" alt="">
                        </div>
                        <div class="w-2/3 flex flex-col justify-between">
                            <div>
                                <h1 class="font-bold text-2xl">{{ $movie->title }}</h1>
                            </div>
                            <div>
                                <p>
                                    {{ $movie->overview }}
                                </p>
                            </div>
                            <div class="flex justify-evenly">
                                <button onclick="handleButtonClick({{ $movie->purchase_price }}, 'purchase')" id="purchase" value="{{ $movie->purchase_price }}" class="cursor-pointer w-auto p-2 border border-red-500 rounded bg-red-500 text-white">Aluguel: R${{ $movie->purchase_price }}</button>
                                <button onclick="handleButtonClick({{ $movie->rental_price }}, 'rental')" id="rental" value="{{ $movie->rental_price }}" class="cursor-pointer w-auto p-2 border border-red-500 rounded text-red-500">Compra: R${{ $movie->rental_price }}</button>
                            </div>
                            <div class="h-1/4" id="paypal-button-container"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <script>

        const changeSelectedButton = () => {
            const selectedButton = document.getElementsByClassName("bg-red-500")[0]
            const newSelectedButton = document.getElementsByClassName("text-red-500")[0]

            selectedButton.classList.remove("bg-red-500", "text-white")
            selectedButton.classList.add("text-red-500", "bg-white")

            newSelectedButton.classList.remove("text-red-500", "bg-white")
            newSelectedButton.classList.add("bg-red-500", "text-white")
        }

        const generatePayPalButton = (price, type) => {
            paypal.Buttons({
                createOrder: function(data, actions) {
                    return actions.order.create({
                        purchase_units: [{
                            amount: {
                                value: price
                            }
                        }]
                    })
                },
                onApprove: function(data, actions) {
                    return actions.order.capture().then(function(details) {
                        console.log(details)
                        alert('Transaction completed by ' + details.payer.name.given_name)
                    })
                },
                style: {
                    height: 30
                }
            }).render("#paypal-button-container")
        }

        const handleButtonClick = (price, type) => {
            changeSelectedButton()

            document.getElementById("paypal-button-container").innerHTML = ""

            generatePayPalButton(price, type)
        }

        generatePayPalButton(@json($movie->purchase_price))
    </script>
</x-app-layout>
AP通信は、エサAlteraを形づくっています、nは、sの3つの楽しみがそうであると感じます.

  • ChangeSelectButtonは:楽しいミサは、Oを提供しています排他的なサーブ排他的なトロイの木馬は、CSSのdo do o elecionado

  • GeneratePayPalButton(価格):楽しいMarsのo o queは、パラGerar um novoボットに基づきます.na funは、oボタンを使います.CreateOrderは、コンフィギュレーションDesは、Innoura Des bot es o、nososo caso、estamos passando somente o valor da compra e - umaの所有者のスタイルを定義します.Jは、楽しい味方のoを承認します.

  • HandleButtonClick(価格):楽しい同類のo ondeは、disparadaペソEvento OnClickドスボットである.Volは、Pal Pal Pal PayPal存在者Gerar um novoをベルします.
  • 観察者のための観察:カオ・ヴォ-・・・Coco Voc

    インテグラッドOSボット
    AP通信は、Coclocar OSボットは、PayPalをします.パラISSO、Priisamos Criar um rotaデAPIのないArquivoルート/API.PHP
    <?php
    
    use App\Http\Controllers\MovieController;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Route;
    
    Route::post("/movie/{movie}/buy", [MovieController::class, "buy"])->name("movie.buy");
    
    P . S . ISSOについて
    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use App\Models\Movie;
    use Carbon\Carbon;
    
    class MovieController extends Controller
    {
        ...
    
        public function buy(Request $request, Movie $movie) {
            $movie->users()->attach($request->get('user_id'), [
                "acquired_in" => Carbon::now(),
                "expires_at" => $request->get("type") == "purchase" ? Carbon::now()->addMonth() : null
            ]);
    
            return response()->json([
                "message" => "Compra realizada com sucesso!",
                "movie" => $movie->load('users')
            ]);
        }
    }
    
    エサ楽しみは、oを買います‖ええインサールna tabela中間体RIA(MovieLunUser)データe Aバリデーション(um aluguelのためのcaso)は、filmeをします.como nのo o foi usado um sistema de login de api,nはvamos passar o id do usuのreo pelo体daのrensiの祖先をo o o o o
    pは、sを支持しますO楽しい楽しみは、oをバックします.
    <script>
    ...
    
            const saveOnBack = async (type) => {
                const user_id = @json(auth()->id())
    
                const movie_id = @json($movie->id)
    
                const resp = await fetch(`/api/movie/${movie_id}/buy`, {
                    method: "POST",
                    body: JSON.stringify({
                        type: type,
                        user_id: user_id
                    }),
                    header: new Headers({
                        "Content-Type": "application/json"
                    })
                })
                const json = await resp.json()
    
                alert(json.message)
            }
    
            const generatePayPalButton = (price, type) => {
                paypal.Buttons({
                    createOrder: function(data, actions) {
                        return actions.order.create({
                            purchase_units: [{
                                amount: {
                                    value: price
                                }
                            }]
                        })
                    },
                    onApprove: function(data, actions) {
                        return actions.order.capture().then(function(details) {
                            saveOnBack(type)
                        })
                    },
                    style: {
                        height: 30
                    }
                }).render("#paypal-button-container")
            }
    
    ...
    
    </script>
    
    Na Fun Specio o saveonback oは、nをenevamos o tipoデcompra e o idをします.

    最終報告書
    <論説>エズソ,デレモス・ター・エッセ

    テレラ


    個人情報


    アゴラ?
    com isso finalizamosエサインテグラは、oは、o o o oのJavaScript、EaフォイFeitaデforma Simes Fosada na Integra Sexe o o com O Paypalです.Paltos Alpouns Pontos onde - Les Melhorar o C c didi Digo , Mas Isso fica como um desafifio para quem fizer Ea integra es , o , alguns pontos s o o o :
  • diferenciar quando o usuは、riclnoのボットを使用していません
  • verificar e limit ar somente a ma compra por filme
  • <研究ノート>第二次世界大戦前におけるマラリアに関する一考察

    nciasを参照

    https://laravel.com/docs/8.x
    https://developer.mozilla.org/pt-BR/docs/Web/API/Fetch_API/Using_Fetch
    https://developer.paypal.com/docs/checkout/
    https://developer.paypal.com/docs/checkout/integrate/