tinkoff-acquiring 0.2.0

Rust-клиент к API Tinkoff (T-Банк) Acquiring: Init/GetState/Confirm/Cancel/Charge, карты, клиенты, FinishAuthorize, QR; retry, идемпотентность, webhook-валидация.
Documentation
# tinkoff-acquiring

Rust-клиент к [Tinkoff (T-Банк) Acquiring REST API v2](https://www.tbank.ru/business/documents/oplata-api/).

## Возможности

-   Инициализация платежа: `Init`, `GetState`, `Confirm`, `Cancel`, `Charge`
-   Работа с клиентами: `AddCustomer`, `GetCustomer`, `RemoveCustomer`
-   Карты: `GetCardList`, `RemoveCard`
-   Привязка и 3DS: `BindCard`, `FinishAuthorize`
-   QR: `GetQr`
-   Верификация вебхука (токен только по корневым полям)
-   Ретраи с экспоненциальным backoff
-   Идемпотентные ключи через заголовок
-   `blocking`-режим (опция через feature)

## Быстрый старт

```rust
use tinkoff_acquiring::{Config, TinkoffClient, Receipt, Item, Taxation, Tax};
use serde_json::json;

# #[tokio::main]
# async fn main() -> anyhow::Result<()> {
let cfg = Config::new("YOUR_TERMINAL_KEY", "YOUR_PASSWORD");
let client = TinkoffClient::new(cfg);

let receipt = Receipt {
  email: Some("buyer@example.com".into()),
  phone: None,
  taxation: Taxation::Osn,
  items: vec![Item {
      name: "Hoodie".into(),
      price: 199_900,
      quantity: 1.0,
      amount: 199_900,
      tax: Tax::Vat20,
  }],
  currency: None,
};

let init = client.init(
  199_900,
  "ORDER-123",
  Some("Оплата худи"),
  Some("O"),
  Some(receipt),
  Some(json!({"meta":"abc"})),
  Some("https://your.site/success"),
  Some("https://your.site/fail"),
  None,
  Some("order-123-key"), // идемпотентность
).await?;

println!("Payment URL: {:?}", init.payment_url);
# Ok(()) }
```