## Tích hợp với Ree-Pay
#### Cài đặt postman
- Import Postman file <code>reepay.json</code> để danh sách các API có thể tương tác với server sandbox Ree-Pay
#### Các bước tích hợp
I> Cấu hình cửa hàng
1. Tạo Tài khoản nhà bán hàng (Merchant) trên trang Merchant Portal của Ree-Pay
Sandbox: https://sandbox.ree-pay.com/register?type=m
Prod: https://portal.ree-pay.com/register?type=m
- Lấy thông tin bộ key mã hóa, gồm:
- <code>token_key</code>
- <code>encrypt_key</code>
- <code>checksum_key</code>
2. Đăng nhập với vai trò nhà bán hàng (Merchant)
- Endpoint [POST] <code>/v2/merchant/login</code>
- Request headers
```http
Content-Type: application/json
Accept: application/json
```
- Request parameters
```json
{
"login_identity": "your_email",
"login_password": "your_password"
}
```
- Response data
```json
{
"status": 200,
"data": {
"token": "THIS_IS_YOUR_ACCESS_TOKEN"
},
"code": "success",
"message": "Success"
}
```
3. Tạo cửa hàng (store)
- Endpoint [POST] <code>/v2/offline-store</code>
- Request headers
```http
Content-Type: application/json
language: en
token: {{YOUR_ACCESS_TOKEN}}
Accept: application/json
```
- Request parameters
```json
{
"store_code": "STORECODE002",
"store_name": "Store ABC",
"phone": "0937893103",
"email": "vutri103@yopmail.com",
"password": "12345678",
"address": "15B Nguyễn Trãi",
"city": "HCM",
"district": "Q5",
"ward": "P12",
"logo": "https://i.pinimg.com/564x/a3/2b/19/a32b19c33d4a36e69069493a0353e531.jpg"
}
```
- Response data
```json
{
"status": 200,
"code": "success",
"message": "Success"
}
```
4. API lấy danh sách cửa hàng (store)
- Endpoint [GET] <code>/v2/offline-store?limit=100&page=1</code>
- Request headers
```http
Content-Type: application/json
language: en
token: {{YOUR_ACCESS_TOKEN}}
Accept: application/json
```
- Query parameters
```http
limit: 100
page: 1
```
- Response data
```json
{
"status": 200,
"data": {
"data": [
{
"uuid": "6c05aa4b-0af9-4722-ab4b-970c6afeb6c6",
"store_code": "STORECODE001",
"store_name": "Store của Vũ Trí (Official)",
"address": "15B Nguyễn Trãi (14B), Q5, P12, HCM",
"phone": "0937893443",
"email": "vutri1013@yopmail.com",
"meta_data": null,
"token_key": "yRUT9YOLGtBETetNJPzDixGVza",
"encrypt_key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5XKoPRMJcr4vIaIuLsIXY6Xn5IYfDTumiOHY1ioRnr02h6JlApE95sjVnwNixB1z12mSrXMgDtdPnNOz1jF7LfqfDkfI+LnlDZaPjuDvMjPv+9SHHUMMU8LKCb3IlFV61EfqTH/7K4oh/RQ+vx7mWhEF5IWLfJf9IOIY4C03PdQIDAQAB",
"checksum_key": "tXgfbK6iwBFTLuQHMLZS2dZKfh",
"created_at": "2022-11-22 14:19:29",
"updated_at": "2022-11-22 14:22:01"
},
{
"uuid": "4b9a50e1-f84e-442d-9613-b0d7afc177d0",
"store_code": "STORECODE001",
"store_name": "Store của Vũ Trí 23",
"address": "15B Nguyễn Trãi, Q5, P12, HCM",
"phone": "0937893101",
"email": "vutri101@yopmail.com",
"meta_data": null,
"token_key": "y4il3nkH6RtlhhuKXFWWyrsEz5",
"encrypt_key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDG0UUvruulVDlTbyFH3VyU2JFnnti4lzbpEJkVvFZ8/NWaORzD1DEhB7w1I7YIXjnOfNXE80/ailaUrygYJdgi44AO8zanWt4Go17qaIyAH253cLPeo30vzw9C0fcb5b4JRIH6r7dg/7bNfEtAAz23v37r53h49G2Z+DmGMHlPNQIDAQAB",
"checksum_key": "neV4kyTxg05lFvaQZ9uPyYGTWM",
"created_at": "2022-11-22 14:19:43",
"updated_at": "2022-11-22 14:19:43"
}
],
"meta": {
"pagination": {
"total": 4,
"count": 4,
"per_page": 100,
"current_page": 1,
"total_pages": 1,
"links": {}
}
}
},
"code": "success",
"message": "Success"
}
```
- Dựa vào danh sách cửa hàng lấy được bộ key của cửa hàng (gồm 3 keys)
- <code>token_key</code>
- <code>encrypt_key</code>
- <code>checksum_key</code>
- Nhập 1 bộ key trên vào màn hình máy smart POS, đối với mỗi cửa hàng khác nhau sẽ nên có 1 bộ key khác nhau
5. Gọi API kết nối tới server của Ree-Pay để xác thực bộ key hợp lệ, khi thành công sẽ lưu bộ keys vào local máy Smart POS
- Endpoint <code>/v2/offline-store/save</code>
- Request headers
```http
Content-Type: application/json
language: en
token: {{token_key}}
Accept: application/json
```
#### Các bước thanh toán qua Ree-Pay với vai trò cửa hàng
II> Checkout
1. Mã hóa dữ liệu trước khi gửi qua server Ree-Pay
| Key mã hóa | Mô tả |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| <code>Token Key</code> | Key sử dụng để đăng nhập sử dụng API phía Ree-Pay |
| <code>Encrypt key</code> | Key mã hóa đơn hàng sử dụng thuật toán RSA <br/> Format như sau <br/> |
| | Dữ liệu ban đầu (data) |
| | 1. JSON encode (data) => Dữ liệu <code>A</code> |
| | 2. Base64 encode (<code>A</code>) = Dữ liệu <code>B</code> |
| | 3. Mã hóa RSA (<code>B</code>) với <code>Encrypt key</code> và Encrypt mode là <code>ENCRYPTION_PKCS1</code> => Data cuối cùng (<code>C</code>) |
| <code> Checksum key</code> | Key sử dụng để đảm bảo tính toàn vẹn dữ liệu |
| | Mã hóa một chiều MD5 dữ liệu đã encrypt và checksum key |
| | <code>Checksum data</code> = md5(Data cuối cùng + Checksum key) |
2. API Purchase history: <br/>
Đối tác gọi API Purchase history để chia sẻ lịch sử giao dịch của khách hàng đến Ree-Pay.<br/>
Tham khảo API lịch sử giao dịch tại https://developers.ree-pay.com/checkout.html#purchase_history_api
3. API Checkout
Đối tác gọi API Checkout để yêu cầu tạo giao dịch với Ree-Pay.
- Endpoint <code>/v2/offline-store/checkout</code>
- Request headers
```http
Content-Type: application/json
language: en
token: {{token_key}}
Accept: application/json
```
- Parameters request JSON body
```http
{{Encrypted data}}
```
- Response data
```json
{{Data from ree-pay}}
```
Ví dụ:
```json
{
"order_no": "YOURORDERNO123",
"order_id": "YOURORDERID123",
"currency": "₫",
"shipping_fee": "35000",
"tax": "0",
"total_amount": 445000,
"total_discount": "0",
"language": "en",
"email": "tester2323@yopmail.com",
"phone": "0366888280",
"billing": {
"name": "Dragan bozic",
"address": "8D1 Đường Ngô Tất Tố, Phường 22, Bình Thạnh, Thành phố Hồ Chí Minh",
"tax_number": "0123"
},
"shipping": {
"address": "Dragan bozic<br/>8D1 Đường Ngô Tất Tố, Phường 22, Bình Thạnh, Thành phố Hồ Chí Minh<br/>Ho Chi Minh"
},
"order_details": [
{
"item_category": "tops",
"item_name": "Love Top",
"item_price": 410000,
"item_quantity": 1,
"item_subtotal": "410000"
}
],
"order_info": "Đơn thanh toán tại ABC",
"merchant_urls": {
"checkout_url": "https://thefrecklestudios.com/cart/?cancel_order=true&order=wc_order_e6xqoc7F63c3S&order_id=8338&redirect&_wpnonce=6ef138b8a6",
"return_url": "https://thefrecklestudios.com/checkout/order-received/8338/?key=wc_order_e6xqoc7F63c3S",
"notify_url": ""
}
}
```
4. API Get order detail
Đối tác gọi API Get order detail để lấy thông tin chi tiết giao dịch
Tham khảo API lấy chi tiết giao dịch tại https://developers.ree-pay.com/checkout.html#order_detail_api
5. API Request cancel
Đối tác gọi API Request cancel để yêu cầu hủy giao dịch
- Endpoint [PUT] <code>/v2/order/cancel</code>
- Request headers
```http
Content-Type: application/json
language: en
token: {{token_key}}
Accept: application/json
```
- Parameters request JSON body
```json
{
"order_id": "AP221435631669",
"reason": "Customer requests cancel txn ECO123456"
}
```
- Response data
```json
{{Data from ree-pay}}
```