zengram/pay-selection
Composer 安装命令:
composer require zengram/pay-selection
包简介
README 文档
README
PaySelection API specification # Request signature Все виды сообщений содержат параметр X-REQUEST-SIGNATURE в HTTP-заголовке, который содержит тестовое значение запроса, вычисленное с использованием алгоритма HMAC. При реализации проверки сообщений, обратите внимание, на следующие моменты: Сообщение содержит: 1 Reguest method 2 URL 3 X-SITE-ID 4 X-REQUEST-ID 5 Request body Пример: POST /payments/requests/single 16 1qazxsw23edc {\"Amount\": \"123\", \"Currency\": \"RUB\", \"ExtraData\": {\"custom\": \"field\", \"key\": \"value\"}, \"CustomerInfo\": {\"Address\": \"string\", \"Country\": \"string\", \"Email\": \"string\", \"Language\": \"string\", \"Phone\": \"string\", \"Town\": \"string\", \"ZIP\": \"string\"}, \"Description\": \"string\", \"OrderId\": \"string\", \"PaymentMethod\": \"card\", \"PaymentDetails\": {\"CardholderName\": \"string\", \"CardNumber\": \"4111111111111111\", \"CVC\": \"987\", \"ExpMonth\": \"12\", \"ExpYear\": \"22\"}, \"RebillFlag\": true} В качестве ключа используется значение параметра, например: \"sk16\" Хэш вычисляется функцией SHA256 (получаем данные в шестнадцатеричной (!) кодировке в нижнем регистре: \"5145fec78e5db15c51a83e520b61609e8bd934c912614be71ae3840a60e3b013\" Сайт для онлайн формирования подписи: http://beautifytools.com/hmac-generator.php Пример формирования X-REQUEST-SIGNATURE (Python): import hashlib import hmac def calc_signature(body: str, site_secret_value: str) -> str: signatire = hmac.new( key=site_secret_value.encode(), msg=body.encode(), digestmod=hashlib.sha256, ) return signature.hexdigest() Пример формирования Signature (PHP): function getSignature($body, $secretKey) { $hash = hash_hmac('sha256', $body, $secretKey, false); return $hash; } # Webhook signature X-WEBHOOK-SIGNATURE вычисляется по тем же правилам, что и Request signature, за исключением X-REQUEST-ID. Сообщение содержит: 1 Reguest method 2 URL (Notification URL to which WEBHOOK is sent) 3 X-SITE-ID 4 Request body Пример: POST https://webhook.site/notification/ 16 {\"Event\": \"Payment\", \"TransactionId\": \"PS00000000000007\", \"OrderId\": \"Ilya test\", \"Amount\": \"152.12\", \"Currency\": \"RUB\", \"DateTime\": \"16.09.2019 16.52.41\", \"IsTest\": 1, \"Email\": \"test@payselection.com\", \"Phone\": \"+1234567567890\", \"Description\": \"Test transaction\", \"CardMasked\": \"411111**1111\", \"CardHolder\": \"test card\", \"RebillId\": \"PS00000000000007\", \"ExpirationDate\": \"01/20\"} В качестве ключа используется значение параметра, например: \"sk16\" Хэш вычисляется функцией SHA256 (получаем данные в шестнадцатеричной (!) кодировке в нижнем регистре): \"a9cf187993620b64dd0551b1cae88119dd5bddf92ab18d830e5fce1c703cebcd\" # Webhook для проверки После ввода клиентом карточных данных вы можете получить webhook с данными из запроса для сопоставления их с заказом. Для настройки обратитесь в тех.поддержку: необходимо сообщить url приемника и какие параметры из запроса требуется передать для проверки. Ваш сервис приема должен отдавать 200 статус, если оплату можно продолжать, или любой из 4хх и 5хх статусов для прерывания оплаты. Webhook можно настроить в личном кабинете→ Сервис→ действие(редактировать) → URL оповещения → сохранить. Изменения вступят в силу в течении 15 мин. # Тестирование Тестовые карты: 5375437783733009 3DS SUССESS PAYMENT, SUССESS PAYOUT, SUCCESS REBILL 2175005001632383 3DS FAIL PAYMENT, FAIL PAYOUT 4113418297706145 non3DS SUССESS PAYMENT, SUCCESS PAYOUT, FAIL REBILL 4635224506614503 non3DS FAIL PAYMENT, FAIL PAYOUT 5260111696757102 3DS Redirect SUССESS PAYMENT, SUССESS PAYOUT, SUCCESS REBILL 2408684917843810 3DS Redirect FAIL PAYMENT, FAIL PAYOUT # Widget Для подключения виджета необходимо прописать на сайте скрипт в раздел head: `javascript Для появления платежной формы необходимо зарегистрировать функцию для вызова метода pay: javascript this.pay = function() { var widget = new pw.PayWidget(); console.log(\"PAY\"); widget.pay( { // serviceId - Идентификатор ТСП serviceId: \"1410\", // key - public key из личного кабинета мерчанта key: \"0423x039a8a049xxxxxxxxxxx44653b1aa980b28\", // logger - для включения расширенного логирования при отладке logger:true, }, // Запрос с минимальным количеством параметров { MetaData: { PaymentType: \"Pay\", }, PaymentRequest: { OrderId: \"string12\", Amount: \"123\", Currency: \"RUB\", Description: \"string\", }, }, // Запрос с максимальным количеством параметров // См. запрос Create { // Варианты ключей которые могут приходить по колбекам: // для onSuccess -> PAY_WIDGET:TRANSACTION_SUCCESS, PAY_WIDGET:CLOSE_AFTER_SUCCESS // для onError -> PAY_WIDGET:TRANSACTION_FAIL, PAY_WIDGET:CREATE_NETWORK_ERROR, PAY_WIDGET:CREATE_BAD_REQUEST_ERROR, PAY_WIDGET:CLOSE_AFTER_FAIL,PAY_WIDGET:CLOSE_AFTER_CREATE_NETWORK_ERROR, PAY_WIDGET:CREATE_BAD_REQUEST_ERROR // для onClose -> PAY_WIDGET:CLOSE_BEFORE_PAY onSuccess: function(res) { console.log(\"onSuccess from shop\", res); }, onError: function(res) { console.log(\"onFail from shop\", res); }, onClose: function(res) { console.log(\"onClose from shop\", res); }, }, {only2Level: true} // необязательный параметр, необходим для корректной работы при наличии сайтов с поддоменами ); }; И прописать вызов функции на событие, например, нажатие кнопки «Оплатить»: javascript $('#checkout').click(pay); **Варианты настройки Return Urls для Виджета:** 1) Производится возврат на returnUrl из extraData или сервиса (но если returnUrl там не указаны, то виджет при инициации закрытия будет просто закрываться) javascript window.location.href = res.returnUrl; 2) Производится возврат на returnUrl из extraData или сервиса (но если returnUrl там не указаны, то виджет при инициации закрытия будет просто закрываться)javascript if (res.returnUrl) window.location.href = res.returnUrl; 3) Производится возврат на returnUrl из extraData или сервиса (но если returnUrl там не указаны, то виджет будет перенаправлять по указанному в скрипте returnUrl)javascript window.location.href = res.returnUrl || \"https://payselection.com/\" # Cryptogram Криптограмма — это идентификатор, представляющий собой случайную последовательность, ассоциированную с определённой платёжной картой. Формирование криптограмм выполняется на основании данных платёжных карт пользователей. Сформированная криптограмма используется в методах [Pay](#operation/Pay) и [Block](#operation/Block) Скрипт для криптографирования карточных данных представлен ниже, где rawPubKey - public key из личного кабинета мерчанта: javascript var eccrypto = require(\"eccrypto\"); var rawPubKey = '0405397f7577bd835210a57708aafe876786dc8e2d12e6880917d61a4ad1d03a75068ea6bc26554c7a1bf5b50ed40105837eee001178579279eca57f89bdff5fc2' var pubkey = Buffer.from(rawPubKey, 'hex'); eccrypto.encrypt(pubkey, Buffer(JSON.stringify({ \"TransactionDetails\": { \"Amount\": 100, \"Currency\": \"RUB\" }, \"PaymentMethod\": \"Card\", \"PaymentDetails\": { \"CardholderName\":\"TEST CARD\", \"CardNumber\":\"4111111111111111\", \"CVC\":\"123\", \"ExpMonth\":\"12\", \"ExpYear\":\"24\" }, \"MessageExpiration\": Date.now()+86400000, //24 hours }))) .then((encrypted) => { var sendData = { \"signedMessage\": JSON.stringify( { \"encryptedMessage\": encrypted.ciphertext.toString(\"base64\"), \"ephemeralPublicKey\": encrypted.ephemPublicKey.toString(\"base64\") } ), \"iv\": encrypted.iv.toString(\"base64\"), \"tag\": encrypted.mac.toString(\"base64\") }; var finalString = window.btoa(JSON.stringify(sendData)); console.log(finalString) } ) ` # Аутентификация покупателя Если требуется 3-D Secure аутентификация (получен статус wait_for_3ds), в ответе на запрос статуса добавляется объект StateDetails с полями: AcsUrl — URL сервера аутентификации 3-D Secure, для перенаправления на страницу подтверждения от эмитента; PaReq — зашифрованный запрос на аутентификацию 3-D Secure; MD - уникальный идентификатор транзакции. Для дополнительной проверки у эмитента выполните POST-запрос на URL сервера аутентификации 3-D Secure с параметрами: TermUrl — URL перенаправления покупателя после успешной аутентификации 3-D Secure; MD — уникальный идентификатор транзакции; PaReq — значение параметра pareq из ответа на платежный запрос. Далее информация о покупателе передаётся в платежную систему карты. Банк-эмитент либо предоставляет разрешение на списание средств без аутентификации (frictionless flow), либо принимает решение о необходимости аутентификации с помощью одноразового пароля (challenge flow). После прохождения проверки покупатель перенаправляется по адресу TermUrl с зашифрованным результатом проверки в параметре PaRes. При использовании карт, поддерживающих протокол 3-D Secure 2.0, механизм аутентификации остается тот же, за исключением необходимости выполнения метода Confirm в случае frictionless flow. Метод Confirm следует выполнять только при получении PaRes на TermUrl, также рекомендуется запросить статус транзакции, чтобы определить необходимость выполнения Confirm.
This PHP package is automatically generated by the Swagger Codegen project:
- API version: v3-oas3
- Build package: io.swagger.codegen.v3.generators.php.PhpClientCodegen
Requirements
PHP 5.5 and later
Installation & Usage
Composer
To install the bindings via Composer, add the following to composer.json:
{
"repositories": [
{
"type": "git",
"url": "https://github.com/git_user_id/git_repo_id.git"
}
],
"require": {
"git_user_id/git_repo_id": "*@dev"
}
}
Then run composer install
Manual Installation
Download the files and include autoload.php:
require_once('/path/to/SwaggerClient-php/vendor/autoload.php');
Tests
To run the unit tests:
composer install
./vendor/bin/phpunit
Getting Started
Please follow the installation procedure and then run the following:
<?php
require_once(__DIR__ . '/vendor/autoload.php');
$apiInstance = new Swagger\Client\Api\OperationsApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client()
);
$x_site_id = "x_site_id_example"; // string | Идентификатор ТСП
$x_request_id = "x_request_id_example"; // string | Уникальный идентификатор запроса ТСП.
$x_request_signature = "x_request_signature_example"; // string | Request signature. [description](#section/Request-signature)
try {
$result = $apiInstance->balance($x_site_id, $x_request_id, $x_request_signature);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling OperationsApi->balance: ', $e->getMessage(), PHP_EOL;
}
$apiInstance = new Swagger\Client\Api\OperationsApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client()
);
$body = new \Swagger\Client\Model\NewPaymentRequest(); // \Swagger\Client\Model\NewPaymentRequest |
$x_site_id = "x_site_id_example"; // string | Идентификатор ТСП
$x_request_id = "x_request_id_example"; // string | Уникальный идентификатор запроса ТСП.
$x_request_signature = "x_request_signature_example"; // string | Request signature. [description](#section/Request-signature)
try {
$result = $apiInstance->block($body, $x_site_id, $x_request_id, $x_request_signature);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling OperationsApi->block: ', $e->getMessage(), PHP_EOL;
}
$apiInstance = new Swagger\Client\Api\OperationsApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client()
);
$body = new \Swagger\Client\Model\PaymentCancelRequest(); // \Swagger\Client\Model\PaymentCancelRequest |
$x_site_id = "x_site_id_example"; // string | Идентификатор ТСП
$x_request_id = "x_request_id_example"; // string | Уникальный идентификатор запроса ТСП.
$x_request_signature = "x_request_signature_example"; // string | Request signature. [description](#section/Request-signature)
try {
$result = $apiInstance->cancel($body, $x_site_id, $x_request_id, $x_request_signature);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling OperationsApi->cancel: ', $e->getMessage(), PHP_EOL;
}
$apiInstance = new Swagger\Client\Api\OperationsApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client()
);
$body = new \Swagger\Client\Model\PaymentChargeRequest(); // \Swagger\Client\Model\PaymentChargeRequest |
$x_site_id = "x_site_id_example"; // string | Идентификатор ТСП
$x_request_id = "x_request_id_example"; // string | Уникальный идентификатор запроса ТСП.
$x_request_signature = "x_request_signature_example"; // string | Request signature. [description](#section/Request-signature)
try {
$result = $apiInstance->charge($body, $x_site_id, $x_request_id, $x_request_signature);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling OperationsApi->charge: ', $e->getMessage(), PHP_EOL;
}
$apiInstance = new Swagger\Client\Api\OperationsApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client()
);
$body = new \Swagger\Client\Model\ConfirmationRequest(); // \Swagger\Client\Model\ConfirmationRequest |
$x_site_id = "x_site_id_example"; // string | Идентификатор ТСП
$x_request_id = "x_request_id_example"; // string | Уникальный идентификатор запроса ТСП.
$x_request_signature = "x_request_signature_example"; // string | Request signature. [description](#section/Request-signature)
try {
$result = $apiInstance->onfirm($body, $x_site_id, $x_request_id, $x_request_signature);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling OperationsApi->onfirm: ', $e->getMessage(), PHP_EOL;
}
$apiInstance = new Swagger\Client\Api\OperationsApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client()
);
$order_id = "order_id_example"; // string |
$x_site_id = "x_site_id_example"; // string | Идентификатор ТСП
$x_request_id = "x_request_id_example"; // string | Уникальный идентификатор запроса ТСП.
$x_request_signature = "x_request_signature_example"; // string | Request signature. [description](#section/Request-signature)
try {
$result = $apiInstance->ordersOrderId($order_id, $x_site_id, $x_request_id, $x_request_signature);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling OperationsApi->ordersOrderId: ', $e->getMessage(), PHP_EOL;
}
$apiInstance = new Swagger\Client\Api\OperationsApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client()
);
$body = new \Swagger\Client\Model\NewPaymentRequest(); // \Swagger\Client\Model\NewPaymentRequest |
$x_site_id = "x_site_id_example"; // string | Идентификатор ТСП
$x_request_id = "x_request_id_example"; // string | Уникальный идентификатор запроса ТСП.
$x_request_signature = "x_request_signature_example"; // string | Request signature. [description](#section/Request-signature)
try {
$result = $apiInstance->pay($body, $x_site_id, $x_request_id, $x_request_signature);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling OperationsApi->pay: ', $e->getMessage(), PHP_EOL;
}
$apiInstance = new Swagger\Client\Api\OperationsApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client()
);
$body = new \Swagger\Client\Model\NewPayoutRequest(); // \Swagger\Client\Model\NewPayoutRequest |
$x_site_id = "x_site_id_example"; // string | Идентификатор ТСП
$x_request_id = "x_request_id_example"; // string | Уникальный идентификатор запроса ТСП.
$x_request_signature = "x_request_signature_example"; // string | Request signature. [description](#section/Request-signature)
try {
$result = $apiInstance->payout($body, $x_site_id, $x_request_id, $x_request_signature);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling OperationsApi->payout: ', $e->getMessage(), PHP_EOL;
}
$apiInstance = new Swagger\Client\Api\OperationsApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client()
);
$body = new \Swagger\Client\Model\NewPaymentRequest(); // \Swagger\Client\Model\NewPaymentRequest |
$x_site_id = "x_site_id_example"; // string | Идентификатор ТСП
$x_request_id = "x_request_id_example"; // string | Уникальный идентификатор запроса ТСП.
try {
$result = $apiInstance->publicPay($body, $x_site_id, $x_request_id);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling OperationsApi->publicPay: ', $e->getMessage(), PHP_EOL;
}
$apiInstance = new Swagger\Client\Api\OperationsApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client()
);
$body = new \Swagger\Client\Model\RebillRequest(); // \Swagger\Client\Model\RebillRequest |
$x_site_id = "x_site_id_example"; // string | Идентификатор ТСП
$x_request_id = "x_request_id_example"; // string | Уникальный идентификатор запроса ТСП.
$x_request_signature = "x_request_signature_example"; // string | Request signature. [description](#section/Request-signature)
try {
$result = $apiInstance->rebill($body, $x_site_id, $x_request_id, $x_request_signature);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling OperationsApi->rebill: ', $e->getMessage(), PHP_EOL;
}
$apiInstance = new Swagger\Client\Api\OperationsApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client()
);
$body = new \Swagger\Client\Model\NewRecurringRequest(); // \Swagger\Client\Model\NewRecurringRequest |
$x_site_id = "x_site_id_example"; // string | Идентификатор ТСП
$x_request_id = "x_request_id_example"; // string | Уникальный идентификатор запроса ТСП.
$x_request_signature = "x_request_signature_example"; // string | Request signature. [description](#section/Request-signature)
try {
$result = $apiInstance->recurring($body, $x_site_id, $x_request_id, $x_request_signature);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling OperationsApi->recurring: ', $e->getMessage(), PHP_EOL;
}
$apiInstance = new Swagger\Client\Api\OperationsApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client()
);
$body = new \Swagger\Client\Model\NewRecurringChangeRequest(); // \Swagger\Client\Model\NewRecurringChangeRequest |
$x_site_id = "x_site_id_example"; // string | Идентификатор ТСП
$x_request_id = "x_request_id_example"; // string | Уникальный идентификатор запроса ТСП.
$x_request_signature = "x_request_signature_example"; // string | Request signature. [description](#section/Request-signature)
try {
$result = $apiInstance->recurringChange($body, $x_site_id, $x_request_id, $x_request_signature);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling OperationsApi->recurringChange: ', $e->getMessage(), PHP_EOL;
}
$apiInstance = new Swagger\Client\Api\OperationsApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client()
);
$body = new \Swagger\Client\Model\RecurringSearchBody(); // \Swagger\Client\Model\RecurringSearchBody |
$x_site_id = "x_site_id_example"; // string | Идентификатор ТСП
$x_request_id = "x_request_id_example"; // string | Уникальный идентификатор запроса ТСП.
$x_request_signature = "x_request_signature_example"; // string | Request signature. [description](#section/Request-signature)
try {
$result = $apiInstance->recurringSearch($body, $x_site_id, $x_request_id, $x_request_signature);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling OperationsApi->recurringSearch: ', $e->getMessage(), PHP_EOL;
}
$apiInstance = new Swagger\Client\Api\OperationsApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client()
);
$body = new \Swagger\Client\Model\NewRecurringUnsubscribeRequest(); // \Swagger\Client\Model\NewRecurringUnsubscribeRequest |
$x_site_id = "x_site_id_example"; // string | Идентификатор ТСП
$x_request_id = "x_request_id_example"; // string | Уникальный идентификатор запроса ТСП.
$x_request_signature = "x_request_signature_example"; // string | Request signature. [description](#section/Request-signature)
try {
$result = $apiInstance->recurringUnsubscribe($body, $x_site_id, $x_request_id, $x_request_signature);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling OperationsApi->recurringUnsubscribe: ', $e->getMessage(), PHP_EOL;
}
$apiInstance = new Swagger\Client\Api\OperationsApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client()
);
$body = new \Swagger\Client\Model\RefundRequest(); // \Swagger\Client\Model\RefundRequest |
$x_site_id = "x_site_id_example"; // string | Идентификатор ТСП
$x_request_id = "x_request_id_example"; // string | Уникальный идентификатор запроса ТСП.
$x_request_signature = "x_request_signature_example"; // string | Request signature. [description](#section/Request-signature)
try {
$result = $apiInstance->refund($body, $x_site_id, $x_request_id, $x_request_signature);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling OperationsApi->refund: ', $e->getMessage(), PHP_EOL;
}
$apiInstance = new Swagger\Client\Api\OperationsApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client()
);
$transaction_id = "transaction_id_example"; // string |
$x_site_id = "x_site_id_example"; // string | Идентификатор ТСП
$x_request_id = "x_request_id_example"; // string | Уникальный идентификатор запроса ТСП.
$x_request_signature = "x_request_signature_example"; // string | Сигнатура запроса [description](#section/Request-signature) (при типе авторизации public вместо секретного ключа сервиса используется секретный ключ транзакции)
$x_request_auth = "x_request_auth_example"; // string | Тип авторизации
try {
$result = $apiInstance->transactionstransactionId($transaction_id, $x_site_id, $x_request_id, $x_request_signature, $x_request_auth);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling OperationsApi->transactionstransactionId: ', $e->getMessage(), PHP_EOL;
}
$apiInstance = new Swagger\Client\Api\OperationsApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client()
);
$body = new \Swagger\Client\Model\UnsubscribeRequest(); // \Swagger\Client\Model\UnsubscribeRequest |
$x_site_id = "x_site_id_example"; // string | Идентификатор ТСП
$x_request_id = "x_request_id_example"; // string | Уникальный идентификатор запроса ТСП.
$x_request_signature = "x_request_signature_example"; // string | Request signature. [description](#section/Request-signature)
try {
$result = $apiInstance->unsubscribe($body, $x_site_id, $x_request_id, $x_request_signature);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling OperationsApi->unsubscribe: ', $e->getMessage(), PHP_EOL;
}
?>
Documentation for API Endpoints
All URIs are relative to https://gw.payselection.com/
| Class | Method | HTTP request | Description |
|---|---|---|---|
| OperationsApi | balance | GET /balance | |
| OperationsApi | block | POST /payments/requests/block | |
| OperationsApi | cancel | POST /payments/cancellation | |
| OperationsApi | charge | POST /payments/charge | |
| OperationsApi | onfirm | POST /payments/confirmation | |
| OperationsApi | ordersOrderId | GET /orders/{OrderId} | |
| OperationsApi | pay | POST /payments/requests/single | |
| OperationsApi | payout | POST /payouts | |
| OperationsApi | publicPay | POST /payments/requests/public | |
| OperationsApi | rebill | POST /payments/requests/rebill | |
| OperationsApi | recurring | POST /payments/recurring | |
| OperationsApi | recurringChange | POST /payments/recurring/change | |
| OperationsApi | recurringSearch | POST /payments/recurring/search | |
| OperationsApi | recurringUnsubscribe | POST /payments/recurring/unsubscribe | |
| OperationsApi | refund | POST /payments/refund | |
| OperationsApi | transactionstransactionId | GET /transactions/{transactionId} | |
| OperationsApi | unsubscribe | POST /payments/unsubscribe | |
| WebhooksApi | webhooks | POST /webhooks | |
| Webhooks_Api | webhooksRecurring | POST /webhooks_recurring | |
| WebpayApi | create | POST /webpayments/create |
Documentation For Models
- AccountId
- AcsUrl
- AddDetails
- AddDetailsRecurring
- AdditionalCheckProps
- AdditionalUserProps
- Address
- Amount
- AnyValue
- Balance
- BalanceResponse
- Bank
- BlockWebhook
- Brand
- CVC
- CancelResponse
- CancelWebhook
- Card
- CardDetails
- CardHolder
- CardMasked
- CardNumber
- Cashier
- ChangeRecurringByMerchantWebhook
- ChangeRecurringStateWebhook
- ChargeResponse
- Client
- CoinNameNumber
- ConfirmationRequest
- Country
- CountryCodeAlpha2
- Currency
- CustomFields
- CustomerInfo
- CustomerInfoPayout
- DateTime
- DeclineUrl
- Description
- DoublePaymentResponse
- DoublePaymentResponseAddDetails
- DoubleWebPaymentResponse
- DoubleWebPaymentResponseAddDetails
- ErrorBalanceResponse
- ErrorCode
- ErrorDescription
- ErrorMessage
- ErrorResponse
- ErrorTransactionIdResponse
- Event
- ExpMonth
- ExpYear
- ExpirationDate
- Extra
- ExtraData
- ExtraDetails
- ExtraDetailsCreate
- ExtraDetailsPayout
- FailWebhook
- FalseCancelResponse
- FalseChargeResponse
- FalsePaymentResponse
- FalsePayoutResponse
- FalseRebillResponse
- FalseRecurringResponse
- FalseRefundResponse
- FalseTokenResponse
- FalseUnsubscribeResponse
- FederalId
- Ffd105
- Ffd105AgentInfo
- Ffd105AgentInfo1
- Ffd105AgentInfoMoneyTransferOperator
- Ffd105AgentInfoPayingAgent
- Ffd105AgentInfoReceivePaymentsOperator
- Ffd105Company
- Ffd105Items
- Ffd105SupplierInfo
- Ffd105SupplierInfo1
- Ffd105Vat
- Ffd105Vats
- Ffd12
- Ffd12Company
- Ffd12Items
- Ffd12MarkCode
- Ffd12MarkQuantity
- Ffd12OperatingCheckProps
- Ffd12SectoralItemProps
- Ffd12SupplierInfo
- Ffd12Vats
- GenericResponse
- IP
- IPv4
- IPv6
- InlineResponse201
- Interval
- IntervalChange
- IsTest
- Language
- MD
- MaxPeriods
- Model3DSTransactionIdResponse
- Model3DSTransactionIdResponseStateDetails
- Model3DSWebhook
- NewBalanceResponse
- NewCancelResponse
- NewChargeResponse
- NewPayformRequest
- NewPayformSuccessResponse
- NewPaymentRequest
- NewPaymentResponse
- NewPayoutRequest
- NewPayoutResponse
- NewPublicPaymentResponse
- NewRebillResponse
- NewRecurringChangeRequest
- NewRecurringChangeResponse
- NewRecurringRequest
- NewRecurringResponse
- NewRecurringSearchAccountRequest
- NewRecurringSearchRebillRequest
- NewRecurringSearchRecurringRequest
- NewRecurringSearchResponse
- NewRecurringUnsubscribeRequest
- NewRecurringUnsubscribeResponse
- NewRefundResponse
- NewResponse
- NewTokenResponse
- NewTransactionIdResponse
- NewTransactionIdResponseStateDetails
- NewUnsubscribeResponse
- NewWebpayRequest
- NewWebpayResponse
- NomenclatureCode
- NumberPrice
- NumberThreeFormat
- OneOfFalsePaymentResponseAddDetails
- OneOfFalseRecurringResponseAddDetails
- OneOfReceiptDataReceipt
- Order
- OrderId
- OrderIdResponse
- PaReq
- PaRes
- PayToken
- PaymentCancelRequest
- PaymentChargeRequest
- PaymentMethod
- PaymentToken
- PaymentTokenPaymentDetails
- PaymentType
- Payments
- PaymentsInner
- PaymentsSumFormat
- PaymentsWebhook
- PayoutCard
- PayoutCardPayoutDetails
- PayoutConfirmationResponse
- PayoutResponse
- PayoutToken
- PayoutTokenPayoutDetails
- PayoutWebhook
- PendingTransactionIdResponse
- Period
- PeriodChange
- Phone
- PhoneNumber
- PreauthorizedTransactionIdResponse
- ProcessingAmount
- ProcessingCurrency
- Qiwi
- QiwiNumber
- QiwiPaymentDetails
- RRN
- RebillFlag
- RebillId
- RebillRequest
- RebillResponse
- ReceiptData
- ReceiptEmail
- ReceiverNumber
- Recurrent
- RecurringAmount
- RecurringData
- RecurringId
- RecurringNextPay
- RecurringPaidCount
- RecurringSearchBody
- RecurringStatus
- Redirect3DSWebhook
- RedirectMethod
- RedirectParams
- RedirectTransId
- RedirectTransactionIdResponse
- RedirectTransactionIdResponseStateDetails
- RedirectUrl
- RefundRequest
- RefundResponse
- RefundWebhook
- RegisterRecurringWebhook
- RemainingAmount
- ReturnUrl
- SectoralDate
- SectoralNumber
- SectoralValue
- ServiceId
- StartDate
- StartDateChange
- Status
- SuccessTransactionIdResponse
- SuccessUrl
- SumNumberTwoFormat
- Token
- TokenResponse
- TotalFormat
- Town
- Transaction
- TransactionId
- TransactionIdResponse
- TransactionState
- TransactionStateDetails
- TransactionStatus
- Type
- TypeFormat
- UnsubscribeRecurringWebhook
- UnsubscribeRequest
- UnsubscribeResponse
- VatSumFormat
- VatsSumFormat
- VoidedTransactionIdResponse
- Webhook
- WebhookRecurring
- WebhookUrl
- WebpayCustomerInfo
- WebpayMetaData
- WebpayNewPaymentRequest
- WebpayPaymentRequest
- WebpayPaymentType
- WebpayPreviewForm
- WebpayTypeLink
- ZIP
Documentation For Authorization
All endpoints do not require authorization.
Author
support@payselection.com
zengram/pay-selection 适用场景与选型建议
zengram/pay-selection 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2 次下载、GitHub Stars 达 0, 最近一次更新时间为 2023 年 05 月 29 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「rest」 「api」 「sdk」 「swagger」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 zengram/pay-selection 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 zengram/pay-selection 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 zengram/pay-selection 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A PSR-7 compatible library for making CRUD API endpoints
Api bundle
Alfabank REST API integration
A Flickr wrapper to allow you to call the Flickr api with Guzzle as the backend.Goal is to have 100% Flickr api coverage rather than just upload/display photos (currently at 23%).
BlockCypher's PHP SDK for REST API
Helper classes for creating cookie headers
统计信息
- 总下载量: 2
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 3
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: proprietary
- 更新时间: 2023-05-29