# Pay2S cho Laravel, PHP, Node.js và website riêng

## SDK và API

Dùng [SDK PHP / Node.js của Collection Link V2](/docs/api/collection-link-v2-sdk/) hoặc gọi [API thanh toán](/docs/api/tich-hop-ky-thuat/) từ backend. Không đưa SecretKey vào JavaScript trình duyệt, ứng dụng mobile hoặc kho mã công khai.

## Luồng tích hợp

1. Backend tạo đơn nội bộ ở trạng thái pending và lưu mã liên kết duy nhất.
2. Gọi Pay2S tạo liên kết, lưu mapping và URL trả về.
3. Khách thanh toán trên Payment Page.
4. Receiver [IPN](/docs/api/instant-payment-notification/) kiểm tra chữ ký, merchant, mã đơn và số tiền; khóa đơn khi cập nhật để callback trùng không cấp hàng hai lần.
5. Trang nhận đơn đọc trạng thái từ backend. Nếu redirect đến trước IPN, tự kiểm tra và cập nhật giao diện thay vì yêu cầu F5.

## Laravel

Đặt receiver trong route server, chỉ loại receiver Pay2S khỏi CSRF nếu framework yêu cầu và bắt buộc xác minh chữ ký. Dùng transaction/row lock khi cập nhật đơn. Không vô hiệu hóa CSRF cho toàn website.

## Node.js

Dùng SDK trên server; không dùng SDK với SecretKey trong bundle frontend. Trả ACK khi cập nhật đơn thành công, và kiểm soát retry/idempotency ở DB.

## PHP khác

Dùng SDK và ví dụ chữ ký trong tài liệu; không sao chép callback dành riêng WooCommerce sang hệ thống khác vì cách tìm và hoàn tất đơn khác nhau.

Đây là hướng dẫn sử dụng SDK hiện có, không phải plugin cài tự động cho mọi framework. Khi đổi từ API V1 sang V2, dùng đúng contract và chữ ký của phiên bản đó.
