Paypal – Kỷ niệm đau thương


Vừa kết thúc được 1 dự án khá là gai góc và khốc liệt và trên con đường của dự án đó, tôi đã được trải nghiệm với một chức năng nghĩ rằng sẽ thú vị: Tích hợp hệ thống trả tiền của Paypal vào ứng dụng. Và sau đây chia sẻ của tôi về quãng thời gian ngắn mà đầy trải nghiệm với hệ thống thanh toán của Paypal

Ngày đầu tiếp nhận source code

Ứng dụng này theo lời ông KH thì đã được phát triển khoảng 50% bởi 1 thằng developer khác và ổng muốn team của tôi phát triển hoàn thiện sau khi thằng developer đó bỏ đi. Theo phán đoán của 1 người đã từng lập trình, tôi đã ngay lập tức nghĩ trong đầu về 1 mớ hỗn độn và thằng dev kia đã bỏ của chạy lấy người. Và đúng như vậy, source code tôi nhận được đang trong 1 trạng thái dang dở và chỉ có khoảng 30% chức năng đã được hoàn thành. Sóng gió đang chờ đợi phía trước…

Hệ thống thanh toán, Paypal và Stripe

Trên website này, người dùng sẽ phải trả mỗi tháng 1 số tiền để tiếp tục duy trì là thành viên. Có nhiều mức giá khác nhau và được miễn phí 1 tháng đầu tiên. Theo yêu cầu của KH thì người dùng phải vừa sử dụng được tài khoản Paypal của họ để trả tiền, vừa có thể thanh toán bằng thẻ tín dụng. Có lẽ thằng dev cũ cũng chưa nghĩ ra cách tối ưu nào để làm nên nó đã sử dụng tới 2 dịch vụ khác nhau để làm chuyện này: Paypal để cho user nào muốn dùng Paypal và Stripe cho những user nào muốn dùng thẻ.

Tại sao Stripe? Vấn đề liên quan tới PCI

Giới thiệu cho các bạn sơ qua về Stripe. Đây là 1 cổng dịch vụ thanh toán tương tự như Paypal nhưng hỗ trợ lập trình viên rất nhiều và rất dễ sử dụng. Mình đặc biệt yêu thích API của Stripe, cực kỳ rõ ràng và thuận tiện khi tích hợp vào ứng dụng. Tài liệu hỗ trợ ngắn gọn, súc tích và đầy đủ.

Bạn có biết tại sao thằng dev cũ lại sử dụng Stripe cho user thanh toán bằng thẻ mà không dùng Paypal (trong khi Paypal cũng có thể cho phép bạn thanh toán bằng thẻ). Vấn đề nằm ở 3 chữ cái: PCI –  một chuẩn của hiệp hội thẻ. Nó có yêu cầu đơn giản là những website nào mà có xử lý hoặc lưu trữ thông tin thẻ tín dụng của người dùng thì phải tuân theo những tiêu chuẩn mà nó đặt ra. Nếu không theo các tiêu chuẩn này, website có thể bị phạt vài ngàn đến vài trăm ngàn đô la. Tuy nhiên, để có được chứng nhận PCI Compliant thì website phải trả 1 khoản phí hàng tháng là khoảng 15-20 đô la (tùy theo loại website). Ông khách hàng của mình thì lại ko muốn điều này nên ổng yêu cầu không xử lý hoặc lưu trữ thông tin thẻ trên server. Stripe giải quyết điều này 1 cách rất là nhanh gọn. Nó cung cấp cho mình 1 file API js để gọi đến 1 dịch vụ mã hóa bên Stripe. Khi người dùng nhập thông tin thẻ tín dụng, các thông tin này sẽ được gửi qua AJAX trực tiếp đến server của Stripe. Và stripe sẽ gửi trả về cho mình 1 token đại diện cho cái thẻ tín dụng đó. Việc này đảm bảo rằng thông tin thẻ sẽ không bao giờ được gửi đến server của mình.

Khách hàng là thượng đến

Hệ thống trên có vẻ ổn nhỉ? Không, chúng ta (những lập trình viên) hầu như không có quyền tự quyết. KH muốn rằng chỉ sử dụng duy nhất Paypal mà thôi, không sờ trai sờ triết gì hết… Mà khi KH đã nói vậy (và hợp lý :D) thì chúng ta buộc phải thực hiện mà thôi. Làm thế nào để người dùng dùng thẻ tín dụng để trả tiền hàng tháng nhỉ? Quá trình nghiên cứu bắt đầu.

Recurring Payment: Vấn đề nan giải

Paypal có 2 cơ chế thanh toán, 1 cái là Instant Payment, người dùng trả ngay lập tức 1 số tiền để mua 1 sản phẩm hoặc dịch vụ nào đó, và Recurring Payment: phải trả tiền theo chu kỳ. Với Instant Payment, Paypal đã làm rất tốt khi tích hợp sẵn 1 tùy chọn cho phép người dùng thanh toán bằng thẻ ngay trên 1 trang web của Paypal.

Recurring Payment lại không được như vậy. Dù đã cấu hình mọi option và theo nhiều hướng dẫn khác nhau, tùy chọn duy nhất mà user có thêm được là tạo account Paypal theo số thẻ. Nghĩa là thằng user đó không thể chỉ dùng thẻ tín dụng mà nó bắt buộc phải tạo 1 tài khoản Paypal đi kèm với nó. WTF, nếu vậy thì bó tay rồi sao? Chẳng lẽ Paypal lại cùi mía vậy sao? Có thể là do mình chưa tìm hiểu rõ mà thôi

Paypal Support và Enhanced Recurring Payment

Việc đầu tiên tôi làm là nhờ sự trợ giúp của Paypal. Điều khá hay là Paypal cung cấp những số điện thoại hỗ trợ miễn phí mà tôi có thể gọi bất cứ lúc nào thông qua Skype. Điều phiền phức duy nhất và làm tôi cực kỳ bực bội là tôi bắt buộc phải trải qua bước trả lời với hệ thống tổng đài tự động của Paypal mỗi lần gọi điện nhờ hỗ trợ. Lúc nào tôi cũng được hỏi: Số đt bạn dùng trên paypal là gì, Bạn có dùng Paypal bao giờ chưa? Bạn muốn làm gì? Vượt qua những bước này, bạn còn phải đến giai đoạn chờ đợi dài cổ cho đến khi may mắn có 1 line nào đó của Paypal trống để bạn chen vào. Tôi đã từng phải chờ đến 15 phút chỉ để nhờ Paypal support kiểm tra tài khoản. Too bad!

Nhưng không sao, cuối cùng tôi cũng đã được gặp 1 người bên Paypal để support. Câu hỏi của tôi đơn giản: tôi đang tích hợp Paypal vào website, người dùng họ không thấy tùy chọn thanh toán bằng thẻ khi thực hiện Recurring Payment, vậy tôi có cách nào để có option này không?

Tôi cũng nhận ra 1 điều là dường như Paypal có hàng tá câu trả lời yes cho những điều mà bạn đang tìm kiếm, cho dù bạn đang muốn tìm giải pháp gì. Câu trả lời tôi nhận được là: Hãy bật dịch vụ Enhanced Recurring Payment (ERP) của chúng tôi, bạn sẽ có ngay option cho phép người dùng thanh toán bằng thẻ credit card. Wow, cuộc sống đơn giản quá, chỉ bật on 1 dịch vụ là giải quyết xong cả vấn đề.

Life IS NOT Simple

Tôi đã thử hàng chục lần để bật dịch vụ ERP của Paypal trong tài khoản Sandbox của tôi nhưng vô vọng. Lần này tôi gửi 1 issue ticket lên trên hệ thống trợ giúp của Paypal với hy vọng sẽ nhanh chóng nhận được câu trả lời. Nhưng Paypal lại làm tôi thất vọng khi gần 2 ngày mới có câu trả lời. Và họ nói rằng họ đã giúp tôi bật dịch vụ ERP trong tài khoản Sandbox. Hê, dù chờ lâu mà tính ra cũng có kết quả.

Nhưng than ôi, mặc dù được nói là đã bật ERP mà tôi chẳng nhận thấy 1 chút khác biệt nào trong hệ thống thanh toán của mình, người dùng vẫn chỉ có 1 cách duy nhất là tạo account dính liền với Paypal mà thôi… Grrr, chuyện gì vậy nhỉ? Nghĩ rằng chắc là lỗi của mình, tôi lại lao vào con đường tìm kiếm trên Internet.. Nhưng kết quả vẫn không có gì biến chuyển.

Lại phải gọi Paypal, và lại phải trải qua bước trả lời tự động nhàm chán, tôi cũng đã gặp được 1 anh có vẻ hiểu về công nghệ. Sau khi nghe mô tả tình hình, a này phán 1 câu: tài khoản Sandbox không có tác dụng khi bật ERP, nó chỉ có tác dụng trên tài khoản thật mà thôi. Quát đờ hợi, tại sao giờ này mi mới nói với ta hả…. Cố giằng lòng mà nói tiếng cảm ơn rồi quay trở lại với hệ thống. Lúc này đành phải thông báo cho ông KH để ổng đăng ký bật dịch vụ ERP trên tài khoản Paypal thật của ổng. Lại mất thêm thời gian chờ đợi Paypal nó kiểm tra và kích hoạt trong khi ngày release sắp gần kề.

Bing bong, một buổi sáng đẹp trời, tôi cũng đã nhận được email được forward từ KH nói rằng Paypal đã bật thành công dịch vụ ERP trên tài khoản Paypal. Tốt, thế này thì hôm nay mình sẽ hoàn thành chức năng Payment mà thôi <– tôi đang suy nghĩ như vậy lúc đó.

Tôi đã lạc đường

Không một sự thay đổi nhỏ. Vẫn là những tùy chọn cũ, nhưng màn hình cũ… Mặc dù đã dùng tài khoản Paypal thật được bật dịch vụ ERP, tôi vẫn không thể nào làm cho nó xuất hiện tùy chọn thanh toán bằng thẻ tín dụng. Giờ biết làm sao đây? Tốn rất nhiều thời gian, đã được tư vấn giúp đỡ mà vẫn không thấy tùy chọn đó, vậy sai lầm là ở đâu? Lại gọi điện cho Paypal, nhưng không tìm thấy được câu trả lời vì gặp toàn người không biết để mà hỗ trợ hoặc biết mà cũng chỉ nói được vài cái mình đã biết…. Cuối cùng, tôi đã phải ra quyết định: chấp nhận để form nhập thông tin thẻ ngay trên website, lấy thông tin thẻ của người dùng đưa lên server và  sau đó gọi API sang Paypal. Điều này cũng có nghĩa rằng KH phải trả phí PCI hàng tháng. Ngay trong 1 buổi sáng, mình đã làm xong chức năng thanh toán bằng thẻ.

Nhớ lại đi, khách hàng vẫn là thượng đế

Chả hiểu trời xui đất khiến như thế nào mà vào một ngày đẹp trời tiếp theo, khách hàng gửi tin nhắn hỏi mình: Làm sao người dùng thanh toán bằng credit card được? Ai da, mình nhớ rõ ràng là đã discuss với ông ta về vấn đề PCI và cách mình làm rồi mà ta… Nhưng không! Khách hàng kiên quyết không chấp nhận cách mình đã làm và ép buộc mình phải sử dụng dịch vụ nào đó của Paypal để người dùng sử dụng. Tất nhiên lý lẽ của KH đưa ra là hợp lý vì người dùng khó lòng chấp nhận điền thông tin thẻ trên 1 trang web không có tên tuổi vì biết đâu nó lấy thông tin thẻ của mình rồi phát tán đi đâu. Sau một hồi chờ đợi KH liên hệ với Paypal, ông ta quăng cho tôi 1 cái link và nói rằng bên Paypal nói hãy dùng cách tích hợp này nè… Mở cái link đó ra, tôi hơi hoảng hốt khi thấy trong đó có khoảng gần 10 link download các tài liệu của Paypal nói về việc tích hợp Paypal với các website. Mỗi tài liệu có độ dài khoảng 30 trang…

Chưa dừng lại ở đó, khách hàng còn tiện thể gửi thêm 1 email đến cho sếp tôi và nói rằng hãy tìm developer khác với lý do tôi không đủ kinh nghiệm. Sau đó là một cuộc trao đổi dài với sếp cũng như những người bạn khác nhằm tìm ra giải pháp thực sự cho vấn đề. Vâng, thêm 1 dev nữa cùng tôi lao vào cùng nghiên cứu trong 1 ngày trời, và kết quả vẫn là con số không.

Ngay lúc bấn loạn nhất, có lẽ chỉ sự bình tĩnh và tập trung cao độ mới có thể giải quyết được vấn đề. Tôi suy nghĩ lại lý do chính mà KH không muốn dùng PCI: phí trả hàng tháng quá cao. Chả hiểu nhờ sự tư vấn “tận tâm” thế nào mà tên chuyên viên tư vấn lại gợi ý cho KH của tôi sử dụng gói phí cao nhất mà dịch vụ nó cung cấp, khoảng $140/tháng. Ông KH cũng không hiểu vấn đề, cứ nghĩ đó là phí trả cho PCI trong khi thực tế chỉ mất $14/tháng cho PCI. Mình bèn đóng vai khách hàng nói chuyện với 1 nhân viên tư vấn của dịch vụ đó và ghi lại đoạn chatlog nhằm làm bằng chứng cho thấy phí phải trả là $14/tháng.

KẾT THÚC?

Tôi forward đoạn chat log cho KH cùng với giải thích về chi phí hàng tháng thực sự mà KH phải trả. Ấy vậy mà KH vẫn không tin, và ông ta nghĩ rằng có thể người tư vấn mà tôi nói chuyện không có đủ sự hiểu biết và kinh nghiệm như thằng tư vấn trước đó đã nói chuyện với ổng. Thế là ông ấy bèn forward đoạn chatlog của tôi cho người tư vấn mà ông ta đã gặp kèm theo câu hỏi xác nhận. Đồng thời lúc đó, sếp của tôi cũng đã có một số tin nhắn nhằm giải thích cho ông KH khó tính hiểu rõ được bản chất của vấn đề. Sau đó một lúc, tôi đã nhận được tin nhắn về việc Khách hàng đồng ý sử dụng cách làm như hiện tại. Đến lúc này, tôi mới có thể thở phào nhẹ nhõm. Cuộc chiến đã kết thúc…

VÀ KẾT LUẬN:

Chưa từng có kinh nghiệm xử lý với những trường hợp như thế này trước đây, tôi đã tích lũy thêm một số kiến thức và kinh nghiệm cho bản thân. Và sau đây là một số điều tôi đã rút ra được:

+ Không phải mọi thứ KH nói là đúng, hãy kiểm tra lại
+ Đừng quá tin tưởng vào sự tư vấn của những công ty lớn, hãy tự mình kiểm tra và tìm hiểu. Công ty càng lớn (và càng già như Paypal) thì dịch vụ hỗ trợ KH càng chậm
+ Không thể chỉ dùng các kiến thức kỹ thuật mà giải thích cho KH, đôi khi họ nói OK trong khi họ không thực sự hiểu điều bạn đang nói
+ Hãy bình tĩnh trong lúc gặp khó khăn…
+ Lưu lại mọi đoạn chatlog hoặc nói chuyện để làm bằng chứng. Đôi khi đó là cách duy nhất để phản bác lại lập luận của KH.

Have a nice day!

Tác giả: xuanchien

Tran Xuan Chien. Japan Advanced Institute of Science and Technology - Japan. Senior Developer - NUS Technology.

6 thoughts on “Paypal – Kỷ niệm đau thương”

  1. Paypal ma phuc tap the sao @Chien. Noi chung con nhieu paygate khac nua. Tuy theo ong KH cau o VN hay o US hay country khac ma thoi. O us thi tuyet cu meo roi. con o VN thi pp khong ho tro lam dau. (PP hay la ban co the nhan payment – sau 24h refunded do fraud check..). hoac ca thang no moi refund. noi chung thang pp kho chiu.

  2. Có đau thương thật nhưng mặt tích cực của nó là bác học được không chỉ một bài học ý nghĩa còn gì nữa.😀

    Cám ơn bác vì những tút C# khá dễ hiểu, em đang học C# để lt game.🙂

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s