اتصال به درگاه پرداخت در پروژه فروشگاه اینترنتی
🎯 اهداف یادگیری
- آشنایی با مفاهیم پایه درگاه پرداخت
- پیاده سازی سبد خرید و محاسبات مالی
- اتصال به درگاه پرداخت زرین پال
- مدیریت وضعیت پرداخت و خطاها
- پیاده سازی برگشت از درگاه پرداخت
📌 مقدمه ای بر درگاه های پرداخت
در این بخش میخواهیم سیستم پرداخت را به پروژه فروشگاه اینترنتی اضافه کنیم. درگاه پرداخت واسطه ای بین فروشگاه و بانک است که تراکنشهای مالی را مدیریت میکند.
javascript
// مراحل کلی پرداخت در فروشگاه اینترنتی1. کاربر روی دکمه پرداخت کلیک میکند2. اطلاعات سبد خرید و مبلغ نهایی محاسبه میشود3. اتصال به درگاه پرداخت و ارسال اطلاعات4. کاربر پرداخت را در درگاه انجام میدهد5. بازگشت به سایت و بررسی وضعیت پرداخت
انواع درگاه های پرداخت:
- زرین پال: یکی از محبوبترین درگاههای پرداخت ایرانی
- پیپال: برای پرداختهای بینالمللی
- درگاه بانکی مستقیم: اتصال مستقیم به بانکهای ایرانی
📌 پیاده سازی سبد خرید
قبل از اتصال به درگاه پرداخت، نیاز داریم سبد خرید کاربر را مدیریت کنیم:
javascript
class Cart { constructor() { this.items = []; this.total = 0; } addItem(product, quantity) { // افزودن محصول به سبد خرید const item = { ...product, quantity }; this.items.push(item); this.calculateTotal(); } calculateTotal() { this.total = this.items.reduce((sum, item) => sum + item.price * item.quantity, 0); }}
📌 اتصال به درگاه پرداخت زرین پال
برای اتصال به زرین پال ابتدا نیاز به ثبت نام و دریافت API Key دارید:
javascript
async function initiatePayment() { try { // ارسال درخواست به سرور برای ایجاد تراکنش const response = await fetch('/api/payment/request', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ amount: cart.total, callback: `${window.location.origin}/verify-payment`, description: 'خرید از فروشگاه اینترنتی', }), }); const data = await response.json(); if (data.success) { // هدایت کاربر به درگاه پرداخت window.location.href = data.payment_url; } else { alert(data.message); } } catch (error) { console.error('خطا در اتصال به درگاه پرداخت:', error); alert('خطایی در ارتباط با درگاه پرداخت رخ داده است'); }}
پارامترهای مهم درگاه پرداخت:
- amount: مبلغ تراکنش به ریال
- callback: آدرس بازگشت پس از پرداخت
- description: توضیح کوتاه درباره تراکنش
- mobile: شماره موبایل کاربر (اختیاری)
- email: ایمیل کاربر (اختیاری)
📌 مدیریت بازگشت از درگاه پرداخت
پس از پرداخت، کاربر به آدرس callback هدایت میشود. باید وضعیت پرداخت را بررسی کنیم:
javascript
async function verifyPayment() { const urlParams = new URLSearchParams(window.location.search); const authority = urlParams.get('Authority'); const status = urlParams.get('Status'); if (status === 'OK') { // ارسال درخواست به سرور برای بررسی نهایی پرداخت const response = await fetch(`/api/payment/verify?authority=${authority}`); const data = await response.json(); if (data.success) { showSuccessMessage(data.message); clearCart(); } else { showErrorMessage(data.message); } } else { showErrorMessage('پرداخت با شکست مواجه شد یا توسط کاربر لغو شد'); }}
وضعیتهای ممکن پرداخت:
وضعیت | توضیح |
---|---|
OK | پرداخت با موفقیت انجام شده است |
NOK | پرداخت انجام نشده یا با خطا مواجه شده |
Error | خطایی در پرداخت رخ داده است |
📌 نکات امنیتی در پرداخت اینترنتی
- هرگز API Key را در سمت کلاینت قرار ندهید: تمام ارتباطات با درگاه پرداخت باید از طریق سرور انجام شود
- تأیید مبلغ پرداخت در سرور: قبل از تأیید نهایی پرداخت، مبلغ را با مبلغ سفارش مقایسه کنید
- استفاده از HTTPS: برای جلوگیری از حملات Man-in-the-middle
- لاگ گیری از تراکنشها: برای پیگیری مشکلات احتمالی
- اعتبارسنجی ورودیها: بررسی صحت پارامترهای دریافتی از درگاه پرداخت
📌 تمرین عملی
صفحه پرداخت را با ویژگیهای زیر تکمیل کنید:
javascript
class PaymentPage { constructor() { // 1. نمایش خلاصه سفارش // 2. افزودن امکان انتخاب روش پرداخت // 3. پیاده سازی اعتبارسنجی فرم پرداخت // 4. مدیریت رویداد کلیک روی دکمه پرداخت // 5. نمایش وضعیت پرداخت به کاربر }}
راهنمای تمرین:
- صفحهای طراحی کنید که خلاصه سفارش (محصولات، تعداد، مبلغ کل) را نمایش دهد
- امکان انتخاب روش پرداخت (زرین پال، کارت به کارت، پرداخت در محل) را اضافه کنید
- اطلاعات کاربر (نام، آدرس، تلفن) را دریافت و اعتبارسنجی کنید
- پس از کلیک روی دکمه پرداخت، کاربر را به درگاه هدایت کنید
- پس از بازگشت از درگاه، نتیجه پرداخت را به کاربر نمایش دهید
📌 قدم بعدی
در بخش بعدی با سیستم احراز هویت کاربران در پروژه فروشگاه اینترنتی آشنا خواهیم شد!