PDA

View Full Version : Hỏi về xử lý thanh toán khi khởi tạo dịch vụ khi thời gian chờ sevice phản hồi quá lâu



vokhanhthuy
27-11-2013, 08:42
Chào mọi người.
Hiện tại mình đang phải làm một chức năng khởi tạo dịch vụ cho đại lý bên cty mình trên Asp.Net. Khi đại lý khởi tạo hợp đồng dịch vụ (đăng ký hosting window hoặc linux) và thưc hiện thanh toán thì mình sẽ phải gọi sevice để thực hiện khởi tạo hosting trên pleskpanel luôn, và nếu thành công thì sẽ trừ tiền của đại lý. Vấn đề mình gặp phải là hiện tại để khởi tạo một hosting trên pleskpanel thông qua websevice mất khoảng 20 phút, nhưng khi đại lý bấm thanh toán thì không thể ngồi chờ 20 phút để nhận kết quả trả về từ sevice được.
- Trước yêu cầu đặt ra đó, mình có một ý tưởng là sau khi khách hàng thực hiện thao tác thanh toán, sẽ cho nhảy về một trang list các danh sách giao dịch (Các hosting đang khởi tạo) đang thực hiện. Và cái nào xong thì mới trừ tiền.
=> Vấn đề mình gặp phải là chưa biết sử dụng phương pháp gì để giải quyết vấn đề này, khi click thành toán thì sẽ gọi sevice, nhưng sevice chạy chưa xong làm sao để nhảy về trang List mà vẫn đảm bảo yêu cầu vừa gửi đến sevice vẫn hoạt động??? Và trên list các giao dịch đã thực hiện, làm sao check được thời gian thực giao dịch nào đã xong?

Mong nhận được sự chia sẻ của mọi người!

mucor
28-11-2013, 13:03
Vấn đề của bạn có thể giải quyết như sau:

+ Thêm một field trong database để lưu trạng thái giao dịch
+ Sau khi người dùng thanh toán xong giao dịch, giao dịch sẽ được đặt trạng thái là 'Yêu cầu khởi tạo'. Trở về trang trạng thái giao dịch. Trang này được cập nhật định kỳ sau 1phút.
+ Tạo một service chạy thường trú, định kỳ 10s lần lấy ra giao dịch cũ nhất có trạng thái là 'Yêu cầu khởi tạo'. Nếu có giao dịch thì đặt trạng thái là 'Đang khởi tạo', tạo thread mới gọi script khởi tạo dịch vụ. Sau khi script khởi tạo dịch vụ chạy xong, cập nhật database đặt trạng thái của giao dịch là 'Khởi tạo xong'.

Cách làm này tôi đã áp dụng cho website Shotiz.com . Bạn sẽ thấy việc chụp ảnh trang web sẽ mất khoảng 2 - 5 phút nhưng trang web vẫn chạy tiếp không bắt người dùng chờ.

vokhanhthuy
28-11-2013, 16:24
Mình sẽ nghiên cứu theo hướng bạn vừa gợi ý!