stadem/viva-payments

适用于PHP 8的Viva Payment软件包

v1.0.6 2024-09-10 19:45 UTC

This package is auto-updated.

Last update: 2024-09-10 20:10:32 UTC


README

Latest Version on Packagist Software License Build Status Code Quality Code Intelligence Status

VivaPayments logo

本软件包为Viva Wallet支付API提供了一个简化的接口,使其能够无缝集成到智能结账Webhooks,并支持API v1API v2调用。

功能

  • 智能结账集成:轻松将Viva Wallet的智能结账集成到您的应用程序中。
  • Webhooks:以最少的设置处理Viva Wallet的Webhooks。
  • API v1 & v2 支持:兼容Viva Wallet API的两个版本。
  • 轻量级 & 最小依赖:设计易于安装和使用,无需不必要的冗余。

安装

通过Composer安装该软件包。

该软件包需要PHP 8.2 +,没有其他依赖。

composer require stadem/viva-payments

配置

viva-config.php.example重命名为viva-config.php并添加您的凭据。

在您的viva-config.php中添加以下数据。

对于您本地环境

    'vivaDEMO' => [
        'VIVA_URL' => 'https://demo.vivapayments.com',
        'VIVA_ACCOUNT_URL' => 'https://demo-accounts.vivapayments.com',
        'VIVA_API_URL' => 'https://demo-api.vivapayments.com',
        'VIVA_API_KEY' => '',
        'VIVA_MERCHANT_ID' => '',
        'VIVA_SOURCE_CODE' => '',
        'VIVA_CLIENT_ID' => '',
        'VIVA_CLIENT_SECRET' => '',
        'VIVA_SMARTCHECKOUT_COLOR'=>'0d1bbd',
        'VIVA_DEBUG'=>0,
    ],

对于您生产环境

'vivaPROD' => [
    'VIVA_URL' => 'https://www.vivapayments.com',
    'VIVA_ACCOUNT_URL' => 'https://accounts.vivapayments.com',
    'VIVA_API_URL' => 'https://api.vivapayments.com',
    'VIVA_API_KEY' => '',
    'VIVA_MERCHANT_ID' => '',
    'VIVA_SOURCE_CODE' => '',
    'VIVA_CLIENT_ID' => '',
    'VIVA_CLIENT_SECRET' => '',
    'VIVA_DEBUG'=>0,
],

完整的文件config.php

return [
    'curlDebug' => 0,
    'defaultProvider' => 'vivaDEMO',
    'vivaDEMO' => [
        'VIVA_URL' => 'https://demo.vivapayments.com',
        'VIVA_ACCOUNT_URL' => 'https://demo-accounts.vivapayments.com',
        'VIVA_API_URL' => 'https://demo-api.vivapayments.com',
        'VIVA_API_KEY' => 'a4bw%t%^',
        'VIVA_MERCHANT_ID' => '123456', 
        'VIVA_SOURCE_CODE' => '2222',
        'VIVA_CLIENT_ID' => '123456.vivapayments.com',
        'VIVA_CLIENT_SECRET' => '123456',
        'VIVA_BANK_TRANSFER_URL_API' => 'https://demo.vivapayments.com/api/wallets/{{platformAccountId}}/commands/banktransfer/{{vendorAccountId}}',
        'VIVA_WALLET_TO_WALLET_URL_API'=>'https://demo.vivapayments.com/api/wallets/{{platformAccountId}}/balancetransfer/{{vendorAccountId}}',
        'VIVA_SMARTCHECKOUT_COLOR'=>'0d1bbd',
        'VIVA_DEBUG'=>0,
    ],

    'vivaPROD' => [
        'VIVA_URL' => 'https://www.vivapayments.com',
        'VIVA_ACCOUNT_URL' => 'https://accounts.vivapayments.com',
        'VIVA_API_URL' => 'https://api.vivapayments.com',
        'VIVA_API_KEY' => '',
        'VIVA_MERCHANT_ID' => '',
        'VIVA_SOURCE_CODE' => '',
        'VIVA_CLIENT_ID' => '',
        'VIVA_CLIENT_SECRET' => '',
        'VIVA_DEBUG'=>0
    ]
];

在开发者门户上了解更多关于API身份验证的信息:https://developer.vivawallet.com/getting-started/find-your-account-credentials/client-smart-checkout-credentials/

使用方法

完整示例

require_once __DIR__ . '/../vendor/autoload.php';
use Stadem\VivaPayments\Enums;
use Stadem\VivaPayments\Services\AccessToken;
use Stadem\VivaPayments\Request\Customer;
use Stadem\VivaPayments\Request\CreatePaymentOrder;

$requestLang = $_REQUEST['requestLang'] ?? 'Greek';

 $config = new Config();
 $accessToken = new AccessToken($config);


$customer = new Customer(
    $email = 'test@gmail.com',
    $fullName = 'Customer name',
    $phone = '+306941234567',
    $countryCode = 'GR',
    $requestLang = Enums\RequestLang::fromName($requestLang),
);


$CreatePaymentOrder  = [
    'amount'                => 120, 
    'customerTrns'          => 'Test POST - No End Payment', items/services being purchased.
    'paymentTimeout'        => 1800, 
    'preauth'               => false, 
    'allowRecurring'        => false, 
    'maxInstallments'       => 0, 
    'forceMaxInstallments'  => false, 
    'paymentNotification'   => true, 
    'tipAmount'             => 0, 
    'disableExactAmount'    => false, 
    'disableCash'           => true, 
    'disableWallet'         => false, 
    'cardTokens'            => null, Tokens tutorial.
    'merchantTrns'          => 'This is a short description that helps you uniquely identify the transaction', 
    'tags'                  => ['tag1', 'tag2'] 
];


$paymentMethods = [0, 8, 21, 29, 34, 35];


$paymentMethodFees  =  [
    'paymentMethodId' => '35',
    'fee' => 550
];


try {
   	$order = new CreatePaymentOrder($CreatePaymentOrder, $accessToken,$config);
    $order->setCustomer($customer);
    $order->setPaymentMethods($paymentMethods);
    $order->setPaymentMethodsFees($paymentMethodFees);

    $getOrderJson = $order->send();
    echo '<a href="' . $order->redirectUrl(PaymentMethods: Enums\PaymentMethods::fromName('VivaWallet')) . '" target="blank">';
    echo $order->getOrderCode();
    echo '</a>';
} catch (Exception  $e) {
    echo 'An error occured: <b>' . $e->getMessage() . '</b>';
}

获取访问令牌

以下是如何开始使用的一个快速示例

要与Viva Wallet API交互,您首先需要获取一个访问令牌。以下是如何开始的一个快速示例

'vivaPROD' => [ 创建一个文件并添加以下代码,您可以从vivaDEMO切换到vivaProd环境。

require_once __DIR__ . '/../vendor/autoload.php';
use Stadem\VivaPayments\Enums;
use Stadem\VivaPayments\Services\AccessToken;
use Stadem\VivaPayments\Request\Customer;
use Stadem\VivaPayments\Request\CreatePaymentOrder;
use Stadem\VivaPayments\Config\Config;

$config = new Config();
$accessToken = new AccessToken(); // Set the value on config file -> defaultProvider
or
$config = new Config();
$accessToken = new AccessToken(environment: 'vivaDEMO'); // By direct set, mostly for testing purposes 

此外,您可以通过以下方式访问令牌和状态代码

$Token = $accessToken->getAccessToken();
$statusCode = $accessToken->getStatusCode();
dump($Token.'-'.$statusCode);

创建新客户

$customer = new Customer(
    $email = 'test@gmail.com',
    $fullName = 'Customer name',
    $phone = '+306941234567',
    $countryCode = 'GR',
    $requestLang = Enums\RequestLang::fromName('Greek'),
);

您可以通过多种方式设置requestLang,通过类型或值。有关更多信息,请参阅src\VivaPayments\Enums\RequestLang

 RequestLang::Greek
 RequestLang::from('el-GR') // by value
 RequestLang::fromName('Greek') // by name

创建支付订单

$CreatePaymentOrder  = [
    'amount'                => 120, 
    'customerTrns'          => 'Test POST - No End Payment',
    'paymentTimeout'        => 1800, 
    'preauth'               => false, 
    'allowRecurring'        => false, 
    'maxInstallments'       => 0, 
    'forceMaxInstallments'  => false, 
    'paymentNotification'   => true, 
    'tipAmount'             => 0, 
    'disableExactAmount'    => false, 
    'disableCash'           => true, 
    'disableWallet'         => false, 
    'cardTokens'            => null, Tokens tutorial.
    'merchantTrns'          => 'This is a short description that helps you uniquely identify the transaction', 
    'tags'                  => ['tag1', 'tag2'] 
];

	$order = new CreatePaymentOrder($CreatePaymentOrder, $accessToken,$config);


金额
与该支付订单关联的金额 *100。必须是一个正数,非零数字
customerTrns
此可选参数为支付订单添加一个友好描述,以便在支付表单上显示给客户。它应该是简短的描述
paymentTimeout
使用此参数,您可以定义支付订单的不同生命周期(以秒为单位)
preauth
这将使所选金额在一定时间内不可用(客户不会被收费)
allowRecurring
如果此参数设置为true,则启用重复支付,以便可以使用初始事务ID进行后续支付。https://developer.viva.com/tutorials/payments/create-a-recurring-payment/
maxInstallments
客户可以选择的交易的最大分期付款次数
forceMaxInstallments
如果此参数设置为true,则客户将被强制以分期付款的方式支付,并以maxInstallments参数中指定的具体数量支付
paymentNotification
如果您希望创建支付订单,然后向客户发送电子邮件请求支付
tipAmount
小费值(如果适用,则包括在支付订单的金额中,并标记为小费
disableExactAmount
如果此参数设置为true,则支付订单中指定的任何金额都将被忽略(尽管仍然是必需的),并要求客户指出他们将支付的金额
disableCash \ 如果此参数设置为true,则客户在Viva Spot处将没有现金支付选项
disableWallet
如果此参数设置为true,则客户将没有使用他们的Viva个人账户(钱包)支付选项
cardTokens
您可以提供您在后端保存的此客户的卡令牌。然后,这些卡令牌将展示给客户,在智能结账时使用。有关详细信息,请参阅我们的处理卡
merchantTrns
这可以是ID或简短描述,帮助您在Viva银行应用中唯一识别交易
tags
您可以为交易添加多个标签,这些标签有助于在Viva银行应用中进行分组和筛选

创建支付订单

请求的金额(以分为单位)是必需的。所有其他参数都是可选的。查看请求体模式

try {
    $order = new CreatePaymentOrder($CreatePaymentOrder, $accessToken,$config);
    $order->setCustomer($customer);
    $order->setPaymentMethods($paymentMethods);
    $order->setPaymentMethodsFees($paymentMethodFees);
    $order->send();
    $redirectUrl = $order->redirectUrl();
} catch (Exception  $e) {
    echo 'An error occured: <b>' . $e->getMessage() . '</b>';
}

通过PEST & PHP STAN运行测试

您可以使用以下命令通过PEST运行测试

 ./vendor/bin/pest tests/Payments
 ./vendor/bin/phpstan analyse src

即将推出的功能

市场API支持:未来的更新将包括对市场相关API调用的支持。

文档

有关全面文档,请访问Viva Wallet开发者门户。

贡献

欢迎贡献!请提交一个拉取请求或打开一个问题来讨论潜在的变化。

许可

本项目采用MIT许可。有关详细信息,请参阅LICENSE文件。

免责声明

注意:这是一个非官方包,其使用由您自行决定。