andrewnovikof / omnipay-sberbank
Sberbank 的 Omnipay 驱动程序
Requires
- php: ^8.0
- omnipay/common: ^3.2
Requires (Dev)
- omnipay/tests: ^4
- phpunit/phpunit: ^8|^9
- squizlabs/php_codesniffer: 3.7.1
This package is auto-updated.
Last update: 2024-09-06 08:39:14 UTC
README
简介
此库通过 Sberbank 收单 API 和 theleague Omnipay 处理库实现 PHP 的工作。它具有清晰和一致的 API,完全单元测试。
包的 3.2.2 版本支持 PHP 7.1 及以上版本和 omnipay/common v3.0.3,3.3.0 版本的包支持 PHP 8.0 及以上版本和 omnipay/common v3.2。
下载
Composer
// This assumes that you have composer installed globally
composer require andrewnovikof/omnipay-sberbank
以最小稳定性解决问题
添加到你的 composer.json
{ "minimum-stability":"dev", "prefer-stable": true }
简单示例
use Omnipay\Omnipay; // Setup payment gateway $gateway = Omnipay::create('Sberbank'); // Set params for authorize request $gateway->authorize( [ 'orderNumber' => $localOrderNumber, // local order number 'amount' => $order_amount, // The amount of payment (you can use decimal with 2 precisions for copecs or string equal to decimal) 'returnUrl' => $callback_url // succesfull callback url ] ); // Enable test mode $gateway->setTestMode(true); // You can set parameters via setters, for example: $gateway->setUserName('merchant_login') ->setPassword('merchant_password') ->setOrderNumber($localOrderNumber) ->setLanguage('en'); // Send request $response = $gateway->send(); // Process response if ($response->isSuccessful()) { // Payment was successful print_r($response); // Get gateway orderId $gatewayOrderId = $response->getOrderId(); // Get manualy get redirect url to offsite payment gateway $offsiteGateway = $response->getRedirectUrl(); } else { // Payment failed echo $response->getMessage(); } // Work with redirect if ($response->isRedirect()) { // Redirect to offsite payment gateway $response->redirect(); }
支付方式
无预授权的订单注册
带预授权的订单注册
预授权后的订单完成
订单状态
扩展订单状态
取消订单
订单支付的退款
验证 3DS 中地图的参与
支付期间的统计数据
将卡片添加到 SSL 卡列表中
无预授权的订单注册
有关此请求的更多信息,请参阅 Sberbank 官方 文档 -> 项目 1 或我们的源代码
use Omnipay\Omnipay; $gateway = Omnipay::create('Sberbank'); $response = $gateway->authorize( [ 'orderNumber' => $localOrderNumber, // local order number 'amount' => $order_amount, // The amount of payment (you can use decimal with 2 precisions for copecs or string equal to decimal) 'returnUrl' => $callback_url, // succesfull callback url 'description' => 'Order Description' ] )->setUserName('merchant_login') ->setPassword('merchant_password') ->send(); // Process response if ($response->isSuccessful()) { // Payment was successful print_r($response); // Get gateway orderId $gatewayOrderId = $response->getOrderId(); // Get manualy get redirect url to offsite payment gateway $offsiteGateway = $response->getRedirectUrl(); } else { // Payment failed echo $response->getMessage(); } // Work with redirect if ($response->isRedirect()) { // Redirect to offsite payment gateway $response->redirect(); }
带预授权的订单注册
有关此请求的更多信息,请参阅 Sberbank 官方 文档 -> 项目 1 或我们的源代码
use Omnipay\Omnipay; $gateway = Omnipay::create('Sberbank'); $response = $gateway->authorize( [ 'orderNumber' => $localOrderNumber, // local order number 'amount' => $order_amount, // The amount of payment (you can use decimal with 2 precisions for copecs or string equal to decimal) 'returnUrl' => $callback_url, // succesfull callback url 'description' => 'Order Description' ] )->setTwoStage(true) ->setUserName('merchant_login') ->setPassword('merchant_password') ->send(); // Process response if ($response->isSuccessful()) { // Payment was successful print_r($response); // Get gateway orderId $gatewayOrderId = $response->getOrderId(); // Get manualy get redirect url to offsite payment gateway $offsiteGateway = $response->getRedirectUrl(); } else { // Payment failed echo $response->getMessage(); } // Work with redirect if ($response->isRedirect()) { // Redirect to offsite payment gateway $response->redirect(); }
预授权后的订单完成
有关此请求的更多信息,请参阅 Sberbank 官方 文档 -> 项目 2 或我们的源代码
use Omnipay\Omnipay; $gateway = Omnipay::create('Sberbank'); $response = $gateway->capture( [ 'orderId' => $localOrderNumber, // gateway order number 'amount' => $order_amount, // The amount of payment (you can use decimal with 2 precisions for copecs or string equal to decimal) ] )->setUserName('merchant_login') ->setPassword('merchant_password') ->send(); // Process response if ($response->isSuccessful()) { // Get response code $code = $response->getCode(); } else { // Payment failed echo $response->getMessage(); }
订单状态
有关此请求的更多信息,请参阅 Sberbank 官方 文档 -> 项目 5 或我们的源代码
此方法适用于 Omnipay 的 completeAuthorize()
和 completePurchase()
请求。
use Omnipay\Omnipay; $gateway = Omnipay::create('Sberbank'); $response = $gateway->orderStatus( // It will be similar to calling methods `completeAuthorize()` and `completePurchase()` [ 'orderId' => $localOrderNumber, // gateway order number 'language' => 'en' ] )->setUserName('merchant_login') ->setPassword('merchant_password') ->send(); // Process response if ($response->isSuccessful()) { // Get response code $code = $response->getCode(); // Get paid amount $paid_amount = $response->getAmount(); // Get other data $order_status = $response->getOrderStatus(); $order_number = $response->getOrderNumber(); $order_pan = $response->getPan(); $order_expiration = $response->getExpiration(); $order_cardholder_name = $response->getCardHolderName(); $order_currency = $response->getCurrency(); $order_approval_code = $response->getApprovalCode(); $order_ip = $response->getIp(); $order_client_id = $response->getClientId(); $order_binding_id = $response->getBindingId(); } else { // Payment failed echo $response->getMessage(); }
扩展订单状态
有关此请求的更多信息,请参阅 Sberbank 官方 文档 -> 项目 6 或我们的源代码
use Omnipay\Omnipay; $gateway = Omnipay::create('Sberbank'); $response = $gateway->extendedOrderStatus( [ 'orderId' => $localOrderNumber, // gateway order number 'language' => 'en' ] )->setOrderNumber($localORderNumber) // You can set local orderNumber Instead of an orderId of gateway system ->setUserName('merchant_login') ->setPassword('merchant_password') ->send(); // Process response if ($response->isSuccessful()) { // Get response code $code = $response->getCode(); // Get paid amount $paid_amount = $response->getAmount(); // Get other data $order_status = $response->getOrderStatus(); $order_number = $response->getOrderNumber(); $order_pan = $response->getPan(); $order_expiration = $response->getExpiration(); $order_cardholder_name = $response->getCardHolderName(); $order_currency = $response->getCurrency(); $order_approval_code = $response->getApprovalCode(); $order_ip = $response->getIp(); $order_client_id = $response->getClientId(); $order_binding_id = $response->getBindingId(); $order_merchant_order_params = $response->getMerchantOrderParams(); $order_eci = $response->getEci(); $order_cavv = $response->getCavv(); $order_xid = $response->getXid(); $order_auth_date_time = $response->getAuthDateTime(); $order_auth_ref_num = $response->getAuthRefNum(); $order_terminal_id = $response->getTerminalId(); $order_approved_amount = $response->getApprovedAmount(); $order_deposited_amount = $response->getDepositedAmount(); $order_refunded_amount = $response->getRefundedAmount(); $order_payment_state = $response->getPaymentState(); $order_bank_name = $response->getBankName(); $order_bank_country_code = $response->getBankCountryCode(); $order_band_country_name = $response->getBankCountryName(); } else { // Payment failed echo $response->getMessage(); }
取消订单
有关此请求的更多信息,请参阅 Sberbank 官方 文档 -> 项目 3 或我们的源代码
要请求取消订单的支付,请使用 reverse.do 请求。取消功能在支付后的一段时间内可用,具体条款应在银行中指定。
取消操作只能执行一次。如果以错误结束,则重复取消操作将失败。
此功能在银行协商后对商店可用。要执行取消操作,用户必须拥有相应的权限。
use Omnipay\Omnipay; $gateway = Omnipay::create('Sberbank'); $response = $gateway->void( [ 'orderId' => $localOrderNumber, // gateway order number 'language' => 'en' ] )->setUserName('merchant_login') ->setPassword('merchant_password') ->send(); // Process response if ($response->isSuccessful()) { // Get response code $code = $response->getCode(); } else { // Payment failed echo $response->getMessage(); }
订单支付的退款
有关此请求的更多信息,请参阅 Sberbank 官方 文档 -> 项目 4 或我们的源代码
对于此请求,资金将退还给指定订单的付款人。如果未扣除此订单的资金,则请求将结束错误。系统允许您多次退回资金,但总额不得超过原始扣除金额。
要执行退回操作,您必须在系统中拥有相应的权限。
use Omnipay\Omnipay; $gateway = Omnipay::create('Sberbank'); $response = $gateway->refund( [ 'orderId' => $localOrderNumber, // gateway order number 'language' => 'en', 'amount' => $oder_amount // // The amount of payment (you can use decimal with 2 precisions for copecs or string equal to decimal) ] )->setUserName('merchant_login') ->setPassword('merchant_password') ->send(); // Process response if ($response->isSuccessful()) { // Get response code $code = $response->getCode(); } else { // Payment failed echo $response->getMessage(); }
验证 3DS 中地图的参与
关于此请求的更多信息,您可以在Sberbank官方文档中查看 -> 第7项,或者在我们的源代码中查看
use Omnipay\Omnipay; $gateway = Omnipay::create('Sberbank'); $response = $gateway->verifyEnrollment( [ 'pan' => $cardPan ] )->setUserName('merchant_login') ->setPassword('merchant_password') ->send(); // Process response if ($response->isSuccessful()) { // Get response code $code = $response->getCode(); $emitter_country_name = $response->getEmitterName(); $emitter_country_code = $response->getEmitterCountryCode(); $enrolled = $response->getEnrolled(); } else { // Payment failed echo $response->getMessage(); }
支付期间的统计数据
关于此请求的更多信息,您可以在Sberbank官方文档中查看 -> 第8项,或者在我们的源代码中查看
use Omnipay\Omnipay; $gateway = Omnipay::create('Sberbank'); $response = $gateway->getLastOrdersForMerchants( [ 'size' => $size, 'from' => $from, 'to' => $to, 'transactionStates' => $transactionStates, 'merchants' => $merchants ] )->setUserName('merchant_login') ->setPassword('merchant_password') ->send(); // Process response if ($response->isSuccessful()) { // Get response code $code = $response->getCode(); $total_count = $response->getTotalCount(); $page = $response->getPage(); $page_size = $response->getPageSize(); // Available getters $response->getOrderErrorCode($orderIndex); $response->getOrderNumber($orderIndex); $response->getOrderStatus($orderIndex); $response->getActionCode($orderIndex); $response->getActionCodeDescription($orderIndex); $response->getAmount($orderIndex); $response->getCurrency($orderIndex); $response->getDate($orderIndex); $response->getOrderDescription($orderIndex); $response->getIp($orderIndex); $response->getMerchantOrderParamName($orderIndex, $paramIndex); $response->getMerchantOrderParamValue($orderIndex, $paramIndex); $response->getAttributesName($orderIndex, $attributeIndex); $response->getAttributesValue($orderIndex, $attributeIndex); $response->getExpiration($orderIndex); $response->getCardholderName($orderIndex); $response->getApprovalCode($orderIndex); $response->getPan($orderIndex); $response->getClientId($orderIndex); $response->getBindingId($orderIndex); $response->getAuthDateTime($orderIndex); $response->getTerminalId($orderIndex); $response->getAuthRefNum($orderIndex); $response->getPaymentState($orderIndex); $response->getApprovedAmount($orderIndex); $response->getDepositedAmount($orderIndex); $response->getRefundedAmount($orderIndex); $response->getBankName($orderIndex); $response->getBankCountryName($orderIndex); $response->getBankCountryCode($orderIndex); } else { // Payment failed echo $response->getMessage(); }
将卡片添加到 SSL 卡列表中
关于此请求的更多信息,您可以在Sberbank官方文档中查看 -> 第9项,或者在我们的源代码中查看
use Omnipay\Omnipay; $gateway = Omnipay::create('Sberbank'); $response = $gateway->verifyEnrollment( [ 'mdorder' => $mdorder ] )->setUserName('merchant_login') ->setPassword('merchant_password') ->send(); // Process response if ($response->isSuccessful()) { // Get response code $code = $response->getCode(); } else { // Payment failed echo $response->getMessage(); }