/// <summary> /// <para> /// Осуществляет рекуррентный (повторный) платеж — безакцептное списание денежных средств со счета банковской карты /// Покупателя. Для возможности его использования Покупатель должен совершить хотя бы один платеж в пользу /// Продавца, который должен быть указан как рекуррентный (см. параметр recurrent в методе <see cref="Init" />), /// фактически являющийся первичным. /// </para> /// <list type="number"> /// <listheader> /// <description> /// Другими словами, для использования рекуррентных платежей необходима следующая /// последовательность действий: /// </description> /// </listheader> /// <item> /// <description> /// Совершить родительский платеж путем вызова <see cref="Init" /> с указанием дополнительного параметра /// Recurrent=Y. /// </description> /// </item> /// <item> /// <description> /// 2. Получить RebillId, предварительно вызвав метод <see cref="GetCardList" /> /// </description> /// </item> /// <item> /// <description> /// 3. Спустя некоторое время для совершения рекуррентного платежа необходимо вызвать метод /// <see cref="Init" /> со стандартным набором параметров (параметр Recurrent здесь не нужен). /// </description> /// </item> /// <item> /// <description> /// 4. Получить в ответ на <see cref="Init" /> параметр PaymentId. /// </description> /// </item> /// <item> /// <description> /// 5. Вызвать метод <see cref="Charge" /> с параметром <paramref name="rebillId" /> полученным в п.2 и /// параметром <paramref name="paymentId" /> полученным в п.4. /// </description> /// </item> /// </list> /// </summary> /// <param name="paymentId">Уникальный идентификатор транзакции в системе Банка.</param> /// <param name="rebillId">Идентификатор рекуррентного платежа. См. метод <see cref="GetCardList" />.</param> /// <returns>Информация о платеже.</returns> public async Task <PaymentInfo> Charge(string paymentId, string rebillId) { var request = new ChargeRequestBuilder(password, terminalKey, journal) .SetPaymentId(paymentId) .SetRebillId(rebillId) .Build(); try { var response = await GetApi(request.Operation).Charge(request); if (response.Success) { return(new PaymentInfo { OrderId = response.OrderId, PaymentId = response.PaymentId, Status = response.Status }); } throw new AcquiringApiException(response); } catch (AcquiringApiException ex) { journal.Log(ex); throw; } catch (Exception ex) { journal.Log(ex); throw new AcquiringSdkException(ex.Message); } }
public async Task ChargeCustomerFromChargeFlowTest() { try { var createTokenRequest = _tokenRequestBuilder.Build(); var token = await _gateway.CreateToken(createTokenRequest); token = await _gateway.RetrieveToken(token.Id); var chargeRequest = _chargeRequestBuilder.WithCard(_cardRequestBuilder.WithId(token.Id)).Build(); var charge = await _gateway.CreateCharge(chargeRequest); var customerRequest = _customerRequestBuilder.WithCard(_cardRequestBuilder.WithId(charge.Id)).Build(); var customer = await _gateway.CreateCustomer(customerRequest); var chargeRequest2 = new ChargeRequestBuilder().WithCustomerId(customer.Id).Build(); charge = await _gateway.CreateCharge(chargeRequest2); Assert.AreEqual(chargeRequest2.Amount, charge.Amount); Assert.AreEqual(customer.Id, charge.CustomerId); } catch (SecurionPayException exc) { HandleApiException(exc); } }