ممدو
4 سال پیش توسط ممدو مطرح شد
5 پاسخ

عملیات خرید کاربر از سایت

سلام دوستان امیدوارم حالتون خوب باشه تو php تقریبا بیشتر چیزا رو میتونم پیاده سازی کنم جز این روند عملیات خرید کاربر اینکه چه جداولی باید ساخته بشه و چه اطلاعاتی باید توش ذخیره بشه و اینکه من 1 هفته پیش یه پروژه فروشگاه اینترنتی بهم پیشنهاد شد و چون نمیدونستم این روند خرید چطوره از چند نفر پرسیدم اونا هم گفتن ک نه نگیر و مسولیت داره و قسمت خرید کاربر خیلی دردسر داره بدبخت میشی و از این حرفا ما هم رد کردیم اونو ممنون میشم از شما عزیزان ک در مورد همون ساخت جداول و اطلاعات ذخیره شده مورد نیاز و بحث امنیتش بهم کمک کنید دمتون گرم.


ثبت پرسش جدید
وحید
تخصص : Fullstack
@forughi.vahid 4 سال پیش مطرح شد
2

@mamado
ساده ترین حالت ممکن رو در نظر بگیرید ، یه کاربر میخواد یک محصول رو بخره و توی هر سفارش هم فقط یک محصول رو میتونه خریداری کنه ، توی مینیموم ترین حالت ممکن سه تا جدول لازم داریم
. جدول users ، آیدی و نام و ایمیل و موبایل و ... .
. جدول products ، آیدی و نام و توضیحات و قیمت و ...
. جدول orders شامل id , product_id , user_id, amount ,transId, status

  1. کاربر کالا رو انتخاب میکنه و وقتی دکمه پرداخت رو کلیک میکنه ،
  2. یک ریکورد به جدول سفارشات اضافه میکنید و مقادیر user_id, product_id و amount که همون قیمت محصوله رو پر میکنید, status رو هم pending میکنید .
  3. یه درخواست به درگاه میزنید و هزینه و یه url callback برای وریفای بهش میدید ، و درگاه یه transId بهتون برمیگردونه .transId رو توی جدول به روز میکنید و status رو هم init ست میکنید . اون url که میدید به درگاه در واقع یه route post هست که هر وقت عملیات پرداخت تموم شد درگاه اون route رو فراخوانی میکنه و وضعیت پرداخت موفق یا ناموفق رو با همون transId رو هم براتون میفرسته.
  4. توی راوت وریفای شما باید با توجه به transId که بهش ارسال میشه ریکورد سفارش رو از جدول پیداکنید و status اون رو بروز کنید که میتونه failed یا success باشه ،
  5. در آخر هم صفحه پرداخت موفق یا نا موفق رو به کاربر نشون میدید.

چند تا نکته هست
. میتونید جدول تراکنش ها رو از جدول سفارشات جدا کنید.
. اگر محصول ویژگی های خاصی داشت که کاربر میتونست انتخاب کنه مثل رنگ و نوع پرداخت و آدرس و ... کافیه یسری روابط و جداول پیوت با جدول سفارشات درست کنید و موارد انتخابی رو توش ذخیره کنید.
. چون اطلاعات محصول ممکنه تغییر کنه شما باید تمام اطلاعات مهمی که به خرید کاربر مربوط میشه و ممکنه بعدها ایجاد مشکل کنه در کنار هر سفارش دوباره ذخیره کنید ، مثلا نمیتونید قیمت محصول رو با ریلیشن از جدول محصول بگیرید باید حتما توی جدول سفارش هم ذخیرش کنید.
. اگر هر سفارش میتونه چندین محصول داشته باشه و حالت سبد خرید دارید خیلی راحت میتونید یه پیوت تیبل order_product داشته باشید.
. موقع نهایی کردن اطلاعات توی راوت وریفای حتما از transacion db استفاده کنید تا در صورت بروز مشکل rollback کنید و دیتاهاتون خراب نشه.


احسان قربانی
تخصص : PHP ، در حال یادگیری لاراول ،...
@TimeRunner2359 4 سال پیش مطرح شد
0

@mamado
سلام و وقت بخیر
من چیزی که الان تو ذهنمه رو میگم .
برای محصولات یه جدول دارید . که حتما I'd هم داره هر محصول
برای کاربران هم یک جدول که برای سبد خرید و
محصولات خریداری شده استفاده میشه (هر کدوم یک ستون دارن)
برای سبد خرید این گفتگو رو ببینید.
بعد از اینکه سبد خرید پیاده سازی شد ، میاین و Id محصولات مورد نظر که توی سبد خرید هستن رو میگیرید و از اون جدول محصولات، قیمت هر کدوم رو میگیرید و قیمت مجموع رو ارسال میکنید به درگاه پرداخت (درگاه های پرداخت آموزش های مناسب و لازم رو دارن)
بعد از پرداخت موفق،فکر کنم یه متغیر با مقدار true براتون ارسال میشه . این رو میدید به یه تابع که اگر درست بود ، Id اون محصولات رو توی ستون خریداری شده ها اضافه میکنید و از ستون سبد خرید حذفشون میکنید . و بعد هم میتونید متغیر های مختلفی رو بسازید و ارسال کنید به پیج ادمین یا فایل هندل کننده سفارشات (در PHP خام) که مثلا بفهمید خرید انجام شده و به بخش انبار اطلاع بده و ادامه ماجرا....
مطمئنا تجربه دوستان بهتره اما این چیزی بود که به ذهنم رسید 😅
امیدوارم مفید واقع شده باشه
موفق و سلامت باشید
یا حق


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش آپدیت شد
0

بخش خرید کار چندانی هم نداره کلا دوتا جدول لازمه یکی برای ثبت سفارش و دیگری هم برای محصولات یک سفارش که اینجا بین جدول سفارش و محصولات سفارش یک رابطه یک به چند برقراره یعنی یه سفارش میتونه چند تا محصول داشته باشه.
باسم جدول سفارشاتو می تونی بزاری order
و اسم جدول محصولات سفارشو هم میتونی بزاری orderproduct(زبان زیاد خوب نیست)
جدول سفارش یه فیلدهای داره ، جدول محصولات سفارش هم یه فیلدهایی.
اسامی فیلدهای جدول order میتونه این باشه
1 - آدی
2 - فیلد وضعیت پرداخت که مقدار true یا false می گیره. اگه پرداخت با موفقیت انجام شد مقدارش true میشه حالا چه جوری باید بفهمی که مقدارشو true کنی. اینجا بانک یه جواب بهت میده اگه مقدارش فرض مثال 1 بود (از بانک به بانک فرق داره) یعنی پرداخت با موفقیت انجام شده و مقدار این فیلدو true می کنی.
3- تاریخ پرداخت
4- قیمت کل سفارش
این جدول فیلدهای دیگه ای هم میتونه داشته باشه.
فیلدهای فدول orderproduct
1- آدی
2- آدی محصول سفارش داده شده
3 - آدی سفارش که از جدول order میاد.
و یه سر یفیلدهای دیگه.
البته بانک یکی دو مقدار بهت میده که در جدول order هم باید ثبتش کنی مثل شماره پیگیری پرداخت و از این جور چیزا.
برای اتصال به درگاه پرداخت بانک یه وب سرویس بهت میده که از کلاس و متدهاش برای پرداخت استفاده می کنی. به متد وب سرویس بانک یه سری مقدار میدی من جمله قیمت کل محصولاتی که قراره خریدار پرداخت کنه و بانک در یکی دومرحله پرداختو انجام میده و جوابی بهت میده که پرداخت انجام شده.
در سایت نت پارادیس این مطلبو با php خام مفصل توضیح داده بد نیست یه سر اونجا بزنی و مقالشو مطالعه کنی.
@mamado


احسان قربانی
تخصص : PHP ، در حال یادگیری لاراول ،...
@TimeRunner2359 4 سال پیش مطرح شد
0

@hosseinshirinegad98
خیلی خوب و مفید بود 🙏🙏
من تمام حواسم به شماره پیگیری نبود 🤣
@mamado
فقط در تکمیل سخن آقای شیری‌نژاد بگم برای این جدول سفارشات باید به فیلد هم باشه که id کاربر رو هم ذخیره کنه ، وگرنه از کجا معلوم کی به کیه 😂


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

بله درسته جدول order باید دارای فیلد خریدار هم باشد که فراموش کرده بودم.
ممنون
@TimeRunner2359
@mamado


وحید
تخصص : Fullstack
@forughi.vahid 4 سال پیش مطرح شد
2

@mamado
ساده ترین حالت ممکن رو در نظر بگیرید ، یه کاربر میخواد یک محصول رو بخره و توی هر سفارش هم فقط یک محصول رو میتونه خریداری کنه ، توی مینیموم ترین حالت ممکن سه تا جدول لازم داریم
. جدول users ، آیدی و نام و ایمیل و موبایل و ... .
. جدول products ، آیدی و نام و توضیحات و قیمت و ...
. جدول orders شامل id , product_id , user_id, amount ,transId, status

  1. کاربر کالا رو انتخاب میکنه و وقتی دکمه پرداخت رو کلیک میکنه ،
  2. یک ریکورد به جدول سفارشات اضافه میکنید و مقادیر user_id, product_id و amount که همون قیمت محصوله رو پر میکنید, status رو هم pending میکنید .
  3. یه درخواست به درگاه میزنید و هزینه و یه url callback برای وریفای بهش میدید ، و درگاه یه transId بهتون برمیگردونه .transId رو توی جدول به روز میکنید و status رو هم init ست میکنید . اون url که میدید به درگاه در واقع یه route post هست که هر وقت عملیات پرداخت تموم شد درگاه اون route رو فراخوانی میکنه و وضعیت پرداخت موفق یا ناموفق رو با همون transId رو هم براتون میفرسته.
  4. توی راوت وریفای شما باید با توجه به transId که بهش ارسال میشه ریکورد سفارش رو از جدول پیداکنید و status اون رو بروز کنید که میتونه failed یا success باشه ،
  5. در آخر هم صفحه پرداخت موفق یا نا موفق رو به کاربر نشون میدید.

چند تا نکته هست
. میتونید جدول تراکنش ها رو از جدول سفارشات جدا کنید.
. اگر محصول ویژگی های خاصی داشت که کاربر میتونست انتخاب کنه مثل رنگ و نوع پرداخت و آدرس و ... کافیه یسری روابط و جداول پیوت با جدول سفارشات درست کنید و موارد انتخابی رو توش ذخیره کنید.
. چون اطلاعات محصول ممکنه تغییر کنه شما باید تمام اطلاعات مهمی که به خرید کاربر مربوط میشه و ممکنه بعدها ایجاد مشکل کنه در کنار هر سفارش دوباره ذخیره کنید ، مثلا نمیتونید قیمت محصول رو با ریلیشن از جدول محصول بگیرید باید حتما توی جدول سفارش هم ذخیرش کنید.
. اگر هر سفارش میتونه چندین محصول داشته باشه و حالت سبد خرید دارید خیلی راحت میتونید یه پیوت تیبل order_product داشته باشید.
. موقع نهایی کردن اطلاعات توی راوت وریفای حتما از transacion db استفاده کنید تا در صورت بروز مشکل rollback کنید و دیتاهاتون خراب نشه.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام