2 điểm bởi arcoding 4 giờ trước | 6 bình luận | Chia sẻ qua WhatsApp

Tôi đã tạo và công khai một hệ thống xử lý thanh toán mã nguồn mở tên là LOSLES như một dự án cá nhân.

Ý tưởng cốt lõi của dự án này là "phát hiện chuyển khoản ngân hàng + dùng chính số tiền như ID đơn hàng".
Thanh toán chuyển khoản ngân hàng thông thường thường phải trải qua quy trình như sau.

  • Đăng ký với công ty PG
  • Đăng ký kinh doanh
  • Thẩm định
  • Tích hợp API
  • Phát sinh phí thanh toán
  • Chờ đối soát/thanh toán

Với các lập trình viên cá nhân hoặc dự án quy mô nhỏ, đây thường là gánh nặng không hề nhỏ.
Vì vậy tôi đã xây dựng nó với suy nghĩ rằng "liệu có thể định danh đơn hàng chỉ bằng số tiền hay không?"

Ví dụ nếu giá sản phẩm là 10.000 won,

Đơn hàng đầu tiên:
10.000 won

Đơn hàng thứ hai của cùng sản phẩm trong vòng 30 phút:
9.999 won

Đơn hàng thứ ba:
9.998 won

Đơn hàng thứ tư:
9.997 won
...

Theo cách này, mỗi đơn hàng sẽ được gán một số tiền riêng biệt.
(Trong triển khai thực tế, bắt đầu từ mức giảm 99 won rồi trừ dần 98 won, 97 won, 96 won...)
Vì vậy máy chủ có thể xác định đó là đơn hàng nào chỉ bằng cách nhìn vào số tiền mà không cần nhập mã đơn hàng riêng.

Ứng dụng Android LOSLES có vai trò phát hiện thông báo nạp tiền KakaoPay và tự động gửi ra máy chủ bên ngoài.
Ứng dụng sử dụng quyền truy cập thông báo của Android (Notification Listener) để theo dõi thông báo của KakaoTalk·KakaoPay theo thời gian thực,
và khi nhận được thông báo có chứa số tiền nạp, nó sẽ trích xuất số tiền đó và gửi yêu cầu POST tới URL máy chủ đã được cấu hình.
Khi dùng cùng LOSLES WEB Server, có thể tự động hóa toàn bộ quy trình từ lúc người dùng chuyển tiền đến khi xử lý hoàn tất thanh toán.

Toàn bộ luồng

  1. Người dùng tạo đơn hàng
  2. Máy chủ cấp số tiền riêng
  3. Người dùng chuyển khoản đúng số tiền đó (hiện chỉ hỗ trợ KakaoPay)
  4. Ứng dụng Android phát hiện thông báo nạp tiền
  5. Gửi số tiền lên máy chủ
  6. Máy chủ khớp số tiền với đơn hàng
  7. Tự động xử lý hoàn tất thanh toán

Nói cách khác,

không phải "ai là người gửi"
mà là "đã gửi bao nhiêu" được dùng làm tiêu chí để nhận diện thanh toán.

Lưu ý

Điểm quan trọng là LOSLES không phải là dự án nhằm thay thế PG chính thức.
Với các dịch vụ quy mô lớn, những tính năng như hoàn tiền, đối soát/thanh toán, biên lai, xử lý tranh chấp và bảo mật do công ty PG cung cấp vẫn rất quan trọng.
Tuy nhiên, trong trường hợp dự án cá nhân hoặc bán nội dung số quy mô nhỏ,
tôi cảm thấy tình huống "phải đăng ký kinh doanh rồi còn phải qua thẩm định PG chỉ để nhận thanh toán"
là hơi quá mức,

và đây là một dự án thử nghiệm cách triển khai thanh toán tự động mà không cần trải qua quy trình đó.
Hiện tại đây là phiên bản beta và tôi đang nhận phản hồi.
Tôi đặc biệt muốn nghe ý kiến về các điểm dưới đây.

  • Vấn đề của phương thức nhận diện dựa trên số tiền
  • Cách xử lý đơn hàng trùng lặp
  • Ý tưởng cải thiện bảo mật
  • Ý kiến từ những người có kinh nghiệm vận hành thực tế

Xin cảm ơn.

6 bình luận

 

Ví dụ, ở một quán ăn mà canh kimchi cũng 10.000 won và canh doenjang cũng 10.000 won, khi có một đơn hàng 10.000 won được gửi vào thì có phải là sẽ không thể phân biệt được đó là món nào đã được gọi không?

 

Ngay cả với các sản phẩm khác nhau nhưng cùng giá, cũng cần áp dụng mức giảm giá lệch nhau 1 won cho từng sản phẩm. Khi sử dụng thực tế, bạn không đăng ký sản phẩm lên máy chủ LosLes mà hệ thống sẽ tự xem giá niêm yết của hàng hóa và tự điều chỉnh mức giảm giá khác nhau.

 

Vậy là phải cứ tiếp tục bán cùng một sản phẩm với các mức giá khác nhau à?

 

Đúng một nửa và sai một nửa: giá niêm yết đều là 10.000 won,
nhưng yêu cầu thanh toán đầu tiên trong vòng 30 phút sẽ được giảm 99 won,
yêu cầu thanh toán thứ hai trong vòng 30 phút sẽ được giảm 98 won theo kiểu như vậy. Có vẻ như phần thân bài đã không truyền đạt đúng ý này.

 

Nếu khách hàng lỡ gửi sai thì việc đối soát sẽ bị lỗi nhỉ.

 
arcoding 1 giờ trước

Đúng là đó cũng là nhược điểm lớn nhất.
Với những dự án quy mô nhỏ đến mức có thể hỏi qua DM thủ công thì vẫn ổn,
nhưng với các công ty lớn thì có vẻ nên ký hợp đồng với bên PG rồi sử dụng sẽ tốt hơn.