Hướng đi
-
Yêu cầu người thanh toán chuyển khoản kèm theo thông tin order (giống như kiểu chuyển khoản ngân hàng ghi lời nhắn là mã đơn hàng ấy)
-
Tạo ra 1 ví (địa chỉ nhận tiền) tương ứng với order khi nhận được tiền vào ví đó thì kích hoạt order
Qua việc nghiên cứu tớ thấy rằng cách 1 sẽ không khả thi, rõ ràng việc lưu thông tin order vào transaction là có thể làm được, nhưng để lưu được vào thì lại phải sử dụng smart contract việc chạy smart contract đòi hỏi người thanh toán phải biết lập trình hoặc dùng ứng dụng ví mà bạn cung cấp (trong ứng dụng ví của bạn đã lập trình sẵn cơ chế để gọi smart contract và lưu kèm “lời nhắn” vào giao dịch). Điều này khó xảy ra vì không ai tin tưởng nhập private key vào ứng dụng của bạn cả khác gì người ta giao hết tài sản cho bạn, còn cần thanh toán làm gì???
TỰ LÀM CỔNG THANH TOÁN CHO WOOCOMMERCE BẰNG TIỀN ĐIỆN TỬ
Vậy nên xét cho cùng thì tạo 1 địa chỉ ví tương ứng với order rồi yêu cầu người dùng chuyển tiền vào đó, khi kiểm tra số tiền trong ví >= số tiền trên order thì sẽ kích hoạt order.
Việc lập trình để kiểm tra số tiền trong ví khá đơn giản. Nhưng lại có 1 số vấn đề sau đó:
-
Thứ nhất là sẽ tạo ra quá nhiều địa chỉ ví, mỗi ví có chứa 1 ít tiền đến lúc muốn gom tiền sẽ rất khó => giải quyết bằng việc dùng 10-20 ví thôi tức là những order sau này có thể gán trùng với ví của order đã thanh toán trước đó, miễn sao không có 2 order đang chờ thanh toán nào được gán cùng 1 ví là được rồi. Nếu bạn có nhiều hơn 20 khách mua hàng cùng 1 lúc thì có thể tạo thêm ví.
-
Phí giao dịch cao, nên nếu mặt hàng có giá trị nhỏ thì sẽ rất khó áp dụng. Bạn tưởng tượng để mua 1 mặt hàng với giá $1 bạn phải trả phí giao dịch $1. Do phí tính theo lượt giao dịch nên nếu thanh toán $100 mà mất phí 1$ thì có vẻ khá ổn.
- Nếu người dùng thanh toán qua sàn thì sàn thường có yêu cầu số tiền chuyển đi tối thiểu khá cao. Nó giống như kiểu bạn mua gói hosting 5k 1 tháng nhưng đến lúc chuyển khoản VCB ngân hàng yêu cầu giao dịch tối thiểu 50k vậy
Vậy giải quyết bài toán này thế nào nếu các đơn hàng của bạn có giá trị nhỏ, thậm chí nhỏ hơn 1$. Đó là tạo account balance riêng cho người dùng trên website của bạn, người dùng sẽ nạp tiền vào đó rồi sau đó dùng… Có thể giải quyết bài toán về phí giao dịch và giá trị giao dịch tối thiểu. Lại còn khuyến khích khách hàng chi nhiều tiền nữa chứ. Ví dụ nạp vào tài khoản $10 cũng mất phí 1$ mà nạp vào $1000 vẫn mất phí giao dịch là $1. Bên cạnh đó số người dùng đương nhiên sẽ ít hơn số order, bạn hoàn toàn có thể tạo cho mỗi người dùng 1 ví riêng để nạp tiền mà không sợ khó quản lý.
Tiếp theo chúng ta đến với 1 bài toán khó hơn đó là việc gom tiền từ các ví phụ (order, hoặc user) về ví chính để có thể bán lấy tiền bank . Mạng sẽ yêu cầu ví chuyển đi phải trả 1 khoản phí phí này tính bằng token chính của mạng đó.
Ví dụ bạn cần chuyển USDT trên mạng BEP20 thì bạn phải có BNB để thanh toán phí ( BNB: đồng coin được chính mạng BEP20 phát hành). Vậy là bạn phải mua 1 số lượng BNB nhất định để chuyển cho các ví phụ để các ví phụ có thể chuyển đc tiền về ví chính…
Ở đây tớ tìm hiểu được 1 số thứ nâng cao như:
-
Sử dụng smart contract để phân phối BNB cho nhiều ví phụ cùng 1 lúc để tiết kiệm chi phí giao dịch
-
Sử dụng smart contract để tự động hóa việc gom tiền theo ngưỡng, ví dụ mỗi khi ví phụ đủ $100 thì sẽ được chuyển về ví chính như vậy tiết kiệm hơn so với việc cứ được $10 thì lại chuyển, nếu phí giao dịch là 1$ thì chuyển $10 1 lần sẽ mất $10 tiền phí còn chờ đủ $100 mới chuển sẽ chỉ mất $1
Tất nhiên việc gom tiền bằng smart contract so với gom tiền bằng code bên ngoài như php chẳng hạn cũng đều có những điểm lợi và hại khác nhau. Chúng ta code trên php kiểm tra ví phụ khi đủ $100 thì chuyển về ví chính thì cũng đạt hiệu quả tương tự. Sự khác nhau là 1 đằng là code chạy bên ngoài, còn 1 đằng là code chạy bên trong nền tảng blockchain luôn
Theo bác Nguyễn Thanh chia sẻ