.NET Library (Omise.Net)
ไลบรารี Omise.Net ให้อินเทอร์เฟซ C# ที่ทันสมัยสำหรับ Omise API พร้อมรูปแบบ async/await, การรองรับ LINQ และการรวมระบบ ASP.NET Core ที่ยอดเยี่ยม
การติดตั้ง
การใช้ NuGet Package Manager
dotnet add package Omise.Net
การใช้ Package Manager Console
Install-Package Omise.Net
การใช้ .csproj
<ItemGroup>
<PackageReference Include="Omise.Net" Version="1.0.0" />
</ItemGroup>
ข้อกำหนด
- .NET Core 3.1+ หรือ .NET 5+, .NET 6+, .NET 7+
- C# 8.0+ (สำหรับ nullable reference types)
- ASP.NET Core (สำหรับเว็บแอปพลิเคชัน)
เริ่มต้นอย่างรวดเร็ว
การกำหนดค่าพื้นฐาน
using Omise;
var client = new Client(
publicKey: "pkey_test_123456789",
secretKey: "skey_test_123456789"
);
ด้วย Dependency Injection (ASP.NET Core)
// Program.cs หรือ Startup.cs
using Omise;
builder.Services.AddSingleton<IClient>(sp =>
new Client(
publicKey: builder.Configuration["Omise:PublicKey"],
secretKey: builder.Configuration["Omise:SecretKey"]
)
);
การกำหนดค่า (appsettings.json)
{
"Omise": {
"PublicKey": "pkey_test_123456789",
"SecretKey": "skey_test_123456789",
"ApiVersion": "2019-05-29"
}
}
ตัวแปรสภาพแวดล้อม
# การพัฒนา/ทดสอบ
OMISE_SECRET_KEY=skey_test_123456789
OMISE_PUBLIC_KEY=pkey_test_123456789
# ผลิตภาพ
# OMISE_SECRET_KEY=skey_live_123456789
# OMISE_PUBLIC_KEY=pkey_live_123456789
การดำเนินการทั่วไป
การสร้างค่าธรรมเนียม
using Omise;
using Omise.Models;
var client = new Client("pkey_test_123", "skey_test_123");
var request = new CreateChargeRequest
{
Amount = 100000, // 1,000.00 THB
Currency = "THB",
Card = "tokn_test_123",
Description = "Order #1234",
Metadata = new Dictionary<string, object>
{
["order_id"] = "1234",
["customer_name"] = "John Doe"
}
};
var charge = await client.Charges.CreateAsync(request);
if (charge.Paid)
{
Console.WriteLine($"เรียกเก็บเงินสำเร็จ: {charge.Id}");
}
else
{
Console.WriteLine($"เรียกเก็บเงินล้มเหลว: {charge.FailureMessage}");
}
ด้วย Record Types (C# 9.0+)
public record CreateChargeModel(
long Amount,
string Currency,
string Token,
Dictionary<string, object>? Metadata = null
);
public async Task<Charge> CreateChargeAsync(CreateChargeModel model)
{
var request = new CreateChargeRequest
{
Amount = model.Amount,
Currency = model.Currency,
Card = model.Token,
Metadata = model.Metadata ?? new Dictionary<string, object>()
};
return await _client.Charges.CreateAsync(request);
}
ด้วย 3D Secure
public async Task<ChargeResult> CreateSecureChargeAsync(
long amount,
string token,
string returnUri)
{
var request = new CreateChargeRequest
{
Amount = amount,
Currency = "THB",
Card = token,
ReturnUri = returnUri
};
var charge = await _client.Charges.CreateAsync(request);
if (charge.Authorized)
{
if (!string.IsNullOrEmpty(charge.AuthorizeUri))
{
return new ChargeResult { RedirectUri = charge.AuthorizeUri };
}
else
{
return new ChargeResult { Success = true, Charge = charge };
}
}
throw new Exception(charge.FailureMessage);
}
การดึงค่าธรร มเนียม
var charge = await client.Charges.GetAsync("chrg_test_123");
Console.WriteLine($"จำนวนเงิน: {charge.Amount}");
Console.WriteLine($"สกุลเงิน: {charge.Currency}");
Console.WriteLine($"สถานะ: {charge.Status}");
Console.WriteLine($"ชำระแล้ว: {charge.Paid}");
การแสดงรายชื่อค่าธรรมเนียมด้วย LINQ
var request = new ListChargesRequest
{
Limit = 20,
Offset = 0,
Order = Ordering.ReverseChronological
};
var charges = await client.Charges.ListAsync(request);
var paidCharges = charges.Data
.Where(c => c.Paid)
.OrderByDescending(c => c.Created)
.ToList();
foreach (var charge in paidCharges)
{
Console.WriteLine($"{charge.Id}: {charge.Amount} {charge.Currency}");
}
การสร้างลูกค้า
var request = new CreateCustomerRequest
{
Email = "customer@example.com",
Description = "John Doe",
Metadata = new Dictionary<string, object>
{
["user_id"] = "12345",
["account_type"] = "premium"
}
};
var customer = await client.Customers.CreateAsync(request);
Console.WriteLine($"สร้างลูกค้าแล้ว: {customer.Id}");
การบันทึกบัตรเข้าไปในลูกค้า
// อัพเดตลูกค้าด้วยโทเคนบัตร
var updateRequest = new UpdateCustomerRequest
{
Card = "tokn_test_456"
};
var customer = await client.Customers.UpdateAsync("cust_test_123", updateRequest);
Console.WriteLine($"บันทึกบัตรแล้ว: {customer.DefaultCard}");
// หรือสร้างลูกค้าพร้อมกับบัตร
var createRequest = new CreateCustomerRequest
{
Email = "customer@example.com",
Card = "tokn_test_123"
};
customer = await client.Customers.CreateAsync(createRequest);
การแสดงรายชื่อบัตรลูกค้า
var customer = await client.Customers.GetAsync("cust_test_123");
foreach (var card in customer.Cards.Data)
{
Console.WriteLine($"{card.Brand} ลงท้ายด้วย {card.LastDigits}");
Console.WriteLine($"หมดอายุ: {card.ExpirationMonth}/{card.ExpirationYear}");
}
การสร้างการคืนเงิน
// คืนเงินเต็มจำนวน
var refund = await client.Refunds.CreateAsync("chrg_test_123");
// คืนเงินบางส่วน
var request = new CreateRefundRequest
{
Amount = 25000, // 250.00 THB
Metadata = new Dictionary<string, object>
{
["reason"] = "customer_request",
["ticket_id"] = "TICKET-123"
}
};
refund = await client.Refunds.CreateAsync("chrg_test_123", request);
Console.WriteLine($"คืนเงิน {refund.Id}: {refund.Amount} {refund.Currency}");
การสร้างการโอน
var request = new CreateTransferRequest
{
Amount = 500000, // 5,000.00 THB
Recipient = "recp_test_123",
Metadata = new Dictionary<string, object>
{
["payout_id"] = "PAYOUT-456"
}
};
var transfer = await client.Transfers.CreateAsync(request);
Console.WriteLine($"โอนเงิน {transfer.Id}: {transfer.Amount}");
วิธีการชำระเงินแบบอื่น
การสร้างแหล่งที่มา
// QR PromptPay
var request = new CreateSourceRequest
{
Type = SourceType.PromptPay,
Amount = 100000,
Currency = "THB"
};
var source = await client.Sources.CreateAsync(request);
Console.WriteLine($"QR Code URL: {source.ScannableCode.Image.DownloadUri}");
// สร้างค่าธรรมเนียมด้วยแหล่งที่มา
var chargeRequest = new CreateChargeRequest
{
Amount = 100000,
Currency = "THB",
Source = source.Id,
ReturnUri = "https://example.com/payment/callback"
};
var charge = await client.Charges.CreateAsync(chargeRequest);
ธนาคารอินเทอร์เน็ต
var sourceRequest = new CreateSourceRequest
{
Type = SourceType.InternetBankingSCB,
Amount = 100000,
Currency = "THB"
};
var source = await client.Sources.CreateAsync(sourceRequest);
var chargeRequest = new CreateChargeRequest
{
Amount = 100000,
Currency = "THB",
Source = source.Id,
ReturnUri = "https://example.com/payment/callback"
};
var charge = await client.Charges.CreateAsync(chargeRequest);
// เปลี่ยนเส้นทางไปยัง charge.AuthorizeUri
การผ่อนชำระ
var sourceRequest = new CreateSourceRequest
{
Type = SourceType.InstallmentKBank,
Amount = 100000,
Currency = "THB",
InstallmentTerm = 6 // 6 เดือน
};
var source = await client.Sources.CreateAsync(sourceRequest);
var chargeRequest = new CreateChargeRequest
{
Amount = 100000,
Currency = "THB",
Source = source.Id,
ReturnUri = "https://example.com/payment/callback"
};
var charge = await client.Charges.CreateAsync(chargeRequest);
การจัดการข้อผิดพลาด
using Omise.Exceptions;
try
{
var charge = await client.Charges.CreateAsync(request);
}
catch (OmiseException ex)
{
Console.WriteLine($"ข้อผิดพลาด: {ex.Message}");
Console.WriteLine($"รหัสสถานะ: {ex.StatusCode}");
Console.WriteLine($"รหัสข้อผิดพลาด: {ex.Code}");
switch (ex.Code)
{
case "authentication_failure":
throw new InvalidOperationException("คีย์ API ไม่ถูกต้อง");
case "invalid_card":
throw new InvalidOperationException("บัตรถูกปฏิเสธ");
case "insufficient_fund":
throw new InvalidOperationException("เงินไม่เพียงพอ");
default:
throw;
}
}
catch (HttpRequestException ex)
{
Console.WriteLine($"ข้อผิดพลาดเครือข่าย: {ex.Message}");
}