PayPal 통합 Laravel

이 비디오를 팔로우할 수 있습니다.

단계 # 01 :

PayPal 계정 만들기:




https://developer.paypal.com/


계정을 만들면 비디오에 표시된 것처럼 두 가지 옵션이 있습니다. 하나는 샌드박스 계정 옵션이고 다른 하나는 라이브 계정 옵션입니다. 테스트 또는 개발 작업을 하려면 샌드박스 계정을 만들어야 하며 라이브 서버에서 작업하는 경우 라이브 옵션을 사용합니다.



이제 새 앱을 만든 후 클라이언트 ID와 비밀 ID를 볼 수 있습니다.



02단계:

이제 위의 클라이언트 ID와 비밀 ID를 .env 파일에 추가하십시오.



03단계:

이제 모델과 마이그레이션을 추가하고 데이터베이스에 연결해 보겠습니다.

php artisan make:model Payment -m




        Schema::create('payments', function (Blueprint $table) {
            $table->id();
            $table->string('payment_id');
            $table->string('payer_id');
            $table->string('payer_email');
            $table->float('amount', 10, 2);
            $table->string('currency');
            $table->string('payment_status');
            $table->timestamps();
        });



php artisan migrate


04단계:

이제 PayPal API를 애플리케이션에 통합하는 데 사용할 패키지를 설치해 보겠습니다.
composer require league/omnipay omnipay/paypal
단계 # 05:

이제 컨트롤러를 만들어 봅시다.

php artisan make:controller PaymentController


이것은 우리의 컨트롤러 코드가 될 것입니다:


<?php

namespace App\Http\Controllers;

use App\Models\Payment;
use Illuminate\Http\Request;
use Omnipay\Omnipay;

class PaymentController extends Controller
{
    private $gateway;

    public function __construct() {
        $this->gateway = Omnipay::create('PayPal_Rest');
        $this->gateway->setClientId(env('PAYPAL_CLIENT_ID'));
        $this->gateway->setSecret(env('PAYPAL_CLIENT_SECRET'));
        $this->gateway->setTestMode(true);
    }

    public function pay(Request $request)
    {
        try {

            $response = $this->gateway->purchase(array(
                'amount' => $request->amount,
                'currency' => env('PAYPAL_CURRENCY'),
                'returnUrl' => url('success'),
                'cancelUrl' => url('error')
            ))->send();

            if ($response->isRedirect()) {
                $response->redirect();
            }
            else{
                return $response->getMessage();
            }

        } catch (\Throwable $th) {
            return $th->getMessage();
        }
    }

    public function success(Request $request)
    {
        if ($request->input('paymentId') && $request->input('PayerID')) {
            $transaction = $this->gateway->completePurchase(array(
                'payer_id' => $request->input('PayerID'),
                'transactionReference' => $request->input('paymentId')
            ));

            $response = $transaction->send();

            if ($response->isSuccessful()) {

                $arr = $response->getData();

                $payment = new Payment();
                $payment->payment_id = $arr['id'];
                $payment->payer_id = $arr['payer']['payer_info']['payer_id'];
                $payment->payer_email = $arr['payer']['payer_info']['email'];
                $payment->amount = $arr['transactions'][0]['amount']['total'];
                $payment->currency = env('PAYPAL_CURRENCY');
                $payment->payment_status = $arr['state'];

                $payment->save();

                return "Payment is Successfull. Your Transaction Id is : " . $arr['id'];

            }
            else{
                return $response->getMessage();
            }
        }
        else{
            return 'Payment declined!!';
        }
    }

    public function error()
    {
        return 'User declined the payment!';   
    }

}


06단계:

이제 경로를 만들어 봅시다.


Route::get('/', [HomeController::class, 'index']);
Route::post('pay', [PaymentController::class, 'pay'])->name('payment');
Route::get('success', [PaymentController::class, 'success']);
Route::get('error', [PaymentController::class, 'error']);


갈 수 있습니다. 이제 결제 양식에서 경로를 쉽게 사용할 수 있습니다.

도움이 되길 바랍니다!

문제가 발생하면 아래에 의견을 말하십시오.

감사!

좋은 웹페이지 즐겨찾기