thảo luận Xin nhận xét về SaaS app mà mình vừa hoàn thành

PuKaX

Senior Member
Hi mọi người, vừa rồi mình có xây dựng một cái SaaS app nho nhỏ, và có đăng tải lên một vài cộng đồng startup như indiehackers, hacker news... để xin nhận xét. Tuy nhiên thì ứng dụng của mình sử dụng UI là tiếng Việt nên cũng chưa nhận được nhiều quan tâm cũng như đóng góp ý kiến cho lắm. Mà hiện tại ở Việt Nam mình thì lại chưa có website cộng đồng nào về startup cả, nên thôi mạo muội đăng lên đây, vì dù gì voz là nơi mình tham gia đã lâu, lại có không ít cao nhân ẩn dật, hy vọng sẽ nhận được ít nhiều gạch, đá, cát, sỏi, xi măng về hoàn thiện cái dự án biệt phủ của mình.

Để tránh wall of text mình sẽ để nội dung câu chuyện trong spoiler, đại loại là mời anh em ghé thăm trải nghiệm app của mình tại https://transmoni.vn và nếu được cho mình xin chút ý kiến nhận xét, góp ý. Cảm ơn anh em đã bớt chút thời gian ghé qua thớt này, nếu có sai sót mong mod thương tình nhẹ tay đao, xin đa tạ!

Chả là năm vừa rồi covid nó tung hoành ác quá, lúc đầu cũng nghĩ đâu nó đơn giản, hết đợt một tưởng rằng mọi thứ sẽ bình yên trở lại. Ai ngờ đâu, lại ra tiếp tục đợt 2 rồi đợt 3, khiến cho thời gian rảnh rỗi của mình nó tăng lên một cách mất kiểm soát. Vì vậy nên mình quyết định làm một cái gì đó để giết thời gian, cũng như đỡ ngứa tay ngứa chân và khỏi "lụt" nghề code dạo của bản thân.

Lên ý tưởng
Trong lúc vắt óc suy nghĩ xem nên làm gì thì tình cờ có một thành viên trong group lập trình mà mình tham gia có hỏi về vấn đề xin API của ngân hàng cũng như có cách nào để tích hợp chuyển khoản vào website của họ không... Thì mình chợt nhớ ra cũng đã từng rơi vào hoàn cảnh i chang xì đúc, đó là làm cách nào để khách hàng chuyển tiền vào tài khoản công ty thì sẽ tự động cộng tiền trong tài khoản của họ trên website. Lúc đó cũng bế tắc lắm vì đời nào ngân hàng họ chịu cấp API cho cá nhân hay các doanh nghiệp cỡ nhỏ lại chả dính dáng gì đến nghiệp vụ của họ! Và giải pháp cuối cùng là mình quyết định làm một cái module tự động truy xuất giao dịch trong tài khoản để áp vào website của công ty. Nhưng nó là câu chuyện của nhiều năm trước rồi, nay vô tình có người nhắc lại nên mình thử hỏi ông anh con bác Google xem có gì đổi mới chưa, một phần vì muốn trao đổi với thanh niên trên group, một phần cũng để cập nhật tin tức nữa... và thật bất ngờ nó... vẫn vậy. Điểm sáng duy nhất là bắt đầu có định nghĩa về open banking, tuy nhiên chỉ có ông OCB là gia nhập hội này, mà cũng rất hạn chế tính năng (chắc do là đơn vị tiên phong nên cũng chưa dám open quá). Thêm vào đó open banking thì mình cũng cần chủ động truy xuất thông tin chứ khó có thể nào phía ngân hàng lại chủ động gửi instant payment notification cho mình cả. Vì vậy mình quyết định lôi cái module mà mình xây dựng trước đây để làm "cái gì đó" đang trăn trở bấy lâu.

Use case
Như đã trình bày ở trên, use case cho dự án này là việc cung cấp một giải pháp để tích hợp hình thức thanh toán tự động thông qua giao dịch chuyển khoản ngân hàng. Ngoài ra thì mình còn mở rộng thêm về các hình thức thông báo giao dịch và biến động số dư thông qua các kênh nhắn tin trực tuyến như Telegram, Slack... phục vụ trong trường hợp bạn muốn chia sẻ thông tin giao dịch cho gia đình hoặc nhóm làm việc của mình nhưng lại không muốn giao tài khoản ngân hàng cho họ.

Triển khai
Ý tưởng là vậy, mặc dù cái module mình làm trước đây vẫn chạy tốt, thỉnh thoảng ngân hàng họ cập nhật hệ thống thì mình chỉ phải mô đi phê lại chút là lại ngon lành. Nhưng để làm SaaS app thì cần nhiều thứ hơn nữa. Nào là website để quản lý user, cách thức liên kết tài khoản ngân hàng, quản lý lịch trình truy xuất dữ liệu, rồi tiếp đến còn thu phí thuê bao ra sao... hầm bà lằng. Nói chung mình mất khoảng 6 tháng để mọi thứ gọi là hòm hòm, và mất thêm 3 tháng để live test, khá oải.
Trong thời gian thử nghiệm hệ thống mình có dùng free tier của Amazon aws và Google cloud, nên mình cũng dự kiến là nếu lên production cũng sẽ dùng của 2 anh này thôi. Tuy nhiên chi phí thì khá là ối giời ơi nó đắt, free tier thì không thể dùng làm production được, đến lúc "on air" thì tiền đâu ra mà trả trong thời gian đầu khi chưa có khách hàng. May mắn thay khi tìm hiểu kinh nghiệm của các startup khác thì thấy họ nhắc đến aws activate, đại loại đây là một chương trình hỗ trợ khởi nghiệp của Amazon, các startup sẽ được tài trợ một số tiền (quy ra credits) để thuê cơ sở hạ tầng của họ (chủ yếu là họ nuôi mình lúc còn non nớt, sau này lớn mạnh mình sẽ nuôi lại họ, đây là hợp tác win-win, mà kể cả mình có không dùng của họ thì cũng chả sao, tây nó thoáng). Thấy cũng ngon, nên cũng liều đăng ký thử, và sau vài vòng ép cung, họ đồng ý cấp cho mình 1000 USD sử dụng cho cơ sở hạ tầng và 350 USD cho hỗ trợ kỹ thuật, toẹt vời ông mặt trời.
Và đến giờ phút này thì "nó" đã thực sự hoàn thiện rồi, mặc dù còn nhiều tính năng mà mình muốn phát triển thêm nữa nhưng những gì trong ý tưởng của mình đã hoàn thành, giờ thì chờ xem thiên hạ đón nhận nó ra sao mà thôi.

Hi cả nhà, sau một ngày đăng đàn mình đã nhận được khá nhiều ý kiến đóng góp của mọi người, thật sự rất cảm ơn các bác đã bớt chút thời gian ghé thăm app của mình. Post này mình sẽ giải thích thêm về một số vấn đề mà các bác đã đặt câu hỏi như sau:

Vấn đề use case
Lấy ví dụ với số lượng giao dịch như trong ảnh mình đính kèm dưới đây, nó quá nhiều các bác ạ. Và với số lượng lớn như vậy sẽ đến lúc các bác cần nhân lực riêng chỉ để phục vụ cho việc đối chiếu giao dịch. Trong trường hợp của mình trước đây thì không chỉ 1, mà đến 3 người để làm việc này. Tuy nhiên sức người có hạn, nhân sự của các bác làm việc tối đa cũng chỉ 8-10 tiếng 1 ngày mà thôi, thêm nữa họ còn nghỉ cuối tuần, nghỉ lễ... còn khách hàng thì không, họ có thể thực hiện giao dịch bất cứ lúc nào họ cần, kể cả nửa đêm. Vậy trong trường hợp không có nhân lực đối chiếu giao dịch, khách hàng sẽ phải chờ đến giờ làm việc, cuối tuần hoặc nghỉ lễ thì phải chờ đến ngày làm việc tiếp theo => mất khách.
View attachment 374010

Thật sự mà nói thì mình làm app này không phải theo kiểu cọc đi tìm trâu, mà nhu cầu là hiện hữu, vì trong mô hình kinh doanh chính mà mình đang vận hành nó có những vấn đề phát sinh cần đến giải pháp này. Nghĩa là nhu cầu có rồi, mình chỉ là người cung cấp giải pháp mà thôi.

Vấn đề bảo mật
Mình sẽ giải thích thêm về việc bảo mật thông tin tài khoản của khách hàng bằng hình ảnh dưới đây.
View attachment 374011
Chú giải như sau:
  • Web service: là service sẽ tương tác trực tiếp với người dùng, như đăng ký hay quản lý subscription. Sau khi người dùng liên kết tài khoản, service này sẽ ngay lập tức mã hóa toàn bộ thông tin bằng RSA public key (4096 bits), sau đó gửi lên SQS-A (sử dụng mã hóa AES-256 bits). Web service chỉ có quyền PUB lên SQS-A mà không có quyền SUB để gọi ngược thông tin trên SQS-A về.
  • Crawler service: là service tương tác với phía ngân hàng, nó có quyền SUB vào SQS-A để nhận thông tin tài khoản web service gửi lên, và sử dụng RSA private key để giải mã thông tin đó (web service không có private key này). Sau khi truy xuất thông tin giao dịch nó sẽ gửi thông tin theo SQS-B, nơi nó có quyền PUB nhưng quyền SUB lại chỉ có ở web service mà thôi.
Bên cạnh đó mỗi service đều có một database riêng đã thiết lập chỉ được cấp quyền truy cập từ chính service mà nó phụ thuộc. Các services này hoàn toàn không có bất kỳ liên hệ nào với nhau, hay nói cách khác là không dựa vào nhau để vận hành. Chính vì vậy kể cả trong trường hợp xấu nhất, web service của mình có bị tấn công, thì cũng không thể mò được ra crawler service của mình ở đâu cả.
 
Last edited:
Vấn đề lớn nhất: Làm cách nào tin tưởng mà giao tài khoản ngân hàng cho site của bạn ?
Chính xác, đây là một trong những trở ngại mà mình đang gặp khó khăn để giải thích cho người dùng tin tưởng khi nhập tài khoản vào app của mình.

Về mặt kỹ thuật thì hiện tại app của mình hoạt động dựa trên microservice architecture, các service riêng biệt không trực tiếp liên hệ được với nhau mà mình dùng SQS để gửi message. Theo đó thì tài khoản ngân hàng của người dùng sau khi liên kết website sẽ gửi thông tin sang một database riêng bằng SQS (mã hóa khi truyền tải), và database đó thì không được cấp quyền truy cập ngoài, chỉ có crawler service truy cập được mà thôi.
 
Chính xác, đây là một trong những trở ngại mà mình đang gặp khó khăn để giải thích cho người dùng tin tưởng khi nhập tài khoản vào app của mình.

Về mặt kỹ thuật thì hiện tại app của mình hoạt động dựa trên microservice architecture, các service riêng biệt không trực tiếp liên hệ được với nhau mà mình dùng SQS để gửi message. Theo đó thì tài khoản ngân hàng của người dùng sau khi liên kết website sẽ gửi thông tin sang một database riêng bằng SQS (mã hóa khi truyền tải), và database đó thì không được cấp quyền truy cập ngoài, chỉ có crawler service truy cập được mà thôi.
Có gì đảm bảo cái crawler service này ko làm lộ thông tin của khách hàng vậy bác ?
 
Cách đây vài năm, lúc đó chưa có ngân hàng nào accept ví điện tử vào hệ thống của họ.
Lúc đó MoneyLover release 1 tính năng là người dùng nhập thông tin ngân hàng, và hàng tháng MoneyLover sẽ tự động thanh toán các hóa đơn tới hạn. Lúc đó cũng rất nhiều ý kiến rằng ko ai dám tin MoneyLover cả.
Bây giờ thì các ví điên tử momo/airpay đều có trong mục tích hợp các ngân hàng phổ biến cả. Lúc này sẽ cần thêm 1 bước là người dùng Accept ủy quyền cho ngân hàng.
Saas của bạn can thiệp trực tiếp vào tài khoản ngân hàng, khá là risk cho user. Lại còn on cloud nữa, thì càng risk hơn. Tuy hiện tại để thực hiện được giao dịch, bắt buộc phải có OTP, nhưng mà việc cấp user+pass cho saas này, thì đã làm giảm đi 1 vòng bảo mật tài khoản rồi.
Về business, thì mình cũng có nhu cầu là quản lý all in one, nhưng về technical, thì mình sẽ không tin, và không sử dụng.
// anw, đang có bug ở màn Thêm tài khoản, lỡ click chọn VCB, xong exit ra để chọn bank khác mà ko được
 
Về nguyên tắc trừ khi bạn làm cho ngân hàng , và bạn là quan to trong đó thì mới làm được cái App cỡ này . Bạn nghĩ sao nếu 1 vài thông tin giao dịch cỡ vài chục, vài trăm tỉ bị lộ ? Mấy ông lớn như Momo,Zalo còn chưa dám làm cái này đó bạn :v, không phải họ không làm được mà không dám .

Thay vì một cái web như thế này , hãy biến nó thành 1 sdk thì sẽ tốt hơn , nhà nào nhà đó tự quản. Nhưng như vậy sẽ éo có tiền
 
Last edited:
Ở Việt Nam làm sản phẩm CNTT mà ít dùng Facebook thì thành công sao được :rolleyes:
Hi, mình dùng Gapo 🐧. Đùa thôi mình chủ yếu chơi twitter, mà cũng không đăng status mấy, chủ yếu follow mấy lão developer để đọc thôi.

Có gì đảm bảo cái crawler service này ko làm lộ thông tin của khách hàng vậy bác ?
Hiện tại crawler service của mình hạn chế toàn bộ inbound traffic ngoại trừ SSH (dùng private key), nên nguy cơ bị lộ thông tin chỉ có cách là lấy được private key của mình mà thôi. Thêm vào đó thì database để lưu trữ tài khoản cũng đặt ở server khác chứ không ở crawler service bác ạ. Bác có góp ý thêm gì về vấn đề này để giúp mình cải thiện hơn được không?

Cách đây vài năm, lúc đó chưa có ngân hàng nào accept ví điện tử vào hệ thống của họ.
Lúc đó MoneyLover release 1 tính năng là người dùng nhập thông tin ngân hàng, và hàng tháng MoneyLover sẽ tự động thanh toán các hóa đơn tới hạn. Lúc đó cũng rất nhiều ý kiến rằng ko ai dám tin MoneyLover cả.
Bây giờ thì các ví điên tử momo/airpay đều có trong mục tích hợp các ngân hàng phổ biến cả. Lúc này sẽ cần thêm 1 bước là người dùng Accept ủy quyền cho ngân hàng.
Saas của bạn can thiệp trực tiếp vào tài khoản ngân hàng, khá là risk cho user. Lại còn on cloud nữa, thì càng risk hơn. Tuy hiện tại để thực hiện được giao dịch, bắt buộc phải có OTP, nhưng mà việc cấp user+pass cho saas này, thì đã làm giảm đi 1 vòng bảo mật tài khoản rồi.
Về business, thì mình cũng có nhu cầu là quản lý all in one, nhưng về technical, thì mình sẽ không tin, và không sử dụng.
// anw, đang có bug ở màn Thêm tài khoản, lỡ click chọn VCB, xong exit ra để chọn bank khác mà ko được
Cảm ơn bác đã góp ý, mình cũng công nhận vậy, tuy nhiên để đạt được mục đích mà mình muốn đôi khi cũng phải risky một chút thôi, với lại OTP mới là cánh cửa chắc chắn nhất để bảo vệ tài khoản của mình mà. Vì như trường hợp của công ty mình đang làm thì sau khi triển khai module crawler, mình giảm tải được hẳn 2 bạn kế toán chỉ ngồi check giao dịch, rất nhàm chán mà đôi khi lại còn nhầm lẫn nữa.

// Ở phần thêm tài khoản nếu muốn quay trở lại step trước thì bác nhấn vào cái step bar ấy là được.

Xin api của bank, chứ log bằng acc bank thì có bữa mất tiền công an nó hốt
Hi, công nhận là lúc đầu mình cũng nghĩ đến trường hợp này, nhưng đã làm thì đừng sợ, mà sợ thì đừng làm, với lại công an họ muốn hốt cũng phải chứng minh là mình lấy tiền chứ khơi khơi bế mình đi sao được. Cùng lắm là tạm giam chờ điều tra thôi 🐧.

Thật là vui khi thấy có đồng dâm sử dụng Laravel. Chắc chỉ ở presentation-layer thôi nhỉ?
Éc, check sao biết mình dùng Laravel hay vậy!
 
Về nguyên tắc trừ khi bạn làm cho ngân hàng , và bạn là quan to trong đó thì mới làm được cái App cỡ này . Bạn nghĩ sao nếu 1 vài thông tin giao dịch cỡ vài chục, vài trăm tỉ bị lộ ? Mấy ông lớn như Momo,Zalo còn chưa dám làm cái này đó bạn :v, không phải họ không làm được mà không dám .

Thay vì một cái web như thế này , hãy biến nó thành 1 sdk thì sẽ tốt hơn , nhà nào nhà đó tự quản. Nhưng như vậy sẽ éo có tiền
Thật ra thì mình chỉ hướng đến các khách hàng là đơn vị kinh doanh nhỏ lẻ ít vốn thôi, chứ trên blog mình có khuyến khích khi lớn mạnh thì nên dùng cổng thanh toán riêng (Ngân lượng, VNPAY...) mà.
 
Thứ nhất: thông tin người dùng. Bác cần xin được chứng chỉ về bảo mật thông tin người dùng. Cần làm rõ (cả về điều khoản và giấy tờ) với người dùng rằng bác không sử dụng thông tin của họ vào bất cứ mục đích gì khác. Cách thức bảo mật của bác khá "ngây thơ".

Thứ hai: việc liên kết với các ngân hàng cần có xác nhận từ cả hai bên. Nếu bác chỉ liên kết một bên thì sẽ bị (nhẹ nhất) là NHNN sờ gáy. Cái này bác cần tham khảo với bên luật để họ hỗ trợ.

Thứ ba: như bác trên có nói về câu chuyện của LoverMoney. Bác nên tham khảo câu chuyện đó để rút ra các bài học.
Theo em bác nên lên Lauch hỏi trước về các giấy phép, chứng chỉ ... cần có trước để hiểu được vấn đề. Làm Fintech nó không đơn giản chỉ là vấn đề kỹ thuật đâu bác ạ :)
Chúc bác thành công.

P/s: bác có biết các bên ví chiết khấu, hỗ trợ, sẵn sàng đốt tiền cho các cửa hàng nhỏ lẻ khá tốt không bác :D

via theNEXTvoz for iPhone
 
Thứ nhất: thông tin người dùng. Bác cần xin được chứng chỉ về bảo mật thông tin người dùng. Cần làm rõ (cả về điều khoản và giấy tờ) với người dùng rằng bác không sử dụng thông tin của họ vào bất cứ mục đích gì khác. Cách thức bảo mật của bác khá "ngây thơ".

Thứ hai: việc liên kết với các ngân hàng cần có xác nhận từ cả hai bên. Nếu bác chỉ liên kết một bên thì sẽ bị (nhẹ nhất) là NHNN sờ gáy. Cái này bác cần tham khảo với bên luật để họ hỗ trợ.

Thứ ba: như bác trên có nói về câu chuyện của LoverMoney. Bác nên tham khảo câu chuyện đó để rút ra các bài học.
Theo em bác nên lên Lauch hỏi trước về các giấy phép, chứng chỉ ... cần có trước để hiểu được vấn đề. Làm Fintech nó không đơn giản chỉ là vấn đề kỹ thuật đâu bác ạ :)
Chúc bác thành công.

P/s: bác có biết các bên ví chiết khấu, hỗ trợ, sẵn sàng đốt tiền cho các cửa hàng nhỏ lẻ khá tốt không bác :D

via theNEXTvoz for iPhone
Cám ơn bác đã góp ý, trong plan của mình cũng có tính đến việc tham vấn với bên luật trong thời gian tới bác ạ. Hiện tại mình vẫn đang trong giai đoạn lắng nghe và tiếp nhận thêm ý kiến để củng cố cho dự án này, và MoneyLover là đơn vị khiến cho mình quyết tâm theo đuổi ý tưởng đấy bác.

// Nếu bác có thêm ý kiến để cải thiện tính bảo mật cho app mình xin được tiếp thu, đa tạ bác nhiều!

// Edit tí phần ps: Hiện tại thì mình không có ý định cạnh tranh với ví điện tử hay cổng thanh toán bác ơi, chỉ là tận dụng một phương thức giao dịch mà hiện vẫn còn nhiều người đang sử dụng thôi.

hỏi ngu chút: app bé tí này mà cũng phải dùng microservice à?

p/s: đăng ký 2 lần dùng cùng 1 sđt -> 500
Hi bác, mình dùng microservice đơn giản vì mình muốn tách biệt ra cho dễ quản lý thôi, chứ thật ra thì cũng chưa hẳn là cần thiết như bác nói.

// Cảm ơn bác đã góp ý, về lỗi 500 khi đăng ký trùng số điện thoại mình đã fix xong, chút nữa commit lên là hết bác ạ!
 
Hi bác, mình dùng microservice đơn giản vì mình muốn tách biệt ra cho dễ quản lý thôi, chứ thật ra thì cũng chưa hẳn là cần thiết như bác nói.

// Cảm ơn bác đã góp ý, về lỗi 500 khi đăng ký trùng số điện thoại mình đã fix xong, chút nữa commit lên là hết bác ạ!
Message passing architecture một process vẫn làm được -> không cần microservice -> đỡ tốn tiền SQS.

Số lượng use case quá ít -> không cần microservice. Thích chia domain, functions... một process cũng làm được.
 
Message passing architecture một process vẫn làm được -> không cần microservice -> đỡ tốn tiền SQS.

Số lượng use case quá ít -> không cần microservice. Thích chia domain, functions... một process cũng làm được.
Cảm ơn bác, mình sẽ lưu ý đến vấn đề này!
 
  • Tần suất quét mỗi 30 phút

vậy trường hợp xấu nhất là sau 30 phút mới biết được biến động số dư hả thớt, có quá chậm không

và cái lo ngại nhất là giao quyền truy cập tài khoản cho bên thứ 3
 
Back
Top