stadem / viva-payments
适用于PHP 8的Viva Payment软件包
Requires
- php: ^8.2.0
Requires (Dev)
- pestphp/pest: ^2.34
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^10.5
- symfony/var-dumper: ^6.4
README
本软件包为Viva Wallet支付API提供了一个简化的接口,使其能够无缝集成到智能结账、Webhooks,并支持API v1和API 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文件。
免责声明
注意:这是一个非官方包,其使用由您自行决定。