Благодарим вас за интерес к пакету C# Chargily Pay™, проекту с открытым исходным кодом Chargily, ведущей финтех-компании в Алжире, специализирующейся на платежных решениях и содействии электронной коммерции. Этот пакет предоставляет самый простой и бесплатный способ интеграции электронных платежей. API через распространенные в Алжире способы оплаты, такие как EDHABIA (Algerie Post) и CIB (SATIM), в ваши проекты C#/ASP.NET.
Этот пакет разработан Ахмедом Чахумом (rainxh11) и открыт для участия таких разработчиков, как вы.
| Нугет Пакет | Загрузки |
|---|---|
| Платно.Оплата: | |
| Chargily.Pay.AspNet: |
Поддерживаются только .NET6.0 и более новые версии.
ПРИМЕЧАНИЕ. Возможность получать статус оформления заказа с помощью конечной точки Webhook возможна только для типов проектов, на которых может размещаться HTTP-сервер.
dotnet add Chargily.Pay using Chargily . Pay ;
var chargilyClient = ChargilyPay . CreateResilientClient ( config =>
{
// toggle live mode
config . IsLiveMode = false ;
// your chargily dev account api-secret key
config . ApiSecretKey = "YOUR API SECRET" ;
} ) ; var createProduct = new CreateProduct ( )
{
Name = "Product Name" ,
ImagesUrls = new List < Uri > ( )
{
new Uri ( "https://domain.com/image.png" )
} ,
Description = "Product Description" ,
} ;
var product = await _chargilyPayClient . AddProduct ( createProduct ) ; var createPrice = new CreatePrice ( )
{
Amount = 3000 ,
Currency = Currency . DZD ,
ProductId = product . Value . Id ,
} ;
var productPrice = await chargilyClient . AddPrice ( createPrice ) ; var checkoutItems = new List < CheckoutPriceItem > ( )
{
new CheckoutPriceItem ( )
{
Quantity = 1 ,
PriceId = productPrice . Value . Id
}
} ;
var createCheckout = new Checkout ( checkoutItems )
{
Description = "Checkout Description" ,
Language = LocaleType . Arabic ,
PaymentMethod = PaymentMethod . EDAHABIA ,
PassFeesToCustomer = true ,
WebhookEndpointUrl = new Uri ( "https://domain.com/webhook/endpoint" ) ,
OnFailureRedirectUrl = new Uri ( "https://webapp.com/checkout/fail" ) ,
OnSuccessRedirectUrl = new Uri ( "https://webapp.com/checkout/success" ) ,
CollectShippingAddress = false ,
} ;
var checkout = await chargilyClient . CreateCheckout ( createCheckout ) ; var createCheckout = new Checkout ( amount : 3000 , Currency . DZD )
{
Description = "Checkout Description" ,
Language = LocaleType . Arabic ,
PaymentMethod = PaymentMethod . EDAHABIA ,
PassFeesToCustomer = true ,
WebhookEndpointUrl = new Uri ( "https://domain.com/webhook/endpoint" ) ,
OnFailureRedirectUrl = new Uri ( "https://webapp.com/checkout/fail" ) ,
OnSuccessRedirectUrl = new Uri ( "https://webapp.com/checkout/success" ) ,
CollectShippingAddress = false ,
} ;
var fastCheckout = await chargilyClient . CreateCheckout ( createCheckout ) ;ПРИМЕЧАНИЕ. Оформить заказ можно со списком цен или с использованием суммы и валюты.
var createProduct = new CreateProduct ( )
{
/* ... */
} ;
var product = await _chargilyPayClient . AddProduct ( createProduct ) ;
var createPrice = new CreatePrice ( )
{
/* ... */
} ;
var productPrice = await chargilyClient . AddPrice ( createPrice ) ;
// above steps are similar to how to create a checkout
var paymentLinkItems = new List < PaymentLinkPriceItem > ( )
{
new PaymentLinkPriceItem ( )
{
AdjustableQuantity = true ,
PriceId = productPrice . Value . Id ,
Quantity = 2
}
} ;
var createPaymentLink = new CreatePaymentLink ( paymentLinkItems )
{
Language = LocaleType . Arabic ,
PassFeesToCustomer = true ,
CollectShippingAddress = false ,
Name = "Name" ,
CompletionMessage = "completion message" ,
IsActive = true
} ; var createCustomer = new CreateCustomer ( )
{
Name = "Customer Name" ,
Address = new CustomerAddress ( )
{
Address = "Address" ,
Country = Country . Algeria ,
State = "Alger"
} ,
Email = "[email protected]" ,
Phone = "+2130601010101"
} ;
var customer = await chargilyClient . AddCustomer ( createCustomer ) ;
var createCheckout = new Checkout ( amount : 3000 , Currency . DZD )
{
CustomerId = customer . Value . Id ,
/* .... */
} ;
var fastCheckout = await chargilyClient . CreateCheckout ( createCheckout ) ; foreach ( var wallet in chargilyClient . Balance )
{
/* ... */
} using Chargily . Pay ;
var chargilyClient = ChargilyPay . CreateResilientClient ( config =>
{
/* ... */
// refresh balance every 30 seconds
config . BalanceRefreshInterval = TimeSpan . FromSeconds ( 30 ) ;
} ) ; var balance = await chargilyClient . GetBalance ( ) ; // by id
var byId = await chargilyClient . GetProduct ( "id" ) ;
// by page number & page size
var products = await chargilyClient . GetProducts ( page : 1 , pageSize : 50 ) ;
// or iterate through all items using `Async Enumerable async foreach`
await foreach ( var product in chargilyClient . Products ( ) )
{
/* ... */
} await chargilyClient . DeleteProduct ( "01hrtc39vq463jhnemv0q33mcq" ) ; // by id
var byId = await chargilyClient . GetPrice ( "id" ) ;
// by page number & page size
var prices = await chargilyClient . GetPrices ( page : 1 , pageSize : 50 ) ;
// or iterate through all items using `IAsyncEnumerable async foreach`
await foreach ( var price in chargilyClient . Prices ( ) )
{
/* ... */
} // by id
var byId = await chargilyClient . GetCustomer ( "id" ) ;
// by page number & page size
var customers = await chargilyClient . GetCustomers ( page : 1 , pageSize : 50 ) ;
// or iterate through all items using `IAsyncEnumerable async foreach`
await foreach ( var customer in chargilyClient . Customers ( ) )
{
/* ... */
} await chargilyClient . DeleteCustomer ( "01hrsfjgvfvv1007y54y8fph1v" ) ; // by id
var byId = await chargilyClient . GetCheckout ( "id" ) ;
// by page number & page size
var checkouts = await chargilyClient . GetCheckouts ( page : 1 , pageSize : 50 ) ;
// or iterate through all items using `IAsyncEnumerable async foreach`
await foreach ( var checkout in chargilyClient . Checkouts ( ) )
{
/* ... */
} var checkoutItems = await chargilyClient . GetCheckoutItems ( "checkoutId" ) ; // by id
var byId = await chargilyClient . GetPaymentLink ( "id" ) ;
// by page number & page size
var paymentLinks = await chargilyClient . GetPaymentLinks ( page : 1 , pageSize : 50 ) ;
// or iterate through all items using `IAsyncEnumerable async foreach`
await foreach ( var paymentLink in chargilyClient . PaymentLinks ( ) )
{
/* ... */
} var paymentLinksItems = await chargilyClient . GetPaymentLinkItems ( "paymentLinkId" ) ;Chargily.Pay.AspNet : dotnet add Chargily.Pay.AspNet using Chargily . Pay ;
using Chargily . Pay . AspNet ;
var builder = WebApplication . CreateBuilder ( args ) ;
builder . Services
// Register Chargily Pay Client
. AddGlobalChargilyPayClient ( config =>
{
// toggle live mode
config . IsLiveMode = false ;
// your chargily dev account api-secret key
config . ApiSecretKey = "YOUR API SECRET" ;
} )
// Register Chargily Pay Webhook Signature Validator
. AddChargilyPayWebhookValidationMiddleware ( ) ;
var app = builder . Build ( ) ;
// User Chargily Pay Webhook Signature Validator Middleware
app . UseChargilyPayWebhookValidation ( ) ;
// Map Webhook Endpoint to `both POST & GET /api/checkout-webhook`
app . MapChargilyPayWebhookEndpoint ( "/chargily/webhook" , async ( webhookContext ) =>
{
// you can access the webhook body, http context, validation result
if ( webhookContext . SignatureIsValid )
{
var body = webhookContext . Request ;
/* do something with the webhook request body */
}
} ) ;
app . Run ( ) ; В приведенном выше примере Chargily.Pay.AspNet предоставляет встроенное промежуточное программное обеспечение для проверки подписи веб-перехватчика. Вы можете зарегистрировать его с помощью builder.Services.AddChargilyPayWebhookValidationMiddleware() а затем использовать его с app.UseChargilyPayWebhookValidation() .
Он проверит любой POST запрос с именем заголовка: signature . Вы можете переопределить имя заголовка с помощью app.UseChargilyPayWebhookValidation("another_name") .
Также встроена конечная точка минимального вебапи, которую можно зарегистрировать с помощью app.MapChargilyPayWebhookEndpoint() и использовать ее для доступа к телу веб-перехватчика без ручной проверки.
Chargily.Pay и Chargily.Pay.AspNet можно создать с помощью этой команды: docker build . -- output = . / output.nupkg будут сохранены в папке ./output Пакеты/плагины Chargily Pay™ представляют собой набор проектов с открытым исходным кодом, опубликованных Chargily для облегчения интеграции нашего платежного шлюза с различными языками программирования и платформами. Наша цель — расширить возможности разработчиков и предприятий, предоставляя простые в использовании инструменты для беспрепятственного приема платежей.
Подробные инструкции о том, как интегрироваться с нашим API и использовать Chargily Pay™ в своих проектах, см. в нашей документации по API.
Присоединяйтесь к нашему сообществу разработчиков в Telegram, чтобы общаться с другими разработчиками, задавать вопросы и оставаться в курсе последних новостей и разработок, связанных с Chargily Pay™: Сообщество Telegram
Мы приветствуем любые вклады, будь то исправления ошибок, улучшения функций, улучшения документации или разработки новых плагинов/пакетов. Вот как вы можете начать:
Форк репозитория: нажмите кнопку «Разветвить» в правом верхнем углу этой страницы, чтобы создать собственную копию репозитория.
Клонируйте репозиторий: клонируйте разветвленный репозиторий на локальный компьютер, используя следующую команду:
git clone https://github.com/Chargily/chargily-pay-csharp.gitВнесение изменений: внесите желаемые изменения или дополнения в кодовую базу. Обязательно соблюдайте наши стандарты и рекомендации по кодированию.
Проверьте свои изменения. Тщательно проверьте свои изменения, чтобы убедиться, что они работают должным образом.
Отправьте запрос на включение: как только вы будете удовлетворены внесенными изменениями, отправьте запрос на включение обратно в основной репозиторий. Наша команда рассмотрит ваш вклад и при необходимости предоставит обратную связь.
Есть вопросы или нужна помощь? Присоединяйтесь к нашему сообществу разработчиков в Telegram и общайтесь с другими разработчиками и нашей командой.
Мы ценим ваш интерес к участию в Chargily Pay™! Вместе мы сможем построить что-то потрясающее.
Приятного кодирования!