پیادهسازی یک فرم پرداخت آنلاین با درگاههای پرداخت در ASP.NET Web Forms شامل چند مرحله است. برای این کار، شما باید یک فرم پرداخت طراحی کنید، اطلاعات کاربر را جمعآوری کنید، و سپس اطلاعات را به درگاه پرداخت ارسال کنید. در اینجا یک راهنمای کلی برای پیادهسازی این سیستم ارائه میشود.
### مراحل پیادهسازی
#### 1. انتخاب درگاه پرداخت
برای پیادهسازی پرداخت آنلاین، ابتدا باید یک درگاه پرداخت انتخاب کنید. برخی از درگاههای محبوب شامل:
- زرینپال
- سامانکارت
- ملّیپرداخت
به عنوان مثال، در اینجا نحوه پیادهسازی با زرینپال را بررسی میکنیم.
#### 2. طراحی پایگاه داده (اختیاری)
در صورت نیاز میتوانید یک جدول برای ذخیره اطلاعات پرداختها طراحی کنید:
```sql
CREATE TABLE Payments (
PaymentID INT IDENTITY(1,1) PRIMARY KEY,
Amount DECIMAL(10, 2) NOT NULL,
Status NVARCHAR(50) NOT NULL,
PaymentDate DATETIME NOT NULL DEFAULT GETDATE()
);
```
#### 3. ایجاد پروژه ASP.NET Web Forms
یک پروژه جدید ASP.NET Web Forms در Visual Studio ایجاد کنید.
#### 4. طراحی صفحه `Payment.aspx`
صفحهای برای جمعآوری اطلاعات پرداخت از کاربر ایجاد کنید.
```aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Payment.aspx.cs" Inherits="YourNamespace.Payment" %>
پرداخت آنلاین
```
#### 5. کد بیهند (Code-Behind برای `Payment.aspx.cs`)
در این کد، اطلاعات پرداخت را به درگاه پرداخت ارسال میکنیم.
```csharp
using System;
using System.Configuration;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;
namespace YourNamespace
{
public partial class Payment : System.Web.UI.Page
{
protected void btnPay_Click(object sender, EventArgs e)
{
string amount = txtAmount.Text;
string merchantID = "YOUR_MERCHANT_ID"; // کد پذیرنده
string callbackUrl = "http://yourdomain.com/PaymentResponse.aspx"; // آدرس بازگشت پس از پرداخت
// درخواست به زرینپال
var paymentRequest = new
{
MerchantID = merchantID,
Amount = Convert.ToInt32(amount),
CallbackURL = callbackUrl
};
var json = new JavaScriptSerializer().Serialize(paymentRequest);
var data = new StringContent(json, Encoding.UTF8, "application/json");
// ارسال درخواست
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("https://api.zarinpal.com/pg/v4/payment/request.json");
var response = client.PostAsync("", data).Result;
if (response.IsSuccessStatusCode)
{
var responseJson = response.Content.ReadAsStringAsync().Result;
dynamic responseData = new JavaScriptSerializer().Deserialize(responseJson);
// چک کردن وضعیت و redirect به درگاه
if (responseData["data"]["code"] == 100)
{
string authority = responseData["data"]["authority"];
Response.Redirect("https://www.zarinpal.com/pg/StartPay/" + authority);
}
else
{
lblStatusMessage.Text = "خطا در پرداخت: " + responseData["data"]["message"];
}
}
}
}
}
}
```
### 6. صفحه پاسخ (`PaymentResponse.aspx`)
این صفحه برای دریافت اطلاعات پرداخت پس از بازگشت از درگاه پرداخت استفاده میشود.
```aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PaymentResponse.aspx.cs" Inherits="YourNamespace.PaymentResponse" %>
نتیجه پرداخت
```
### 7. کد بیهند برای صفحه پاسخ (`PaymentResponse.aspx.cs`)
در این کد، وضعیت پرداخت را بررسی کرده و در صورت موفقیت، اطلاعات را در پایگاه داده ذخیره میکنیم.
```csharp
using System;
using System.Configuration;
using System.Data.SqlClient;
namespace YourNamespace
{
public partial class PaymentResponse : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string authority = Request.QueryString["Authority"];
string status = Request.QueryString["Status"];
if (status == "OK")
{
// بررسی وضعیت پرداخت از زرینپال
VerifyPayment(authority);
}
else
{
lblResult.Text = "پرداخت ناموفق بود.";
}
}
private void VerifyPayment(string authority)
{
string merchantID = "YOUR_MERCHANT_ID"; // کد پذیرنده
var paymentVerificationRequest = new
{
MerchantID = merchantID,
Authority = authority,
Amount = 1000 // مقدار پرداخت (به تومان)
};
var json = new JavaScriptSerializer().Serialize(paymentVerificationRequest);
var data = new StringContent(json, Encoding.UTF8, "application/json");
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("https://api.zarinpal.com/pg/v4/payment/verify.json");
var response = client.PostAsync("", data).Result;
if (response.IsSuccessStatusCode)
{
var responseJson = response.Content.ReadAsStringAsync().Result;
dynamic responseData = new JavaScriptSerializer().Deserialize(responseJson);
if (responseData["data"]["code"] == 100)
{
// پرداخت موفق بود
lblResult.Text = "پرداخت موفق!";
SavePaymentInfo(1000, "موفق"); // ذخیره اطلاعات پرداخت
}
else
{
lblResult.Text = "خطا در پرداخت: " + responseData["data"]["message"];
}
}
}
}
private void SavePaymentInfo(decimal amount, string status)
{
string connectionString = ConfigurationManager.ConnectionStrings["YourConnectionString"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{
string query = "INSERT INTO Payments (Amount, Status) VALUES (@Amount, @Status)";
using (SqlCommand command = new SqlCommand(query, connection))
{
command.Parameters.AddWithValue("@Amount", amount);
command.Parameters.AddWithValue("@Status", status);
connection.Open();
command.ExecuteNonQuery();
}
}
}
}
}
```
### 8. تنظیمات Web.config
اطمینان حاصل کنید که رشته اتصال به پایگاه داده در فایل `Web.config` به درستی تنظیم شده است:
```xml
```
### 9. اجرای پروژه
پس از انجام مراحل فوق، پروژه را اجرا کنید. شما باید بتوانید پرداخت آنلاین را با درگاه پرداخت زرینپال انجام دهید و نتیجه آن را مشاهده کنید.
### نکات اضافی
1. **ایمنسازی اطلاعات**: اطمینان حاصل کنید که اطلاعات حساس مانند رمز عبور در هنگام ذخیرهسازی بهدرستی ایمنسازی شدهاند.
2. **آزمون پرداخت**: قبل از ورود به محیط واقعی، از حالت تست درگاه پرداخت استفاده کنید تا اطمینان حاصل کنید که همه چیز بهدرستی کار میکند.
3. **مستندات درگاه پرداخت**: مستندات مربوط به درگاه پرداخت انتخابی خود را مطالعه کنید تا از نحوه ارسال و دریافت اطلاعات آگاه شوید.
این یک نمونه ساده برای پیادهسازی فرم پرداخت آنلاین با درگاههای پرداخت در ASP.NET Web Forms است که میتواند بر اساس نیازهای خاص شما گسترش یابد.
| صفحه قابل مشاهده:
دانلود کد پیادهسازی فرم پرداخت آنلاین با درگاههای پرداخت با ASP.NET Web Form میباشد