Hướng dẫn cổng thanh toán
Tích hợp API Razorpay cho website đặt chỗ du lịch
Razorpay là cổng thanh toán của Ấn Độ, nhận thẻ, UPI, netbanking và ví điện tử bằng rupee. Hướng dẫn này giải thích một khoản thanh toán Razorpay hoạt động ra sao với đặt chỗ chuyến bay, khách sạn hay tour, và tình trạng thực tế trong PHPTRAVELS: hiện Razorpay chưa phải là bộ kết nối có sẵn, nhưng có thể được thêm như một tích hợp tùy chỉnh trên mã nguồn thuộc về bạn.
- Thẻ, UPI, netbanking, ví điện tử
- Đơn hàng, Checkout, capture
- Kiểm tra chữ ký và webhook
- Hoàn tiền toàn phần và một phần
Razorpay trong một cái nhìn
Razorpay là gì và vị trí của nó trong PHPTRAVELS
Razorpay là một cổng thanh toán của Ấn Độ. Doanh nghiệp du lịch bán cho khách hàng tại Ấn Độ dùng nó để nhận các phương thức khách mong đợi khi thanh toán: thẻ ghi nợ và thẻ tín dụng, UPI, netbanking và các ví phổ biến, tất cả được thu và quyết toán bằng rupee vào tài khoản Razorpay của chính người bán.
PHPTRAVELS là nền tảng đặt chỗ du lịch tự lưu trữ, kèm toàn bộ mã nguồn. Các cổng thanh toán có sẵn đến từ một danh sách trực tiếp mà bạn bật bằng thông tin xác thực người bán của riêng mình. Hiện Razorpay không nằm trong danh sách đó, nên trong trang quản trị chưa có công tắc nào cho nó.
Điều đó không có nghĩa là bạn không thể dùng. Vì mã nguồn thuộc về bạn, Razorpay có thể được thêm như một Tích hợp API tùy chỉnh, và với Ấn Độ đã có sẵn một cổng thanh toán: Cashfree. Trang Tích hợp cổng thanh toán liệt kê mọi cổng bạn có thể bật ngay bây giờ.

Bảng thông tin Razorpay
- Là gì
- Cổng thanh toán dành cho doanh nghiệp tại Ấn Độ
- Phương thức thanh toán
- Thẻ, UPI, netbanking và ví điện tử
- Tiền tệ
- Thu và quyết toán bằng INR; số tiền được gửi theo đơn vị paise
- Khóa API
- Key ID và Key Secret, tách riêng cho chế độ thử nghiệm và chế độ thật
- Tình trạng trong PHPTRAVELS
- Chưa phải bộ kết nối có sẵn. Có thể dùng như tích hợp tùy chỉnh trên mã nguồn đi kèm
- Có sẵn tại Ấn Độ hôm nay
- Cashfree, bật trong trang quản trị bằng tài khoản Cashfree của bạn
Luồng thanh toán
Một khoản thanh toán Razorpay cho đặt chỗ du lịch, từng bước
Tích hợp Razorpay chia việc giữa trình duyệt của du khách và máy chủ của bạn. Trình duyệt hiển thị Checkout; máy chủ tạo đơn hàng, kiểm tra kết quả và quyết định khi nào đặt chỗ được xác nhận.
- 01
Máy chủ của bạn
Tạo đơn hàng
Khi du khách bấm Thanh toán, máy chủ của bạn gọi Orders API với số tiền tính bằng paise, loại tiền và receipt đặt bằng mã đặt chỗ. Razorpay trả về một order_id.
- 02
Trình duyệt
Mở Razorpay Checkout
Trang đặt chỗ mở Checkout với Key ID của bạn và order_id đó, để du khách trả đúng số tiền mà máy chủ của bạn đã ấn định.
- 03
Trình duyệt
Du khách thanh toán
Du khách chọn thẻ, UPI, netbanking hoặc ví và hoàn tất bước ngân hàng yêu cầu nếu có. Khoản thanh toán lúc này đã được ủy quyền.
- 04
Trình duyệt
Checkout trả về ba giá trị
Khi thành công, Checkout trả về razorpay_payment_id, razorpay_order_id và razorpay_signature, và trang gửi chúng lên máy chủ của bạn.
- 05
Máy chủ của bạn
Xác minh chữ ký
Máy chủ của bạn tính lại chữ ký từ order_id và payment_id bằng Key Secret. Chỉ chữ ký khớp mới được coi là thanh toán thật.
- 06
Máy chủ của bạn
Capture khoản thanh toán
Với capture tự động, Razorpay capture giúp bạn. Với capture thủ công, máy chủ của bạn capture sau khi hãng bay, khách sạn hoặc nhà cung cấp tour xác nhận, để không ai bị trừ tiền cho một đặt chỗ thất bại.
- 07
Máy chủ của bạn
Xác nhận đặt chỗ
Đặt chỗ chuyển sang đã thanh toán, vé hoặc voucher được phát hành và payment_id của Razorpay được lưu cùng mã đặt chỗ.
- 08
Máy chủ của bạnMáy chủ tới máy chủ
Nhận webhook
Razorpay cũng gửi các sự kiện như payment.captured tới URL webhook của bạn. Cách này xử lý trường hợp du khách đóng tab trước khi trang kịp báo kết quả.
Chữ ký và webhook
Hai bước kiểm tra giúp tích hợp Razorpay đáng tin cậy
Mọi thứ đến từ trình duyệt hay qua internet đều có thể bị làm giả. Tích hợp Razorpay chỉ tin một khoản thanh toán sau khi kiểm tra chữ ký được tạo bằng một bí mật không bao giờ rời khỏi máy chủ của bạn.
1// 1. After Checkout: verify the payment signature 2$orderId = $booking["razorpay_order_id"]; // from your own record 3$paymentId = $_POST["razorpay_payment_id"]; 4$signature = $_POST["razorpay_signature"]; 5$expected = hash_hmac("sha256", $orderId . "|" . $paymentId, $keySecret); 6if (!hash_equals($expected, $signature)) { rejectPayment(); } 7markPaid($booking["ref"], $paymentId); 8 9// 2. Webhook: verify X-Razorpay-Signature over the raw body10$body = file_get_contents("php://input");11$header = $_SERVER["HTTP_X_RAZORPAY_SIGNATURE"] ?? "";12$expect = hash_hmac("sha256", $body, $webhookSecret);13if (!hash_equals($expect, $header)) { http_response_code(400); exit; }14$event = json_decode($body, true);15if (alreadyHandled($event)) exit; // repeat delivery16switch ($event["event"]) {17 case "payment.captured": confirmBooking($event); break;18 case "refund.processed": markRefunded($event); break;19}
Mã giả minh họa để thể hiện logic, không phải tệp dùng ngay. Hãy theo tài liệu và SDK của Razorpay để có các lệnh gọi chính xác.
Chữ ký thanh toán
HMAC SHA256 của order_id, một dấu gạch đứng và payment_id, dùng Key Secret của bạn làm khóa, phải bằng razorpay_signature. So sánh bằng hàm thời gian không đổi.
Chữ ký webhook
Mỗi webhook mang header X-Razorpay-Signature: một HMAC SHA256 của nội dung thô của yêu cầu, dùng webhook secret bạn đặt trong bảng điều khiển Razorpay làm khóa.
Gửi lặp
Webhook có thể đến nhiều lần hoặc sai thứ tự. Hãy ghi lại ID sự kiện và ID thanh toán, và bỏ qua sự kiện đã được áp dụng cho đặt chỗ.
Bí mật ở lại phía máy chủ
Chỉ Key ID được gửi tới trình duyệt. Key Secret và webhook secret nằm trong cấu hình máy chủ, không bao giờ nằm trong mã nguồn trang hay ứng dụng di động.
Hoàn tiền và hủy chỗ
Hoàn tiền du lịch hiếm khi là toàn bộ số tiền
Phí hủy, quy định no-show và hành trình bị hủy một phần khiến hoàn tiền du lịch thường chỉ là một phần. Refunds API của Razorpay xử lý cả hai trường hợp, và tích hợp quyết định số tiền dựa trên quy tắc đặt chỗ của bạn.
Hoàn tiền toàn phần
Hủy miễn phí sẽ hoàn lại toàn bộ số tiền đã capture về phương thức du khách đã dùng để thanh toán.
Hoàn tiền một phần
Sau khi trừ phí hủy, máy chủ chỉ hoàn phần còn lại. Số tiền được gửi theo paise, giống đơn hàng ban đầu.
Một phần của hành trình
Hủy một đêm khách sạn hoặc một hành khách và hoàn phần đó; có thể tiếp tục hoàn một phần nữa cho đến tổng số tiền đã capture.
refund.processed
Webhook hoàn tiền báo cho máy chủ của bạn khi khoản hoàn đã xong, để đặt chỗ và du khách thấy đúng trạng thái.
Lưu cùng đặt chỗ
Mỗi ID hoàn tiền được giữ cùng mã đặt chỗ và payment_id gốc cho bộ phận kế toán của bạn.
Ví dụ: hủy chỗ có phí
- Đã capture
- ₹12,500.00 amount: 1250000
- Phí hủy
- ₹1,500.00 amount: 150000
- Số tiền hoàn
- ₹11,000.00 amount: 1100000
Số liệu chỉ mang tính minh họa. Razorpay nhận số tiền theo đơn vị tiền tệ nhỏ nhất, nên 100 paise là một rupee.
Cách kết nối Razorpay
Ba cách nhận thanh toán, có hoặc không có Razorpay
Chọn cách phù hợp với đội ngũ và ngày ra mắt của bạn. Cả ba đều giữ tiền trong tài khoản người bán của chính bạn; PHPTRAVELS không bao giờ nằm trong khâu quyết toán.
Phương án 1
Lập trình viên của bạn thêm vào
PHPTRAVELS đi kèm toàn bộ mã nguồn, nên lập trình viên của bạn có thể thêm Razorpay làm một cổng mới bên cạnh các cổng sẵn có: tạo đơn hàng, Checkout ở bước thanh toán, kiểm tra chữ ký, capture, webhook và hoàn tiền.
- Xây dựng và thử nghiệm bằng khóa chế độ thử nghiệm của Razorpay
- Dùng lại mã đặt chỗ làm receipt của đơn hàng
- Chuyển sang khóa thật khi các đặt chỗ thử nghiệm đạt
Phương án 2
PHPTRAVELS xây dựng cho bạn
Đội ngũ lập trình của chúng tôi có thể xây dựng bộ kết nối Razorpay cho bạn như một Tích hợp API tùy chỉnh. Bạn gửi yêu cầu, nhận chi phí và tiến độ trước khi bắt đầu, và nhận mã nguồn đã kiểm thử khi hoàn thành.
- Báo giá trước khi bắt đầu
- Xây dựng trên chế độ thử nghiệm của Razorpay
- Bàn giao dưới dạng mã nguồn thuộc về bạn
Phương án 3
Dùng ngay một cổng có sẵn
Nếu cần ra mắt trước, hãy bật một cổng đã có trong nền tảng. Với Ấn Độ đó là Cashfree. Các cổng có sẵn hiện nay gồm:
- CashfreeHướng dẫn thiết lập Cashfree
- Stripe
- PayPal
- xMoney
- Fawaterk
- Paystack
Cổng có sẵn
Các cổng thanh toán bạn có thể bật ngay hôm nay
Danh sách này lấy trực tiếp từ danh mục cổng thanh toán của PHPTRAVELS. Mỗi cổng được bật trong trang quản trị bằng tài khoản và khóa của riêng bạn.
Cashfree
StripeHướng dẫn tích hợpPayPalHướng dẫn tích hợp
xMoney
Fawaterk
Paystack
Flutterwave
Adyen
MyFatoorah
SSLcommerz
Razorpay- Tất cả tích hợp
Muốn hiểu các lệnh gọi phía sau từng cổng? Hãy đọc hướng dẫn API cổng thanh toán, so sánh hướng dẫn Thanh toán Stripe và Thanh toán PayPal, hoặc xem cách đại lý thanh toán từ Ví đại lý B2B trên cổng B2B.
Không phải dưới dạng bộ kết nối có sẵn. Hiện Razorpay không nằm trong danh sách cổng của PHPTRAVELS, nên bạn không thể bật nó trong trang quản trị. Vì toàn bộ mã nguồn được kèm theo, nó có thể được thêm như một tích hợp cổng thanh toán tùy chỉnh, bởi lập trình viên của bạn hoặc của chúng tôi.
Cashfree là cổng có sẵn trong PHPTRAVELS và có hướng dẫn thiết lập tại docs.phptravels.com/payments/cashfree. Bạn bật nó trong trang quản trị bằng tài khoản Cashfree của chính mình. Các cổng có sẵn khác như Stripe và PayPal được liệt kê ở trang các cổng thanh toán.
Razorpay chấp nhận thẻ, UPI, netbanking và ví điện tử cho các khoản thanh toán bằng rupee Ấn Độ. Phương thức nào hiện ra khi thanh toán phụ thuộc vào những gì được bật trên tài khoản Razorpay của bạn.
Razorpay nhận số tiền theo đơn vị tiền tệ nhỏ nhất, nên tổng đặt chỗ tính bằng rupee được nhân với 100 trước khi tạo đơn hàng. Số tiền hoàn cũng được gửi theo cách tương tự.
Checkout trả về ID thanh toán, ID đơn hàng và một chữ ký. Máy chủ của bạn tính HMAC SHA256 của ID đơn hàng và ID thanh toán bằng Key Secret và chỉ chấp nhận thanh toán nếu kết quả khớp với chữ ký.
Capture tự động đơn giản hơn. Capture thủ công cho phép bạn chỉ capture sau khi hãng bay, khách sạn hoặc nhà cung cấp tour xác nhận đặt chỗ, nhờ đó đặt chỗ thất bại có thể được nhả ra thay vì phải hoàn tiền. Lựa chọn phụ thuộc vào sản phẩm và nhà cung cấp của bạn.
Có. Refunds API của Razorpay hỗ trợ hoàn tiền toàn phần và một phần, nên có thể giữ lại phí hủy và trả lại phần còn lại. Webhook refund.processed báo cho máy chủ của bạn khi khoản hoàn hoàn tất.
Có. Tài khoản người bán, Key ID và Key Secret cùng việc quyết toán đều thuộc về bạn. PHPTRAVELS không bao giờ cấp thông tin xác thực cổng và không bao giờ xử lý tiền của bạn. Hãy xây dựng bằng khóa chế độ thử nghiệm và chuyển sang khóa thật khi ra mắt.
Tùy phạm vi bạn cần, như checkout, capture thủ công, hoàn tiền và thanh toán của đại lý. PHPTRAVELS báo giá công việc tùy chỉnh trước khi bắt đầu. Bản thân nền tảng là giấy phép trả một lần, từ.
Khám phá thêm
Thêm về nền tảng
- Tích hợp cổng thanh toánThanh toán, 3D Secure, hoàn tiền và webhook
- API cổng thanh toánThanh toán thẻ, 3-D Secure, capture và hoàn tiền hoạt động ra sao qua API
- Tích hợp API tùy chỉnhKết nối mọi API nhà cung cấp hoặc đối tác với PHPTRAVELS
- Thanh toán StripeThanh toán thẻ và ví, hoàn tiền và chuyển khoản
- Thanh toán PayPalThanh toán PayPal cho vé máy bay, khách sạn và tour
- Ví đại lý B2BNạp tiền của đại lý, hạn mức tín dụng và sổ cái theo từng đại lý
