> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# v1.75.0 (Ngày 23 tháng 1, 2026)

> Các bộ sản phẩm, phương thức thanh toán RevolutPay & Billie cho các khoản thanh toán một lần GBP, xem trước phiên thanh toán, siêu dữ liệu trong yêu cầu thay đổi kế hoạch, trường invoice_url, điểm xác thực giảm giá, và cải thiện khả năng lọc trên bảng điều khiển

## Tính năng mới

### 1. **Bộ sản phẩm**

Nhóm các sản phẩm liên quan lại với nhau để mang đến trải nghiệm thanh toán thống nhất, lựa chọn kế hoạch và con đường nâng cấp/giảm cấp liền mạch trong Cổng thông tin Khách hàng.

<Frame>
  <img src="https://mintcdn.com/dodopayments/2YrxTqbaYgAm54C_/images/product-collection/checkout-page.png?fit=max&auto=format&n=2YrxTqbaYgAm54C_&q=85&s=1890932384bc32c8126c7993f3581855" alt="Trang thanh toán của Bộ sưu tập sản phẩm hiển thị nhiều tùy chọn gói" style={{ maxHeight: '500px', width: 'auto' }} width="1440" height="960" data-path="images/product-collection/checkout-page.png" />
</Frame>

**Lợi ích chính**

* **Thanh toán dựa trên bộ sưu tập**: Hiển thị tất cả các sản phẩm từ một bộ trong một giao diện thanh toán, cho phép khách hàng so sánh và chọn kế hoạch ưa thích của họ
* **Quản lý sản phẩm có tổ chức**: Nhóm các sản phẩm liên quan (ví dụ: Starter, Pro, Enterprise) dưới một bộ duy nhất
* **Tích hợp Cổng thông tin Khách hàng**: Cho phép khách hàng nâng cấp hoặc giảm cấp giữa các sản phẩm trong cùng một bộ
* **Kiểm soát của thương nhân**: Bật, tắt và thay đổi thứ tự của sản phẩm trong mỗi bộ

**Cách thức hoạt động**

Tạo một phiên thanh toán cho một bộ:

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_collection_id: 'pdc_abc123',
  product_cart: [], // Required: pass an empty array for collection checkout
  return_url: 'https://yoursite.com/return'
});

// Redirect customer to the checkout
window.location.href = session.checkout_url;
```

<Check>
  Kết quả: Trải nghiệm thanh toán thống nhất nơi khách hàng có thể xem và chọn từ tất cả các sản phẩm có trong bộ sưu tập của bạn.
</Check>

<Info>
  Thanh toán theo bộ sưu tập lý tưởng cho các doanh nghiệp đăng ký muốn khách hàng so sánh các gói cạnh nhau trước khi mua hàng.
</Info>

Tìm hiểu thêm: [Hướng dẫn Bộ sản phẩm](/features/product-collections)

### 2. **Phương thức Thanh toán RevolutPay & Billie cho Tiền tệ GBP**

Mở rộng các tùy chọn thanh toán với RevolutPay và Billie hiện có sẵn toàn cầu cho các giao dịch thanh toán một lần GBP, mang lại cho khách hàng của bạn nhiều sự linh hoạt hơn trong cách họ thanh toán.

**Phương thức Thanh toán Mới**

| Phương thức Thanh toán | Quốc gia Hỗ trợ | Tiền tệ | Hỗ trợ Đăng ký      |
| ---------------------- | --------------- | ------- | ------------------- |
| **RevolutPay**         | Toàn cầu        | GBP     | Không (chỉ một lần) |
| **Billie**             | Toàn cầu        | GBP     | Không (chỉ một lần) |

* **RevolutPay** – Thanh toán nhanh chóng và liền mạch cho người dùng Revolut trên toàn cầu
* **Billie** – Giải pháp Mua Ngay Trả Sau B2B cho phép doanh nghiệp cung cấp các điều khoản thanh toán linh hoạt cho khách hàng của họ

<Info>
  Những phương thức thanh toán này được tự động áp dụng cho các giao dịch bằng GBP. Không cần cấu hình bổ sung nào.
</Info>

Tìm hiểu thêm: [Phương thức Thanh toán](/features/payment-methods)

### 3. **Xem trước Phiên Thanh toán**

Xem trước các phiên thanh toán trước khi tạo chúng để tính toán chính xác giá, thuế, giảm giá và tổng cộng. Hiển thị giá thực cho khách hàng trước khi họ tiếp tục thanh toán.

**Cách thức hoạt động**

```typescript theme={null}
const preview = await client.checkoutSessions.preview({
  product_cart: [
    { product_id: 'pdt_123', quantity: 1 }
  ],
  billing_address: {
    country: 'US',
    state: 'CA',
    zipcode: '94102'
  },
  discount_code: 'SAVE20'
});

console.log('Subtotal:', preview.current_breakup.subtotal);
console.log('Tax:', preview.current_breakup.tax);
console.log('Discount:', preview.current_breakup.discount);
console.log('Total:', preview.total_price);
```

**Tình huống sử dụng**

* **Hiển thị giá tùy chỉnh**: Hiển thị tổng số chính xác bao gồm thuế trước khi thanh toán
* **Xác thực giảm giá**: Xác minh mã giảm giá và cho khách hàng thấy tiết kiệm
* **Hỗ trợ đa tiền tệ**: Xem trước giá trong các loại tiền tệ khác nhau
* **Tóm tắt giỏ hàng**: Xây dựng giao diện giỏ hàng tùy chỉnh với giá theo thời gian thực

<Card title="Preview API Reference" icon="code" href="/api-reference/checkout-sessions/preview">
  Xem tài liệu đầy đủ về điểm cuối xem trước.
</Card>

### 4. **Hỗ trợ Siêu dữ liệu trong Yêu cầu Thay đổi Kế hoạch**

Truyền siêu dữ liệu tùy chỉnh khi thay đổi các kế hoạch đăng ký, cho phép theo dõi tốt hơn và tích hợp với các hệ thống nội bộ của bạn trong quá trình chuyển đổi kế hoạch.

```javascript theme={null}
// Adding metadata when changing a subscription plan
await client.subscriptions.changePlan('sub_123', {
  product_id: 'pdt_premium',
  proration_billing_mode: 'prorated_immediately',
  quantity: 1,
  metadata: {
    upgrade_reason: 'feature_request',
    previous_plan: 'basic',
    sales_rep: 'john@company.com'
  }
});
```

**Tình huống sử dụng**

* **Theo dõi lý do nâng cấp/giảm cấp**: Lưu lý do tại sao khách hàng thay đổi kế hoạch
* **Liên kết với hồ sơ CRM**: Gắn kết thay đổi kế hoạch với hoạt động bán hàng
* **Phân loại nội bộ**: Đánh dấu thay đổi kế hoạch để báo cáo và phân tích
* **Lưu trữ hồ sơ**: Duy trì các bản ghi về ai đã khởi xướng thay đổi kế hoạch

<Info>
  Siêu dữ liệu được bao gồm trong các sự kiện webhook, giúp dễ dàng xử lý các thay đổi gói với dữ liệu tùy chỉnh của bạn.
</Info>

Tìm hiểu thêm: [Hướng dẫn Siêu dữ liệu](/api-reference/metadata) | [API Thay đổi Kế hoạch](/api-reference/subscriptions/change-plan)

### 5. **`invoice_url` Trường trong Phản hồi Thanh toán và Phản hồi Liên kết Thanh toán**

Phản hồi Thanh toán và Phản hồi Liên kết Thanh toán hiện bao gồm trường `invoice_url`, cung cấp quyền truy cập trực tiếp đến hóa đơn liên quan đến mỗi khoản thanh toán.

```json theme={null}
{
  "payment_id": "pay_2IjeQm4hqU6RA4Z4kwDee",
  "status": "succeeded",
  "invoice_url": "https://dodopayments.com/invoices/inv_2IsUnWGtRKFLxk7xAQeyt",
  "total_amount": 9900,
  "currency": "USD",
  // ... other fields
}
```

**Tình huống sử dụng**

* **Giao tiếp với khách hàng**: Gửi liên kết hóa đơn trực tiếp cho khách hàng
* **Tích hợp kế toán**: Liên kết các khoản thanh toán với hóa đơn trong phần mềm kế toán của bạn
* **Cổng tự phục vụ**: Cho phép khách hàng dễ dàng truy cập hóa đơn của họ
* **Lưu giữ hồ sơ**: Duy trì tham chiếu trực tiếp đến tài liệu hóa đơn

<Card title="Get Payment API" icon="code" href="/api-reference/payments/get-payments-1">
  Xem sơ đồ Phản hồi Thanh toán.
</Card>

### 6. **Xác thực Giảm giá theo Tên Mã**

Điểm cuối API mới để xác thực và lấy mã giảm giá theo tên mã của chúng (ví dụ: "SAVE20") thay vì sử dụng ID giảm giá nội bộ. Xác minh tính đủ điều kiện giảm giá trước khi áp dụng chúng tại thanh toán.

```javascript theme={null}
// Validate a discount code before checkout
const discount = await client.discounts.retrieveByCode('SAVE20');

console.log('Discount type:', discount.type);
console.log('Discount value:', discount.amount);
console.log('Valid until:', discount.expires_at);
```

**Lợi ích**

* **Xác thực trước khi thanh toán**: Xác minh mã giảm giá trước khi tạo các phiên thanh toán
* **Phản hồi theo thời gian thực**: Hiển thị cho khách hàng xem mã của họ có hợp lệ không
* **Xử lý lỗi**: Phát hiện các mã không hợp lệ hoặc hết hạn sớm
* **Giao diện mã giảm giá tùy chỉnh**: Xây dựng các trường nhập mã giảm giá với xác thực ngay lập tức

<Card title="Get Discount by Code API" icon="code" href="/api-reference/discounts/get-discount-by-code">
  Xem tài liệu đầy đủ về điểm cuối.
</Card>

### 7. **Cải thiện khả năng Lọc cho Khách hàng, Giảm giá, và Khóa bản quyền**

Các bộ lọc API mới cho việc liệt kê Khách hàng, Giảm giá, và Khóa bản quyền, giúp dễ dàng tìm và quản lý dữ liệu của bạn một cách lập trình.

**Bộ lọc API Khách hàng**

| Bộ lọc           | Mô tả                                                                       |
| ---------------- | --------------------------------------------------------------------------- |
| `email`          | Lọc theo email khách hàng                                                   |
| `name`           | Lọc theo tên khách hàng (khớp một phần, không phân biệt chữ hoa chữ thường) |
| `created_at_gte` | Lọc khách hàng được tạo từ hoặc sau dấu thời gian này                       |
| `created_at_lte` | Lọc khách hàng được tạo trước hoặc vào dấu thời gian này                    |

```javascript theme={null}
// Find customers by name created in the last 30 days
const customers = await client.customers.list({
  name: 'John',
  created_at_gte: '2026-01-01T00:00:00Z'
});
```

**Bộ lọc API Giảm giá**

| Bộ lọc          | Mô tả                                                                      |
| --------------- | -------------------------------------------------------------------------- |
| `code`          | Lọc theo mã giảm giá (khớp một phần, không phân biệt chữ hoa chữ thường)   |
| `discount_type` | Lọc theo loại giảm giá (phần trăm)                                         |
| `active`        | Lọc theo trạng thái còn hiệu lực (true = chưa hết hạn, false = đã hết hạn) |
| `product_id`    | Lọc theo giới hạn sản phẩm (chỉ các giảm giá áp dụng cho sản phẩm này)     |

```javascript theme={null}
// Find active percentage discounts for a specific product
const discounts = await client.discounts.list({
  active: true,
  discount_type: 'percentage',
  product_id: 'pdt_123'
});
```

**Bộ lọc API Khóa bản quyền**

| Bộ lọc           | Mô tả                                                                |
| ---------------- | -------------------------------------------------------------------- |
| `customer_id`    | Lọc theo ID khách hàng                                               |
| `status`         | Lọc theo trạng thái khóa giấy phép (`active`, `expired`, `disabled`) |
| `product_id`     | Lọc theo ID sản phẩm                                                 |
| `created_at_gte` | Lọc khóa giấy phép được tạo từ hoặc sau dấu thời gian này            |
| `created_at_lte` | Lọc khóa giấy phép được tạo trước hoặc vào dấu thời gian này         |

```javascript theme={null}
// Find active license keys for a specific product
const licenseKeys = await client.licenseKeys.list({
  status: 'active',
  product_id: 'pdt_123'
});
```

<CardGroup cols={3}>
  <Card title="List Customers API" icon="users" href="/api-reference/customers/get-customers">
    Xem tài liệu đầy đủ về API Khách hàng.
  </Card>

  <Card title="List Discounts API" icon="percent" href="/api-reference/discounts/list-discounts">
    Xem tài liệu đầy đủ về API Giảm giá.
  </Card>

  <Card title="List License Keys API" icon="key" href="/api-reference/licenses/list-license-keys">
    Xem tài liệu đầy đủ về API Khóa giấy phép.
  </Card>
</CardGroup>

### 8. **Cải tiến UI/UX trong Bảng điều khiển**

Phiên bản này bao gồm nhiều cải tiến UI/UX trên bảng điều khiển để mang đến một trải nghiệm trực quan và tinh tế hơn.

**Điểm nổi bật**

* Cải thiện điều hướng và tính đồng nhất trong bố cục
* Tăng cường tương tác trên bảng dữ liệu
* Cải thiện trạng thái tải và phản hồi
* Thiết kế phần tử hình ảnh đã được tinh chỉnh
* Cải thiện khả năng đáp ứng trên di động
