Интеграция с Wert
Wert специализируется на on-ramp для NFT и Web3 транзакций. В отличие от общих крипто-покупок, Wert позволяет пользователю оплатить конкретный смарт-контракт вызов банковской картой — например, минт NFT или покупку виртуальной земли в метавёрсе.
Ключевая возможность: SC Call
Главная уникальная функция Wert — прямой вызов смарт-контракта с фиатной оплатой:
import WertWidget from '@wert-io/widget-initializer';
import { signSmartContractData } from '@wert-io/widget-sc-signer';
// Данные для вызова контракта (подписываются на бэкенде)
const scData = {
address: userWalletAddress,
commodity: 'ETH',
commodity_amount: 0.1, // ETH для передачи контракту
pk_id: 'key1',
sc_address: NFT_CONTRACT_ADDRESS,
sc_input_data: encodedMintFunction, // ABI-encoded функция
};
// Подписывается на сервере приватным ключом Wert
const signedData = signSmartContractData(scData, WERT_PRIVATE_KEY);
const wert = new WertWidget({
partner_id: WERT_PARTNER_ID,
origin: 'https://widget.wert.io',
...signedData,
extra: {
item_info: {
author: 'Collection Name',
image_url: nft.imageUrl,
name: nft.name,
seller: 'Platform Name',
}
}
});
wert.mount();
Серверная подпись SC Data
Данные транзакции должны быть подписаны приватным ключом, выданным Wert, на вашем сервере:
from eth_account import Account
from eth_account.messages import encode_defunct
import json
def sign_wert_sc_data(sc_data: dict, private_key: str) -> dict:
"""Подписывает данные для Wert Smart Contract вызова"""
message = json.dumps(sc_data, separators=(',', ':'), sort_keys=True)
msg = encode_defunct(text=message)
signed = Account.sign_message(msg, private_key=private_key)
return {
**sc_data,
"signature": signed.signature.hex()
}
Webhooks
@app.post("/webhooks/wert")
async def wert_webhook(request: Request):
data = await request.json()
if data["type"] == "payment_status":
payment = data["data"]
if payment["status"] == "success":
# Транзакция исполнена
await on_nft_purchased(
order_id=payment["order_id"],
wallet=payment["wallet_address"],
tx_hash=payment.get("blockchain_tx_hash")
)
elif payment["status"] == "failed":
await on_payment_failed(payment["order_id"], payment.get("reason"))
Wert ориентирован на NFT и GameFi сценарии. Комиссии: ~3.5–5% для карточных платежей. Поддерживает ETH, Polygon, BNB Chain, Solana. Хороший выбор для NFT-маркетплейсов, где нужен максимально простой UX для non-crypto пользователей.







