Tìm hiểu về cổng thanh toán GMO

Giới thiệu

GMO là một cổng dịch vụ thanh toán số 1 của Nhật, Nó hỗ trợ nhiều hình thức thanh toán (credit card, multipayment như pay-easy convenience-store ...). Nó cung cấp đầy đủ các phương thức thanh toán chính của Nhật (theo như trên doc của nó 😄) Và cái quan trọng nhất là nó cung cấp hỗ trợ cho các lập trình viên các API và môi trường test để tích hợp vào ứng dụng. Lúc mới bắt đầu thì bạn sẽ rất khó để biết cách làm việc với nó như thế nào, vì cũng khá ít bài viết về cổng thanh toán này, và tài liệu với môi trường test của nó hầu như là tiếng Nhật. Dưới đây mình sẽ hướng dẫn cho các bạn các bước bắt đầu với nó, và hi vọng sẽ giúp được cho người lần đầu làm việc với nó sẽ dễ dàng hơn.

Cơ chế làm việc

Đây là luồng chạy cơ bản của một payment Gateway.

  • EndUser gửi yêu cầu mua 1 service đến web của merchant -> web merchant gửi yêu cầu đến PaymentGMO thông qua API của GMO
  • PaymentGMO gởi yêu cầu xác nhận thông tin giao dịch đến ngân hàng
  • Ngân hàng xác nhận thông tin giao dịch, nếu hợp lệ -> tiến hành chuyển tiền đến tài khoản merchant và trả thông tin về cho PaymentGMO
  • PaymentGMO trả kết quả về cho web Merchant
  • web merchant trả kết quả về cho endUser

Một số thuật ngữ

  1. Merchant: Là cá nhân hoặc công ty bán sản phẩm hoặc dịch vụ, là nơi cung cấp các dịch vụ đến người dùng, ở đây là web của chúng ta.
  2. Credit Card - Thẻ tín dụng được sử dụng để mua sản phẩm hoặc dịch vụ thông qua tài khoản tín dụng. Thẻ này có số thẻ gồm 16 số.
  3. Pay-Easy: là hình thức đăng kí mua sản phẩm rồi tiến hành trả tiền qua các ATM, Internet Banking, ...
  4. convenience-store: là hình thức đăng kí mua sản phẩm rồi tiến hành trả tiền qua các Convenience Store
  5. Transaction - Giao dịch: là thực hiện 1 là thanh toán, kết thúc quá trình nếu thành công thì merchant nhận được tiền, endUser nhận được service
  6. Site: là một trang quản lý các shop và member
  7. Shop là nơi quản lý các transaction
  8. OrderID: là giá trị để merchant nhận biết về giao dịch, là duy nhất
  9. ShopID, ShopPass, SiteID, SitePass là các giá trị do GMO cung cấp khi đăng kí.
  10. AccessID, AccessPass là các giá trị được GMO trả về khi thực hiện 1 entry Transaction.
  11. còn nhiều khái niệm mà khi thực hiện implement GMO thì bạn sẽ phải tìm hiểu.

Đăng kí môi trường test

Đây là các step mà nó bảo mình làm theo: Nhưng để bắt đầu làm việc với GMO api, thì bạn chỉ cần phải đăng kí một tài khoản test trên website của gmo rồi tìm hiểu qua các thuật ngữ của nó.

  • bạn vào đây để tạo một tài khoản test: https://service.gmo-pg.com/cyllene/entry/trialStart.htm sau khi điền đủ các thông tin nó sẽ gởi cho bạn 1 email confirm, sau khi confirm bạn sẽ có 1 tài khoản như thế này: Trong đó có 2 link site và shop, và các id và password tương ứng, mình sẽ nói cách sử dụng sau. bây giờ các bạn vào xem nó có gì. Đây là 1 trang bằng tiếng nhật nên bạn translate và vọc vào để biết. Các bạn có thể tạo bằng tay các Transaction, xem các params và status của nó như thế nào. Ở đây mình tạo 1 Transaction với phương thức thanh toán là pay-easy sau khi điền đủ các thông tin hợp lệ, chúng ta search sẽ thấy 1 transaction được tạo ra với status là requestsuccess

Sử dụng API của Payment Gateway GMO

Với mỗi phương thức thanh toán khác nhau, GMO sẽ cung cấp cho chúng ta các API khác nhau, và các params chúng ta truyền lên cho GMO cũng khác nhau. Mình sẽ sử dụng post man để call API GMO với phương thức thanh toán là pay-easy Bạn sẽ điền đầy đủ các params như trên, với OrderId là do bạn tự định nghĩa và nó phải là duy nhất, amount là số tiền mà enduser phải trả cho order đó. sau khi thực hiện entry transaction thành công, GMO sẽ trả cho bạn 1 AccessID và AccessPass để tiếp tục thực hiện một execTransaction. sau khi thực hiện một execTransaction thành công thì chúc ta sẽ nhận được kết quả như trên, chúng ta kiểm tra kết quả trên trang site: và chúng ta show cho enduser các thông tin về các custumerID, duedate ... để người dùng đi thanh toán. Sau khi người dung thanh toán order đó thì status của sẽ được cập nhật lại PAYSUCCESS, và GMO sẽ notification đến một link mà chúng ta settings trước đó. Trên trang shop có một chức năng demo người dùng thanh toán thành công và khi đó các params mà GMO sẽ trả về kiểu như sau:

"ShopID"=>"tshop00028975",
 "ShopPass"=>"**********",
 "AccessID"=>"9079e874562cf086d8925fe93c9f2de6",
 "AccessPass"=>"********************************",
 "OrderID"=>"107",
 "Status"=>"PAYSUCCESS",
 "JobCd"=>"",
 "Amount"=>"200",
 "Tax"=>"0",
 "Currency"=>"JPN",
 "Forward"=>"",
 "Method"=>"",
 "PayTimes"=>"",
 "TranID"=>"17080900000003174295",
 "Approve"=>"",
 "TranDate"=>"20170809110540",
 "ErrCode"=>"",
 "ErrInfo"=>"",
 "PayType"=>"4",
 "CvsCode"=>"",
 "CvsConfNo"=>"",
 "CvsReceiptNo"=>"",
 "EdyReceiptNo"=>"",
 "EdyOrderNo"=>"",
 "SuicaReceiptNo"=>"",
 "SuicaOrderNo"=>"",
 "CustID"=>"WNT44277314",
 "BkCode"=>"58021",
 "ConfNo"=>"3769",
 "PaymentTerm"=>"20170819235959",
 "EncryptReceiptNo"=>"LB7OigJvPDmbWxAqB8OY",
 "FinishDate"=>"20170809110540",
 "ReceiptDate"=>"20170809110400","ShopID"=>"tshop00028975",
 "ShopPass"=>"**********",
 "AccessID"=>"9079e874562cf086d8925fe93c9f2de6",
 "AccessPass"=>"********************************",
 "OrderID"=>"107",
 "Status"=>"PAYSUCCESS",
 "JobCd"=>"",
 "Amount"=>"200",
 "Tax"=>"0",
 "Currency"=>"JPN",
 "Forward"=>"",
 "Method"=>"",
 "PayTimes"=>"",
 "TranID"=>"17080900000003174295",
 "Approve"=>"",
 "TranDate"=>"20170809110540",
 "ErrCode"=>"",
 "ErrInfo"=>"",
 "PayType"=>"4",
 "CvsCode"=>"",
 "CvsConfNo"=>"",
 "CvsReceiptNo"=>"",
 "EdyReceiptNo"=>"",
 "EdyOrderNo"=>"",
 "SuicaReceiptNo"=>"",
 "SuicaOrderNo"=>"",
 "CustID"=>"WNT44277314",
 "BkCode"=>"58021",
 "ConfNo"=>"3769",
 "PaymentTerm"=>"20170819235959",
 "EncryptReceiptNo"=>"LB7OigJvPDmbWxAqB8OY",
 "FinishDate"=>"20170809110540",
 "ReceiptDate"=>"20170809110400",
 ..............

Chúng ta sẽ quan tâm đến OrderID và Status để cập nhật lại database của chúng ta sao cho tương ứng. Có một số chức năng trên môi trường test của GMO không có, ví dụ như tự động cập nhật status khi hết hạn, hay với chức năng Reccuring Payment. nên sẽ hơi khó cho chúng ta test các chức năng đó.

Nếu bạn làm việc với project Ruby On Rails thì mình giới thiệu cho bạn 1 gem hỗ trợ cho chúng ta implement các chức năng payment nhanh hơn, https://github.com/t-k/gmo-payment-ruby