2009-08-31 41 views
10

Tôi hiện đang xây dựng một trang web thương mại điện tử với PHP/MySQL. Gần đây, tôi đã làm việc về tích hợp Giỏ hàng. Khách hàng muốn đảm bảo rằng cổ phiếu đã có sẵn cho người mua tiềm năng, vì vậy tôi đã tạo một hệ thống quản lý cổ phiếu. Giỏ hàng hoạt động như sau:Giỏ hàng và quản lý chứng khoán

  • Khách hàng thêm số lượng mặt hàng vào giỏ hàng của mình.
  • Số lượng mặt hàng được đặt trước từ cổ phiếu có sẵn trong cơ sở dữ liệu.
  • Không ai khác có thể mua riêng cổ phiếu.
  • Cổ phiếu vẫn được giữ lại cho đến khi khách hàng quy trình đặt hàng - nơi cổ phiếu sau đó được xóa khỏi cơ sở dữ liệu.
  • Nếu khách hàng từ bỏ giỏ hàng của mình, cổ phiếu vẫn được giữ lại.
  • Nếu một khách hàng khác muốn mua một mặt hàng, nhưng chỉ có cổ phiếu sẵn có được đặt trước bởi một khách hàng khác, thì khách hàng có thể lấy cắp cổ phiếu dự trữ nếu nó không hoạt động trong 20 phút.

Câu hỏi của tôi là, thực tiễn tốt nhất cho loại kịch bản này là gì? Tôi đang làm điều này một cách chính xác? Điều chính là khách hàng không muốn bán cổ phiếu mà anh ta không có.

Tôi đang tìm cách thảo luận về cách cải thiện chức năng hoặc những gì người khác đang làm để thực hiện việc này.

Trả lời

14

Một cách tiếp cận khác có thể không được dự trữ một cổ phiếu khi đặt nó vào giỏ hàng. Thực hiện kiểm tra mỗi khi một trang được tải lại, nếu mục đó không có sẵn, hiển thị một thông báo như "Mục bạn muốn mua vừa được bán hết. Nó sẽ sớm có sẵn". Và bạn lấy sản phẩm ra khỏi giỏ hàng.

Bây giờ, bạn hoàn toàn phải đặt trước nội dung giỏ hàng ngay trước khi bắt đầu hoạt động thanh toán, sau đó xóa nó khỏi cổ phiếu hoặc xóa khoản dự trữ tùy thuộc vào thành công/thất bại của khoản thanh toán. Bạn làm điều đó tốt hơn trong một mã chạy, để dự trữ kéo dài càng ngắn càng tốt.

ProcessOrder() 
{ 
    bool reserved = ReserveShoppingCartContents(); 
    if (reserved) 
    { 
     bool paymentStatus = ProcessPayment(); 
     if (paymentStatus) 
      RemoveShoppingCartContentsFromStock(); 
     else 
      ReleaseShoppingCartReserve(); 
    } 
    else 
    { 
     RefreshShoppingCartContents(); // Remove positions or adjust quantities 
     MessageBox ("Could not reserve your shopping cart contents. Please check out your selection"); 
    } 
} 

Khoản tiền dự trữ của bạn càng dài, cơ hội của bạn sẽ được bán thực sự cao hơn. Bạn giảm thiểu khả năng xảy ra xung đột: CustomerA bắt đầu với giỏ hàng, mặt hàng được đặt trước, CustomerB đến, thấy mặt hàng không có trong kho và biến mất, CustomerA quyết định không thích giá và hủy hoạt động. Bạn có hai khách hàng tiềm năng nhưng không thể bán cho một trong hai.

+0

Cảm ơn lời khuyên. Tôi sẽ làm lại chức năng. Tôi biết đó không phải là cách tốt nhất để làm việc này. Cổ phiếu đóng băng có lẽ không phải là một ý tưởng hay, trừ khi bạn bán các sản phẩm độc đáo, chẳng hạn như vé hòa nhạc. – jgallant

+0

Có, như với các giao dịch cơ sở dữ liệu và kiểm soát nguồn, mặc định là khóa lạc quan trừ khi bạn có lý do chính đáng để làm khác. – Jerph

3

tôi thực hiện kiểm tra chứng khoán trên mỗi lần tải lại các trang trong quá trình thanh toán và chuyển hướng chúng đến trang giỏ hàng với thông báo lỗi nếu trong quá trình các mặt hàng đã được bán hết. Cổ phiếu chỉ được giảm theo thứ tự được xác nhận Tôi cũng khôi phục lại cổ phiếu nếu đơn đặt hàng bị hủy.

Các vấn đề liên quan