sama-ir/sama-laravel-payment

Laravel 的 Sama 网关库。

v0.1.3 2024-04-03 06:27 UTC

This package is auto-updated.

Last update: 2024-09-22 04:44:39 UTC


README

基于 Sama API 的 Laravel Sama 网关库

Sama API 基础上的 Laravel 支付网关库

安装方法 - Installation

使用 composer 安装此包

您可以使用 composer 安装并使用此包

composer require sama-ir/sama-laravel-payment

配置 - Configuration

要使用 Sama 网络服务,您需要一个令牌,您可以根据 Sama 文档 获取此令牌。

要使用 Sama 服务,您需要获取一个令牌,您可以根据 Sama 文档 获取。

将您的令牌添加到 .env 文件中。

请将令牌添加到 env 文件中。

SAMA_GATEWAY_TOKEN=abcd

您也可以在运行时设置令牌。

以下将详细说明如何在运行时设置令牌。

使用方法 | How to use

要使用 Sama 安全支付服务,您的网站需要向 Sama 发送一个包含“返回地址”的支付链接请求。Sama 将发送一个支付链接,您的网站将引导买家到该链接。支付结果确定后,Sama 将引导买家返回到“返回地址”。

将客户发送到支付网关 | Send customer to payment gateway

在使用 Sama 支付的过程中,您的网站首先向 Sama 发送一个支付链接请求。该请求包含交易金额、每个支付请求的唯一标识符以及支付后的“返回地址”。响应调用 Web 服务后,您将收到一个支付链接,您的网站将引导支付者到该链接。支付后的“返回地址”是执行交易状态检查的地址。

    // In a Controller action or Route handler:

    $response = sama()
                // ->token('abcd') // تعیین توکن در حین اجرا - اختیاری
                ->amount(10000) // مبلغ تراکنش
                ->request()
                ->clientId('0a1dca49-96bb-4318-a7cb-ebf2a6281003') // مقدار شناسه تراکنش در فروشگاه (باید یکتا باشد)
                ->callbackUrl('https://:8000/api/payment_callback') // آدرس برگشت پس از پرداخت
                ->mobile('09123456789') // شماره موبایل مشتری - اختیاری
                ->send();

    if (!$response->success()) {
        return [
            $response->error()->code(),
            $response->error()->detail(),
            $response->error()->message(),
            $response->error()->extra()
        ];
    }

    // ذخیره اطلاعات در دیتابیس
    // ...
    // هدایت مشتری به درگاه پرداخت

    return $response->redirect();

验证支付状态 | Verify payment status

支付结果确定后,Sama 将通过 POST 方法将买家引导到“返回地址”,以下是一个验证交易状态的示例代码:

    // In a Controller action or Route handler (eg. POST to /api/payment_callback):

    $price = request()->post('price'); // دریافت پارامتر ارسال شده توسط سما
    $requestId = request()->post('request_id'); // دریافت پارامتر ارسال شده توسط سما
    $resultCode = request()->post('result_code'); // دریافت پارامتر ارسال شده توسط سما
    $processId = request()->post('process_id'); // دریافت پارامتر ارسال شده توسط سما

    $savedPriceInDb = 10000;
    $clientId = '0a1dca49-96bb-4318-a7cb-ebf2a6281003';

    if ($resultCode != 0 || $price != $savedPriceInDb) {
        // Payment was not successful or someone tampered with the data
        return ["status" => "failed", "message" => "پرداخت ناموفق"];
    }

    // Successful payment, lets verify with Sama Gateway
    $response = sama()
                // ->token('abcd') // تعیین توکن در حین اجرا - اختیاری
                ->verification()
                ->requestId($requestId)
                ->clientId($clientId)
                ->send();

    if (!$response->success() || $response->isPaid() === false) {
        // $response->error()->code(),
        // $response->error()->detail(),
        return ["status" => "failed", "message" => "پرداخت ناموفق"];
    }

    if($savedPriceInDb != $response->$price) {
        // Someone tampered with the data, prices do not match
        return ["status" => "failed", "message" => "پرداخت ناموفق"];
    }

    // وریفای پرداخت موفقیت آمیز بود:

    echo $response->isPaid(); // === true means successful payment
    echo $response->paymentId();
    echo $response->requestId();

    // دریافت شماره پیگیری تراکنش و انجام امور مربوط به دیتابیس:

    // Save referenceNumber and transactionCode in the database
    echo $response->referenceNumber();
    echo $response->transactionCode();

    return ["status" => "ok", "message" => "پرداخت موفق"];