Crypto Pay is a payment system based on @CryptoBot, which allows you to accept payments in cryptocurrency using the API.
This .NET library help you to work with Crypto Pay via Crypto Pay API.
Use the nuget package.
First, you need to create your application and get an API token. Open @CryptoBot or @CryptoTestnetBot (for testnet), send a command /pay
to create a new app and get API Token.
Don't forget to configure the ApiUrl
and your CryptoPayApiToken
:
builder.Services.AddHttpClient<ICryptoPayClient, CryptoPayClient>(client =>
{
client.BaseAddress = new Uri("https://pay.crypt.bot/");
client.DefaultRequestHeaders.Add("Crypto-Pay-API-Token", "token");
});
Next step: try to call a simple GetMeAsync(...)
method to check that everything is working well:
var application = await cryptoPayClient.GetMeAsync(cancellationToken);
Net | Bot | Hostname |
---|---|---|
mainnet | @CryptoBot | https://pay.crypt.bot/ |
testnet | @CryptoTestnetBot | https://testnet-pay.crypt.bot/ |
All queries to the Crypto Pay API must be sent over HTTPS
You can find all available methods in the documentation.
Also, you can create invoice with supported assets and paid button names:
var invoice = await cryptoPayClient.CreateInvoiceAsync(
Assets.BNB,
1.505,
description: "kitten",
paid_btn_name: PaidButtonNames.viewItem,
paid_btn_url: "https://placekitten.com/150",
cancellationToken: cancellationToken);
Use Webhooks to get updates for the app.
If you'd like to make sure that the Webhook request comes from Crypto Pay, we recommend using a secret path in the URL, e.g. https://www.example.com/<secret>
.
Webhooks will send may at least one time
Example endpoint. You should use CryptoPayHelper.CheckSignature(...)
to check signature
from crypto-pay-api-signature
[HttpPost("{token}")]
public async Task<IActionResult> PostAsync(
[FromBody] Update update,
string token,
CancellationToken cancellationToken = default)
{
if (update is not null &&
this.HttpContext.Request.Headers.TryGetValue("crypto-pay-api-signature", out var signature) &&
CryptoPayHelper.CheckSignature(signature, token, update) &&
update.UpdateType == UpdateTypes.invoice_paid)
{
return this.Ok();
}
return this.BadRequest();
}
Explore all available methods from the documentation.