Jetpay Payment For Merchant (2)

Transcription

TÀI LIỆU ĐẶC TẢ KỸ THUẬTTÍCH HỢP CỔNG THANH TOÁN JETPAYPhiên bản1.0Mô tảPhát hành tài liệuHà Nội, 03/2022Thời gian05/08/2021

Mục lụcI. Tổng quan.4II. Quy trình tích hợp.4III. Luồng nghiệp vụ.51. Thanh toán bằng Thẻ nội địa.52. Thanh toán bằng Thẻ quốc tế.53. Thanh toán bằng Mã QR.64. Thanh toán bằng Ví điện tử MoMo.65. Thanh toán bằng tài khoản Viettel Money.66. Thanh toán bằng Ví điện tử ZaloPay.77. Thanh toán qua Chuyển khoản ngân hàng.7IV. Luồng kỹ thuật đáp ứng các luồng nghiệp vụ.71. Danh sách các luồng ký thuật và các các api chi tiết.72. Các luồng kỹ thuật đáp ứng các luồng nghiệp vụ.92.1. Luồng thanh toán thẻ (Thẻ nội địa, thẻ quốc tế).92.2. Luồng thanh toán bằng Mã QR, ví điện tử, mobile money (Mã QR, Ví điện tử MoMo, Ví điện tử Zalo,Viettel Money).102.3. Luồng thanh toán bằng hình thức Chuyển khoản.11V. Thông tin cấu hình.12Thông tin cấu hình.12VI. Đặc tả chi tiết.121. Lấy token để kết nối hệ thống JETPAY.122. Khởi tạo giao dịch (Luồng thanh toán thẻ).143. Chuyển trang thanh toán (Luồng thanh toán thẻ).214. Nhận kết quả giao dịch (Luồng thanh toán thẻ).225. Khởi tạo giao dịch (Luồng thanh toán QRCode, ví điện tử, mobile money).236. Nhận kết quả giao dịch (Luồng thanh toán QRCode, ví điện tử, mobile money).297. Khởi tạo giao dịch (Luồng thanh toán Chuyển khoản).338. Nhận kết quả giao dịch (Luồng thanh toán Chuyển khoản).36VII. Lưu ý khi sử dụng webview nhúng Cổng thanh toán JETPAY trên app Mobile.391. Android.40

2. IOS.40VIII. Thông tin liên hệ.40

I. Tổng quanTài liệu cung cấp cho đơn vị chấp nhận thanh toán (ĐVCNTT)/đối tác một cái nhìn từ tổng quanđến chi tiết các luồng, api tích hợp Cổng thanh toán JETPAY PAYMENT. JETPAY cung cấpmột giải pháp toàn diện giúp ĐVCNTT đơn giản hóa việc nhận thanh toán, mang lại cho kháchhàng một trải nghiệm mua sắm liền mạch.Cổng thanh toán JETPAY PAYMENT hỗ trợ đa dạng các hình thức thanh toán cho người mua:- Thẻ nội địa: Thanh toán bằng thẻ của 40 ngân hàng.- Thẻ quốc tế: Thanh toán bằng thẻ VISA, MasterCard, JCB.- Mã QR: Thanh toán bằng Mobile Banking của 30 ngân hàng và 9 ví điện tử.- Ví điện tử MoMo: Thanh toán bằng ví điện tử MoMo.- Viettel Money: Thanh toán bằng tài khoản Viettel Money.- Ví điện tử ZaloPay: Thanh toán bằng ví điện tử ZaloPay.- Chuyển khoản: Thanh toán qua chuyển khoản ngân hàng.II. Quy trình tích hợpB1: ĐVCNTT thực hiện KYC và ký hợp đồng sử dụng dịch vụ cổng thanh toán của JETPAY.B2: JETPAY gửi tài liệu kỹ thuật, mẫu code và các thông tin cấu hình kết nối trên môi trườngTEST.B3: ĐVCNTT thực hiện tích hợp, kết nối theo tài liệu, code mẫu.B4: JETPAY và ĐVCNTT phối hợp test và nghiệm thu.B6: JETPAY cung cấp thông tin cấu hình và thực hiện cấu hình trên môi trường PRODUCTIONđể ĐVCNTT cấu hình.B7: Golive dịch vụ.III. Luồng nghiệp vụ1. Thanh toán bằng Thẻ nội địa

2. Thanh toán bằng Thẻ quốc tế3. Thanh toán bằng Mã QR

4. Thanh toán bằng Ví điện tử MoMoCó thể thanh toán qua hai hình thức:- AppToApp: Chuyển từ app, web của Merchant sang ví điện tử MoMo- QRCode: Sử dụng ví điện tử MoMo để quét mã QR5. Thanh toán bằng tài khoản Viettel MoneyCó thể thanh toán qua hai hình thức:- AppToApp: Chuyển từ app, web của Merchant sang app Viettel Money- QRCode: Sử dụng app Viettel Money để quét mã QR6. Thanh toán bằng Ví điện tử ZaloPayCó thể thanh toán qua hai hình thức:- AppToApp: Chuyển từ app, web của Merchant sang ví điện tử ZaloPay

- QRCode: Sử dụng ví điện tử ZaloPay để quét mã QR7. Thanh toán qua Chuyển khoản ngân hàngCó thể thanh toán qua hai hình thức:- Chuyển khoản: Nhập số tài khoản, số tiền để thực hiện chuyển khoản- QRCode: Sử dụng Mobile Banking của 34 ngân hàng để quét mã QR để chuyển khoảnIV. Luồng kỹ thuật đáp ứng các luồng nghiệp vụ1. Danh sách các luồng ký thuật và các các api chi tiếtSTT Luồng kỹ thuật12Tên API/HàmDường dẫnLuồng thanh toán Lấy token để kết nối hệ thốngthẻJETPAY (Dùng chung cho các luồng)Domain Authen/connect/token(Thẻ nội địa, quốc tế)Domain Payment/transactionsKhởi tạo giao dịch(VI.1)(VI.2)3Chuyển trang thanh toán (RedirectRediecturl()theo url trả về ở bước khởi tạo giao dịch)(VI.3)Nhận kết quả giao dịch (Merchant xây (VI.4)4dựng api này theo chuẩn)567Luồng thanh toán Lấy token để kết nối hệ thốngQRCode, ví điện JETPAY (Dùng chung cho các luồng)tử, mobile money Khởi tạo giao dịchDomain QRCode/transactions(Mã QR, ví điện tử(VI.5)MoMo, ví điện tửZaloPay, ViettelMoney)89Domain Authen/connect/token(VI.1)Nhận kết quả giao dịch (Merchant xây (VI.6)dựng api này theo chuẩn)Luồng thanh toánLấy token để kết nối hệ thốngDomain Authen/connect/tokenChuyển khoảnJETPAY (Dùng chung cho các luồng)(VI.1)Khởi tạo giao dịchDomain Transfer/transactions(VI.7)10Nhận kết quả giao dịch (Merchant xây (VI.8)dựng api này theo chuẩn)

2. Các luồng kỹ thuật đáp ứng các luồng nghiệp vụ2.1. Luồng thanh toán thẻ (Thẻ nội địa, thẻ quốc tế)

2.2. Luồng thanh toán bằng Mã QR, ví điện tử, mobile money (Mã QR, Ví điện tử MoMo,Ví điện tử Zalo, Viettel Money)

2.3. Luồng thanh toán bằng hình thức Chuyển khoản

V. Thông tin cấu hìnhJETPAY cung cấp cho ĐVCNTT hai môi trường để tích hợp: TEST: Sử dụng trong quá trình tích hợp: xây dựng tính năng, kiểm thử, debug. PRODUCTION: Sử dụng để triển khai cho khách hàng.Thông tin cấu hìnhSTTTham sốGiá trị môi trường TESTGiá trị môi trường PRODUCTION1MerchantCodeMã định danh ĐVCNTT được cấp sau khi KYC xong2ClientIdĐịnh danh client kết nối3ClientSecretĐịnh danh client kết nối4Domain Payment Domain luồng thanh toán thẻ5Domain QRCode Domain luồng QRCode, Ví điện tử, Mobile Money6Domain TransferDomain luồng Chuyển khoản7Domain AuthenDomain xác thực client tích hợpVI. Đặc tả chi tiết1. Lấy token để kết nối hệ thống JETPAYTất cả service mà hệ thống đơn vị CNTT kết nối sang JetPay Payment đều cần được xác thựcclient tích hợp thông quan bước lấy token từ client id và client secret mà JetPay cung cấp.Url: Domain Authen/connect/tokenMethod: POSTRequestTham sốKiểu dữ liệuCó thể trốngVí dụMô tảclient idstringKhông“esign”Id của client tích hợpJetPay Paymentclient c6afb”Secret của client tích hợpJetPay Payment

grant typestringKhôngclient credentialsLoại thông tin đăng nhậpLưu ý: Ví dụ:Thông tin client id và client secret là bảo mật, tránh để lộ ra bên ngoài.Khi sinh token, body truyền vào ở dạng x-www-form-urlencoded.client id và client secret vui lòng liên hệ JetPay để được cũng cấp.Note: Convention các tham số đang theo thư viện IdentityServer4curl --location -g --request POST '{{domain authen}}/connect/token' \--header 'Content-Type: application/x-www-form-urlencoded' \--data-urlencode 'grant type client credentials' \--data-urlencode 'client id merchant-client' \--data-urlencode 'client secret b811b443-d00b-11eb-abbf-005056894b78'Response sucesss - HttpCode 200Ví dụ:{"access token": F3g8H2p0T3zr4Tw Q5s9vzdAWCsDrTYSbOP jSsttMRqkgDGFw","expires in": 86400,"token type": "Bearer","scope": "AuthService"}Mô tảTham sốaccess tokenKiểu dữ liệuCó thể trốngstringKhôngMô tảToken để gọi api gửi yêu cầu thanh toán

expires intoken typescopeintKhôngThời gian sống của token, đơn vị giâyStringKhôngLoại tokenStringKhôngMã lỗiMã HTTPErrorCodeMô tả lỗi200Thành công400client id hoặc client secret không hợp lệVí dụ{"error": "invalid client"}2. Khởi tạo giao dịch (Luồng thanh toán thẻ)Url: Domain Payment/transactionsMethod: POSTHeaderTham sốKiểu dữ liệuCó thể ngVí dụMô tả“Bearer” tokenToken trả về ở api lấytokenIP public của client kếtnối tới hệ thống JetPayPayment

DeviceIdstringKhôngId của thiết bị, chi tiết:Đối với mobile: Sửdụng UUIDĐối với Desktop: Sửdụng SerialNumberClientIdstringKhông“esign”Id của Client tích hợpJetpay PaymentRequestTham sốKiểu dữliệuCó thểtrốngVí dụMô tảOrderOrderKhôngObject chứa thông tin đơnhàngPaymentMethodPaymentMethodKhôngObject chứa các thông tinliên quan đến phương thứcthanh toánCustomerCustomerCóObject chứa thông tin kháchhàngMerchantMerchantKhôngObject chưa thông tin đơn vịchấp nhận thanh toánOrderTham sốKiểu dữ liệuCó thểtrốngVí dụMô tảIdstringKhôngId của đơn hàng trên hệthống đơn vị chấp nhậnthanh toánAmountdoubleKhôngSố tiền đơn hàngCcystringKhôngLoại tiền tệ, mặc định làVND

DescriptionstringCóMô tả đơn hàngFeeAmountdoubleCóPhí thanh toánProductsList Product CóDanh sách các sản phẩmtrong đơn hàngProductTham sốKiểu dữ liệuCó thểtrốngVí dụMô tảIdstringKhôngId sản phẩmNamestringKhôngTên sản phẩmAmountdoubleKhôngGiá sản phẩmDescriptionstringCóMô tả sản phẩmPaymentMethodTham sốPaymentTypeKiểu dữ liệuintCó thểtrốngCóVí dụMô tảPhương thức thanh toán:1: Thẻ ATM2: Thẻ quốc tế (Visa, Master)3: Tài khoản ngân hàng4: Ví điện tử5: QRCode6: Ví điện tử MoMo7: Viettel Money

Nếu null thì sẽ lựa chọnphương thức thanh toán trênJetPay PaymentBankCodestringCóMã ngân hàng.Khi paymentType 1.Trường này sẽ chỉ định trựctiếp thẻ ngân hàng nào sẽđược thanh toánBắtbuộctruyềnPaymentType 3BankPinCardstringCó520399;521311khiDanh sách mã đầu Pin củathẻ được phép thanh toánđược biểu diễn dưới dạngchuỗi ngăn cách nhau bởidấu ‘;’ .Khi sử dụng trường này thìBankCode hoặc CardTypephải có giá trịCardTypeintCóChỉ định trực tiếp loại thẻquốc tế sẽ dùng để thanhtoán cho phương thức thẻquốc tế.Để sử dụng trường này thìPaymentType 21: Visa2: MasterCard3: �nbằngTokenization hay khôngTokenizationstringCóTokenization sử dụng đểthanh toán

IsCreateTokenizationbooleanKhôngCó tạo tokenizationthanh toán hay khôngkhiUserIdstringKhôngUserId gắn với tokenizationkhi yêu cầu tạoIsCanChangePaymentMethodboolCóCho phép thay đổi phươngthức thanh toán hay không.true: Cho phép (Mặc định)false: Không cho phép (Phảichỉ định phương thức thanhtoán cụ thể)CustomerTham sốKiểu dữ liệuCó thểtrốngVí dụMô tảFirstNamestringCóTên của khách hàngLastNamestringCóHọ và tên đệm của kháchhàngCodestringCóMã của khách hàngPhonestringCóSố điện thoại của khách hàngEmailstringCóEmail của khách hàngAddressstringCóĐịa chỉ của khách hàngMerchantTham sốKiểu dữ liệuCó thểtrốngVí dụMô tả

CodestringKhôngMã Merchant mà JetPayPayment cấp cho đơn vị chấpnhận thanh toánReturnUrlstringKhôngUrl hệ thống của Merchant,dùng để JetPay redirect vềbáo kết quản giao dịch thànhcôngCancelUrlstringKhôngUrl hệ thống của Merchant,dùng để JetPay redirect vềbáo kết quản giao dịch thấtbại(KH hủy giao dịch hoặccó lỗi hệ thống)Response success – HttpCode 200Tham sốKiểu dữliệuCó thểtrốngVí dụMô a3aId của giao dịchtrên hệ inland?transactionId 6d6d12cee918-4d7c-a76b-99fdfffdfbceUrlCheckout đểđơn vị redirectsang JetPayPayment pageviettelpay://action/command AppInvoke&merchant code DLTS14&order id 1540350100433&billcode BILL 2018-10-Deeplinkchuyển hướngkhách hàng tớiApp thanh toán(Chỉ dùng vớiPaymentType: 7ViettelMoney)

Response fail – HttpCode # 200Tham sốKiểu dữliệuCó thểtrốngVí dụCodeStringKhôngE1002Mã lỗi trả vềMessageStringKhôngOrderId is duplicateMô tả lỗiDetailsStringKhôngThe following errors weredetected during validation.Mô tả lỗiDataStringObject{}Mô tả lỗiValidationErrorsStringList Object []Mô tả lỗiMã lỗiMã HTTPMã lỗiMô tả lỗi400E1000MerchantCode is invalid400E1001OrderId is duplicate400E1005Amount is invalid400E1006Tokenization is invalid500E3000Internal server errorMô tả

3. Chuyển trang thanh toán (Luồng thanh toán thẻ)Website/App của merchant nhận diện khách hàng có cài App tương ứng với phương thức thanhtoán hay không. Nếu có, chuyển hướng khách hàng tới App thông qua deeplink.Nếu không, khách hàng sẽ được chuyển (redirect) từ trang thanh toán của merchant sang trangthanh toán của JetPay dựa vào field urlCheckout mà bạn đã tạo yêu cầu thanh toán thành công ởmục 2 và sẽ đính kèm tham số vào URL có định dạng như sau:urlCheckout&signature signatureLưu ý: Trong trường hợp phương thức thanh toán là Viettel Money thì không cần thêm tham sốsignature vào URL Signature là một chuỗi kí tự được tạo từ một thuật toán cho trước, sử dụng để kiểm tratính đúng đắn của dữ liệu.Cách tạo chữ kí:Thuật toán JetPay đang sử dụng để tạo chữ kí là SHA256 để tạo signature. Dữ liệu đầu vào làmột chuỗi được kết hợp từ mã giao dịch và key checksum (Jetpay cung cấp cho merchant):inputDataSHA256 transactionId keyChecksum;signature SHA256(inputDataSHA256);Ví dụ:var transactionId “909e23c4-4797-4e53-92d3-e04d035c6afb”var key “7625674c-22cf-4a5f-baf5-da3df6e7e1e0”var data transactionId key;var signature thods/inland?transactionId 943403cd4807-40e1-a0f987aef051def7&signature 38F321E27AF9114. Nhận kết quả giao dịch (Luồng thanh toán thẻ)Merchant cần phải tạo một API ở phía backend để lắng nghe kết quả từ phía JetPay và cập nhậtdữ liệu.Sau khi khách hàng thanh toán trên cổng thanh toán của JetPay, JetPay sẽ gửi thông báo kết quảngay lập tức tới URL của API để cập nhật dữ liệu.

URL của API sẽ được cấu hình trên trang của MerchantWebAdmin.Xây dựng API.Url: Merchant cung cấp domain cho JetPayMethod: POSTRequestTham sốKiểu dữ liệuCó thểtrốngVí dụMô tảOrderIdstringKhông“OD123456”Mã đơn hàng trên hệthống 035c6afb”Mã giao dịch của JetpayAmountstringKhông11000Không3StatusintSố tiền thanh toánTrạng thái giao dịch:2: Giao dịch thất bại3: Giao dịch thành công4: Hết hạn thanh toán5: Hủy giao dịchTokenizationstringCóTokenization trả về vớitrường hợp thanh toánkèm lưu thông tin IntKhông1Phương thức thanh toánThông tin mã ngân 56(CheckThông tin số thẻ dạngmaskCheckSum bảo mật dữ

AdditionalInfoDictionary string, string CóSumKey OrderId Amount Status)liệu(dùng thuật toán bămSHA256)AdditionalInfo[“BankCode”]Các dữ liệu phát sinh vớinghiệp vụ của từng dự ánLưu ý: URL không phải là một dạng của localhost. IP của JetPay được phép truy cập tới máy chủ của bạn.Chứng chỉ HTTPS hợp lệ.5. Khởi tạo giao dịch (Luồng thanh toán QRCode, ví điện tử, mobile money)Url: Domain QRCode/qrcodesMethod: POSTHeaderTham sốAuthorizationRequestKiểu dữ liệuCó thể trốngstringKhôngVí dụMô tả“Bearer” tokenToken trả về ở api lấytoken

Tham sốKiểu dữliệuCó thểtrốngĐộ dàiMô tảCountryCodestringKhông2Mã vùng, mặc định là VNMerchantCodestringKhôngMax(20)Mã merchant do Jetpay cungcấpPayTypestringKhôngMax(4)Kiểu QRCode-01: QRCode cổngthanh toán02: QRCode sảnphẩm03: QRCode điểmbán04: QRCode hóa đơn05: Thanh toánmomo06: Thanh toánViettelMoney07: Thanh toánZaloPayProductIdstringCóMax(20)Mã sản phẩm (Để trống nếutạo QRCode có type 01,03,04)TxnIdstringCóMax(15)Mã đơn hàng, mã giao dịch(Dùng cho payType 01, 05,06,07)BắtbuộcpayType 05,06,07BillNumberstringKhôngMax(15)Số hóaterminalđơnAmountstringKhôngMax(13)Số tiền thanh toánvới payType 05vớiQRCode

Nhỏ Nhất: 10.000 VNDTối đa: 20.000.000 VNDCcystringKhôngMax(3)Mã tiền tệ. Mặc định là 704ExpDatestringKhôngMax(14)Thời gian hết hạn thanh toán,định dạng: yyMMddHHmmDescstringCóMax(19)Mô tảBắtbuộcpayType 05,07vớiTipAndFeestringCóMax(20)Tiền tip and fee, giá trị mặcđịnh để emptyConsumerIdstringCóMax(20)Mã khách hàng, dành choQR type 04PurposestringCóMax(19)Mã dịch vụ billing cho QRtype 04RedirectUrlstringCóPayType 05,07 (bắt buộc):URL này được sử dụng đểchuyển trang (redirect) từMoMo,ZaloPay về trangmua hàng của đối tác sau khikháchhàngthanhtoán(apptoapp hoặc QRCodecủa CTT).PayType 06:URLđểchuyển trang sau khi kháchhàng thanh toán thành côngCancelUrlstringResponse success – HttpCode 200CóPayType 06:URLđểchuyển trang sau khi kháchhàng hủy thanh toán hoặcthanh toán không thành công

Tham sốKiểu dữ óVí dụMô tảDữ liệu để pay?t TU9NT1NKSTEyMDE5MDgyM3wxNjEzNTMyMDURL để chuyểnsang trang thanhtoán của MoMohoặcViettelMoney,ZaloPaypayType 05,06,07DeeplinkstringCóMomo:”momo://action payWithAppToken&amount 150000&fee 0&requestType payment”ZaloPay: “2553 20090400000112548Y3z18”Format(app id zp trans token) sửdựng để tích hợp SDKTải SDK tích hợptại o.htmlURL để mở ng phải cài đặtứngdụngMoMo,ZaloPaytrước) và xác nhậnthanh toán.PayType 05,07

DeeplinkMiniAppCóURL mở màn hìnhxác nhận thanh toáncủaứngdụngMoMo. Áp dụngkhi đối tác sử dụngmini app nhúng vàotrong ứng dụngMoMo.payType 05Response fail – HttpCode # 200Tham sốKiểu dữliệuCó thểtrốngVí dụCodeStringKhôngE1000Mã lỗi trả vềMessageStringKhôngData input is not in formatMô tả lỗiDetailsStringKhôngThe following errors weredetected during validation.Chi tiết lỗiDataObjectCóDataValidationErrorsList Object CóChi tiết lỗivalidationMã lỗiMã HTTPMã lỗiMô tả lỗi400E1000MerchantCode is invalid400E1001ConsumerId is null or emptyMô tả

400E1002Data input is not in format400E1004Purpose is null or empty400E1007TxnId is duplicate400E1008ClientId inValid400E1014Fee amount inValid400E1015Transaction amount inValid400E1016Transaction amount is less than the minimum limit400E1017Transaction amount is more than the maximumlimit400E1018Transaction amount exceeds daily transaction limit400E1019Transaction amount exceeds monthly transactionlimit400E1020RedirectUrl Must Not Be Blank400E1021Description Must Not Be Blank400E1022TxnId Must Not Be Blank401500Token is invalidE3000Internal server error

6. Nhận kết quả giao dịch (Luồng thanh toán QRCode, ví điện tử, mobile money)Merchant cần phải tạo một API ở phía backend để lắng nghe kết quả từ phía JetPay và cập nhậtdữ liệu.Sau khi khách hàng thanh toán trên cổng thanh toán của JetPay, JetPay sẽ gửi thông báo kết quảngay lập tức tới URL của API để cập nhật dữ liệu.Url: Merchant cung cấp domain cho JetPay.Method: POSTRequestTham sốCodeKiểu dữliệuVí dụstringMô tảMã lỗi phần trừ tiền khách hàng“00”: Thành côngMessagestringMô tả mã lỗi truyền vàoTxnIdstringMã đơn hàngQRTracestringSố trace giao dịchBankCodestringMobilestringSố điện thoạiAccountNostringSố tài khoảnAmountstringSố tiền thanh toánPayDatestringThời gian hết hạn thanh toán, định dạng:yyMMddHHmmMerchantCodestringMã merchant do jetpay cung cấp“MOMO”Mã ngân hàng thanh toán

NamestringTên người nhận hàng. Tối đa không quá255 ký tựPhonestringSố điện thoại nhận hàngProvinceIdstringId của tỉnh nhận hàngDistrictIdstringId của quận, huyện nhận hàngAddressstringĐịa chỉ nhận hàngEmailstringĐịa chỉ emailAddDataList QRCodeItemPayment Với QRCodeItemPpayment là object baogồm các trường sau:stringLà mã hóa MD5 của chuỗi sau:Checksum-string: ProductId //Mã sản phẩmstring: Amount //Đơn giánstring: TipAndFee //Tiền tip, phístring: Ccy // Mã tiền tệstring: Qty: //Số lượngstring: Note //Ghi chúcode " " txnId " " qrTrace " " bankCode " " mobile " " accountNo " " amount " " payDate " " merchantCode " " ChecksumKeyVới ChecksumKey do JetPay cung cấpcho MerchantResponseTham sốKiểu dữliệuVí dụMô tả

CodestringMã lỗi trả về. Mô tả chi tiết bảng bêndướiMessagestringMô tả mã lỗi truyền vàoDataString(json)Chi tiết lỗiMô tả lỗiMã lỗi trả vềMã HTTPMãlỗiKiểu dữliệu20001StringThiếu hàng trong đơn hàngThông tin message sẽ hiển thị dạng ListJson các sản phẩmthiếu Products với nội dung cụ thể baogồm:Data{- String: productid;// Mã sản phẩm- String: qty;// Số lượng còn trong kho}20002StringHết toàn bộ hàng trong đơn hàngThông tin message sẽ hiển thị dạng String:“Kho hàng đã hết sản phẩm”20003StringĐơn hàng đã được thanh toánThông tin message sẽ hiển thị dạng String:“Đơn hàng đã được thanh toán”.Data{- String: txnId; // Mã đơn hàng}

20004StringLỗi tạo đơn hàngThông tin message sẽ hiển thị dạng Stringmô tả mã lỗi exception.20005StringThông tin message sẽ hiển thị dạng String:“đơn hàng đang được xử lí”Data{- String: txnId; // Mã đơn hàng}20006StringThông tin message sẽ hiển thị dạng String:“sai thông tin xác thực”20007StringThông tin message sẽ hiển thị dạng String:“số tiền không chính xác”Data{- String: amount; // Số tiền chính xác củađơn hàng}20008StringGiao dịch timout20009StringQR hết hạn thanh toán20010StringIP không được truy cập20011StringGiao dịch thanh toán thất bại do tài khoản người dùngkhông đủ tiền20012StringThẻ được dùng để thanh toán hiện không còn khả dụng20013StringGiao dịch bị đã bị hủy

20014StringGiao dịch thất bại do số tiền thanh toán vượt quá hạn mứcthanhtoán của người dùng.20015StringGiao dịch thất bại do người dùng đã từ chối xác nhậnthanh toán.20016StringGiao dịch bị từ chối vì tài khoản người dùng đang ở trạngtháitạm khóa.20017StringGiao dịch bị hạn chế theo thể lệ chương trình khuyến mãi20000StringThông tin message sẽ hiển thị dạng String:“đặt hàng thànhcông”Data{- String: txnId; // Mã đơn hàng}7. Khởi tạo giao dịch (Luồng thanh toán Chuyển khoản)Sử dụng để tạo các yêu cầu thanh toán bằng hình thức chuyển khoản đáp ứng 2 kiểu thanh toán: Thanh toán bằng nhập số tài khoản Thanh toán bẳng quét QRCodeUrl: Domain Transfer/transfermoneyMethod: POSTHeaderTham sốAuthorizationKiểu dữ liệuCó thể trốngstringKhôngVí dụMô tả“Bearer” tokenToken trả về ở api lấy

tokenRequestTham sốKiểu dữ liệuCó thể trốngVí dụMô tảMerchantCodeString(20)Không0000102Mã ĐVCNTT JetPay cungcấpOrderIdString(15)Cóabc123Danh sách mã đợt thu ngăncách nhau bởi dấu ; (nếuphụ huynh gạch nợ hết thì sẽđể là null)CustomerCodeString(8)CóabcxyzMã sisapAmountLongKhông100000Số tiền hóa đơnString(255)CóThanh toán hóađơnMô tả đơn hàngDescriptionFeeLongCó. Mặc định se success – HttpCode 200BIDV- Phí chuyển khoản virtualaccount áp dụng cho kháchhàng.- Nếu tính phí merchant thìFee 0Mã ngân hàngPhương thức thanh toán:9: Chuyển khoản

Tham sốKiểu dữ ingCó thể trốngKhôngKhôngKhôngVí dụMô tảJP000001abcxyzTài khoản ảo được tạo bởiJetPayBIDVNgân hàng thụ hưởng virtualaccountNgân hàngThương mại cổphần Đầu tư vàPhát triển ViệtNamTên ngân hàng thụ hưởngvirtual accountKhôngJETPAY THCSGiảng VõTên tài khoản thụ hưởngvirtual account100000Số tiền thanh ringKhôngMerchantCodeStringKhôngData để gen QrCode0000102Mã MerchantResponse success – HttpCode ! 200Tham sốKiểu dữ liệuCó thểtrốngVí dụMô tảcodeStringKhôngE1000Mã lỗi trả vềmessageStringKhôngMerchantCode is invalidMô tả lỗidetailsStringKhôngThe following errors weredetected during validation.Chi tiết lỗi

dataObjectCóDatavalidationErrorsList Object CóMô tả lỗivalidationMã lỗiMã HTTPMã lỗiMô tả lỗi400E1000MerchantCode is invalid400E1001OrderId is invalid400E1002OrderId is duplicate400E1003Fee is invalid401500UnauthorizedE3000Internal server error8. Nhận kết quả giao dịch (Luồng thanh toán Chuyển khoản)Merchant cần phải tạo một API ở phía backend để lắng nghe kết quả từ phía JetPay và cập nhậtdữ liệu.Sau khi khách hàng chuyển khoản thành công, JetPay sẽ gửi thông báo kết quả ngay lậptức tới URL của API để cập nhật dữ liệu.Url: Merchant cung cấp domain cho JetPayMethod: POST

RequestTham sốKiểu dữliệuVí dụMô tảTransactionCodestringMã hóa đơn của Jetpay(duy nhất trên hệthống của Jetpay)ConsumerIdstringMã khách hàngTxnIdstringMã đơn hàngQRTracestringSố trace giao dịchBankCodestringAccountNostringSố tài khoảnAmountstringSố tiền thanh toánMerchantCodestringMã merchant do jetpay cung cấpChecksumstringLà mã hóa MD5 của chuỗi sau:“BIDV”Mã ngân hàng thanh toánqrTrace " " bankCode " " accountNo " " amount " " merchantCode " " ChecksumKeyVới ChecksumKey do JetPay cung cấpcho MerchantResponseTham sốCodeKiểu dữliệustringVí dụMô tảMã lỗi trả về. Mô tả chi tiết bảng bêndưới

MessagestringMô tả mã lỗi truyền vàoDataString(json)Chi tiết lỗiMã HTTPMã lỗiKiểu dữliệuMô tả lỗi20001StringThiếu hàng trong đơn hàngThông tin message sẽ hiểnthị dạng List Json các sảnphẩmthiếu Products với nộidung cụ thể bao gồm:Data{- String: productid;// Mãsản phẩm- String: qty;// Số lượngcòn trong kho}20002StringHết toàn bộ hàng trong đơnhàngThông tin message sẽ hiểnthị dạng String: “Kho hàngđã hết sản phẩm”20003StringĐơn hàng đã được thanhtoánThông tin message sẽ hiểnthị dạng String: “Đơn hàngđã được thanh toán”.

Data{- String: txnId; // Mã đơnhàng}20000StringThành côngThông tin message sẽ hiểnthị dạng String: “đặt hàngthànhcông”Data{- String: txnId; // Mã đơnhàng}200E3000StringLỗi hệ thốngVII. Lưu ý khi sử dụng webview nhúng Cổng thanh toán JETPAY trên app MobileKhi sử dụng webview nhúng Cổng thanh toán JETPAY trên app Mobile sẽ cần bổ sung:- Cho phép Javascript hoạt động

- Thêm event xử lý download ảnh QRCode1. AndroidVí dụ code bằng Kotlin// Cho phép Javascript hoạt độngwebview.settings.javaScriptEnabled truewebview.setDownloadListener { url,contentTypeLength - // Url ảnh QRCode sẽ tDisposition,Ví dụ code bằng Java// Cho phép Javascript hoạt động trong webviewWebSettings webSettings nabled(true);// bắt sự kiện download ảnh QRCodemWebView.setDownloadListener(new DownloadListener() {public void onDownloadStart(String url, String userAgent,String contentDisposition, String mimetype,long contentLength) {downloadImageFromUrl(url);}});2. IOSVí dụ code bằng Swiftimport Foundationprotocol WebDownloadable: WKDownloadDelegate {func downloadDidFinish(fileResultPath: URL)func downloadDidFail(error: Error, resumeData: Data?)}class WebContentDownloader: NSObject {private var filePathDestination: URL?weak var downloadDelegate: WebDownloadable?mimeType,

func generateTempFile(with suggestedFileName: String?) - URL {let temporaryDirectoryFolder URL(fileURLWithPath: NSTemporaryDirectory(),isDirectory: true)return ggestedFileName ?ProcessIn

9 7k{qj wlq f x kuqk-(73 fxqj f s fkr 9&177 kdl p{l wu m áqj ÿ Ç wtfk k çs 7(67 6 ñ g éqj wurqj txi wuuqk wtfk k çs [k\ g õqj wtqk q qj nl Çp wk ñ ghexj 352'8&7,21 6 ñ g éqj ÿ Ç wul Çq nkdl fkr nkifk kjqj 7k{qj wlq f x kuqk 677 7kdp v Õ *li wu Ï p{l wu m áqj 7(67 *li wu Ï p{l wu m áqj 352'8&7,21