Yandex.Money 支付网关,用于 Omnipay 支付处理库

v1.0.1 2014-12-30 06:54 UTC

This package is auto-updated.

Last update: 2024-09-06 20:10:52 UTC


README

用于网站接收信用卡支付付款的库。

Build Status Latest Stable Version Total Downloads

它是如何工作的?

为了向 API 发送请求,需要 注册 应用程序。资金将直接转入指定的钱包。

  • 用户点击“支付”按钮,API 将形成支付请求;
  • 用户将被重定向到 Yandex.Dеньги 网站,以输入卡片信息;
  • 如果需要,银行将额外验证数据;
  • 如果支付成功,用户将返回到 returnUrl,在那里检查支付状态;
  • 可以保存卡片令牌以进行无需输入数据的支付;
  • 如果支付未成功,用户将被重定向到 cancelUrl,在那里也需要检查支付状态。

更多信息可以在 Yandex.Dеньги官方网站 上找到。

安装

composer require omnipay/ym:~1.0

使用

开始之前,需要创建一个网关,通过该网关将执行 API 请求

$gateway = Omnipay::create('YM_External');

$gateway->setInstanceId($instanceId);

任何请求都需要 instanceId 参数。该参数根据在注册应用程序时获得的 client_id 为每个应用程序单独生成。要生成新的 instanceId

$instanceId = $gateway->obtainInstanceId($clientId);

// сохранить где-нибудь для последующего использования

生成账单

$response = $gateway->requestPayment(array(
    'walletId' => '12345678910', // ID кошелька, на который поступят средства
    'amount' => 256.0, // Сумма в рублях
    'description' => 'Оплата услуг',
    
))->send();

if ( ! $response->isSuccessful())
{
    // Произошла ошибка
}

// Получаем идентификатор транзакции, его нужно где-нибудь сохранить, т.к. он нам понадобится
$transaction = $response->getTransactionReference();

现在需要将用户重定向到输入数据的页面,为此需要请求支付状态

$response = $gateway->processPayment(array(
    'transactionReference' => $transaction,
    'returnUrl' => 'http://example.com/success',
    'cancelUrl' => 'http://example.com/fail',
    
)->send();

if ($response->isRedirect()) $response->redirect();

// Произошла ошибка

检查支付状态

用户成功完成支付或取消操作(银行拒绝支付)后,将被重定向到成功时为 returnUrl,错误时为 cancelUrl。如果没有特殊的额外逻辑,则可以简单地输出支付成功或失败的消息。否则,必须检查支付状态。

$response = $gateway->processPayment(array(
    'transactionReference' => $transaction,
    'returnUrl' => '...',
    'cancelUrl' => '...',
    
)->send();

if ($response->isSuccessful())
{
    // Платеж совершен!
}
elseif ($response->isPaymentRefused())
{
    // Платеж отклонен!
}
else
{
    // Произошла ошибка при запросе
}

请注意,获取支付状态需要交易编号,该编号在生成支付时获得。它在用户重定向时以 cps_context_id 的名称传递。但最好将其保存在服务器上,并在用户返回网站时恢复。

保存卡片

如果用户成功完成支付,则可以保存其输入的数据,并在其他支付中使用这些数据。

$response = $gateway->createCard(array(
    'transactionReference' => $transaction,
    'returnUrl' => '...',
    'cancelUrl' => '...',
    
))->send();

if ($cardRef = $response->getCardReference())
{
    // Токен карты успешно получен, нужно его сохранить куда-нибудь
    
    // Другие данные:
    $response->getCardType(); // VISA, MasterCard
    $response->getCardNumber(); // Маскированный номер карты
}

使用已保存的卡片进行支付

支付过程遵循与之前相同的模式,即首先生成支付请求,但在第一次请求状态时传递卡片令牌以及卡片背面的保护码 cvv(用户必须输入)。

$response = $gateway->processPayment(array(
    'transactionReference' => $transaction,
    'returnUrl' => '...',
    'cancelUrl' => '...',
    'cardReference' => $cardRef,
    'cvv' => $cvv,
    
))->send();

if ($response->isSuccessful())
{
    // Платеж прошел!
}
elseif ($response->isRedirect())
{
    // Дополнительная авторизация
    $response->redirect();
}
else
{
    // Произошла ошибка
}