> ## 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.70.0 (24 tháng 12, 2025)

> Hỗ trợ thanh toán trực tiếp, sử dụng các phương thức thanh toán hiện có cho các giao dịch ngay lập tức, quản lý các kế hoạch đăng ký từ bảng điều khiển, tạo liên kết thanh toán ngắn, bỏ qua các trang thành công với chuyển hướng ngay lập tức, và kích hoạt các đăng ký theo yêu cầu cho tất cả các doanh nghiệp

## Tính Năng Mới 🚀

1. **Thanh Toán Trực Tiếp - Trải Nghiệm Thanh Toán Hoàn Toàn Nhúng (BETA)**

   Nhúng thanh toán Dodo Payments trực tiếp vào trang web của bạn để có trải nghiệm thanh toán liền mạch và thương hiệu. Khác với thanh toán chồng lên, mở ra như một modal, thanh toán trực tiếp nhúng biểu mẫu thanh toán trực tiếp vào bố cục trang của bạn.

   <Frame>
     <img src="https://mintcdn.com/dodopayments/HpxJAc8zNlxzewa_/images/inline-checkout/cover.png?fit=max&auto=format&n=HpxJAc8zNlxzewa_&q=85&s=99c1a92ef01680248a421d3f057b02cd" alt="Hình ảnh bìa Thanh toán Nội tuyến" style={{ maxHeight: '500px', width: 'auto' }} width="839" height="565" data-path="images/inline-checkout/cover.png" />
   </Frame>

   ### Lợi Ích

   * **Hoàn toàn tích hợp**: Tạo trải nghiệm thanh toán hòa quyện hoàn hảo với trang web của bạn
   * **Tóm tắt đơn hàng tùy chỉnh**: Xây dựng giao diện người dùng tùy chỉnh đồng bộ với thanh toán theo thời gian thực
   * **Kiểm soát tối đa**: Kiểm soát hoàn toàn bố cục và thiết kế thanh toán
   * **Tuân thủ PCI**: Dodo Payments xử lý an toàn tất cả thông tin thanh toán nhạy cảm
   * **Đồng bộ theo thời gian thực**: Sử dụng sự kiện SDK để giữ cho giao diện người dùng của bạn đồng bộ với trạng thái thanh toán

   ### Cách Hoạt Động

   Khởi tạo SDK với `displayType: 'inline'` và nhúng thanh toán vào phần tử chứa:

   ```typescript theme={null}
   import { DodoPayments } from "dodopayments-checkout";

   // Initialize the SDK for inline mode
   DodoPayments.Initialize({
     mode: "test",
     displayType: "inline",
     onEvent: (event) => {
       if (event.event_type === "checkout.breakdown") {
         // Update your UI with real-time tax and total calculations
         const breakdown = event.data?.message;
       }
     },
   });

   // Open checkout in a specific container
   DodoPayments.Checkout.open({
     checkoutUrl: "https://test.checkout.dodopayments.com/session/cks_123",
     elementId: "dodo-inline-checkout" // ID of the container element
   });
   ```

   ### Tính Năng Chính

   * **Sự kiện phân tích theo thời gian thực**: Nhận `checkout.breakdown` khi khách hàng nhập thông tin của họ
   * **Tóm tắt đơn hàng tùy chỉnh**: Xây dựng hiển thị giá riêng cập nhật theo thời gian thực
   * **Tích hợp liền mạch**: Khung thanh toán xử lý việc thu tiền trong khi bạn kiểm soát bố cục
   * **Phương thức SDK**: Sử dụng `open()`, `close()`, và `isOpen()` để điều khiển thanh toán một cách có lập trình

   <Check>
     Kết quả: Trải nghiệm thanh toán tích hợp hoàn chỉnh phù hợp với thương hiệu của bạn và cung cấp quyền kiểm soát tối đa đối với luồng thanh toán.
   </Check>

   <Tip>
     Sử dụng thanh toán nội tuyến khi bạn muốn kiểm soát tối đa thiết kế thanh toán. Sử dụng [overlay checkout](/developer-resources/overlay-checkout) để tích hợp nhanh hơn với ít sự thay đổi trên các trang hiện tại.
   </Tip>

   Tìm hiểu thêm: [Hướng Dẫn Thanh Toán Trực Tiếp](/developer-resources/inline-checkout)

2. **Tạo thanh toán, đăng ký và phiên thanh toán bằng phương thức thanh toán hiện có**\
   Tinh giản luồng thanh toán bằng cách sử dụng phương thức thanh toán đã lưu của khách hàng. Tham số `payment_method_id` mới cho phép bạn tạo thanh toán, đăng ký hoặc phiên thanh toán bằng phương thức thanh toán đã lưu trước đó của khách hàng.

   ### Lợi Ích

   * **Thanh toán nhanh hơn**: Bỏ qua việc thu thập phương thức thanh toán cho khách hàng quay lại
   * **Mua hàng một lần**: Kích hoạt mua hàng ngay lập tức với các phương thức thanh toán đã lưu
   * **Quản lý đăng ký**: Dễ dàng tạo đăng ký bằng cách sử dụng các phương thức thanh toán hiện có
   * **Cải thiện tỷ lệ chuyển đổi**: Giảm ma sát thanh toán cho khách hàng lặp lại

   ### Cách Hoạt Động

   Sử dụng `payment_method_id` khi tạo phiên thanh toán, thanh toán hoặc đăng ký:

   <Tabs>
     <Tab title="Checkout Sessions">
       ```javascript theme={null}
       const session = await client.checkoutSessions.create({
         product_cart: [{ product_id: 'pdt_123', quantity: 1 }],
         customer: {
           customer_id: 'cus_123'
         },
         payment_method_id: 'pm_abc123',
         confirm: true
       });
       ```
     </Tab>

     <Tab title="One-Time Payments">
       ```javascript theme={null}
       const payment = await client.payments.create({
         product_cart: [{ product_id: 'pdt_123', quantity: 1 }],
         customer: { customer_id: 'cus_123' },
         billing: { country: 'US' },
         payment_method_id: 'pm_abc123'
       });
       ```
     </Tab>

     <Tab title="Subscriptions">
       ```javascript theme={null}
       const subscription = await client.subscriptions.create({
         customer: { customer_id: 'cus_123' },
         billing: { country: 'US' },
         product_id: 'pdt_subscription',
         quantity: 1,
         payment_method_id: 'pm_abc123'
       });
       ```
     </Tab>
   </Tabs>

   <Warning>
     Khi sử dụng `payment_method_id` trong các phiên thanh toán, `confirm` phải được đặt thành `true` và phải cung cấp `customer_id` hiện có. Phương thức thanh toán sẽ được xác thực về tính hợp lệ theo tiền tệ của khoản thanh toán.
   </Warning>

   <Info>
     Phương thức thanh toán phải thuộc về khách hàng và tương thích với loại tiền thanh toán. Nếu xác thực không thành công, yêu cầu sẽ trả về lỗi.
   </Info>

3. **Thay Đổi Kế Hoạch Đăng Ký Trong Bảng Điều Khiển Với Cập Nhật Ngày Thanh Toán Tiếp Theo**

   Quản lý các kế hoạch đăng ký trực tiếp từ bảng điều khiển với kiểm soát nâng cao. Bạn giờ đây có thể thay đổi các kế hoạch đăng ký và cập nhật ngày thanh toán tiếp theo trong một hành động duy nhất, mang lại cho bạn sự linh hoạt hoàn toàn trong việc quản lý đăng ký.

   <Frame>
     <img src="https://mintcdn.com/dodopayments/vqwKWj9TjLp0w5lS/images/changelog/subscription-plan-changes.png?fit=max&auto=format&n=vqwKWj9TjLp0w5lS&q=85&s=23d2cf888e9d70316e3a110c10bb77c6" alt="Thay đổi gói đăng ký trong bảng điều khiển" style={{ maxHeight: '500px', width: 'auto' }} width="1909" height="962" data-path="images/changelog/subscription-plan-changes.png" />
   </Frame>

   ### Tính Năng Bảng Điều Khiển

   * **Thay đổi kế hoạch**: Nâng cấp hoặc hạ cấp đăng ký chỉ với một cú nhấp chuột
   * **Kiểm soát ngày thanh toán**: Cập nhật ngày thanh toán tiếp theo khi thay đổi kế hoạch
   * **Tùy chọn phân chia**: Chọn cách xử lý phân chia khi thay đổi kế hoạch
   * **Xem trước trực quan**: Xem chính xác cách thay đổi kế hoạch ảnh hưởng đến thanh toán trước khi xác nhận

   ### Trường Hợp Sử Dụng

   * **Hỗ trợ khách hàng**: Nhanh chóng điều chỉnh kế hoạch đăng ký theo yêu cầu của khách hàng
   * **Nâng cấp khuyến mãi**: Tạm thời nâng cấp khách hàng với các ngày thanh toán cụ thể
   * **Di chuyển kế hoạch**: Chuyển tiếp mượt mà khách hàng giữa các cấp đăng ký
   * **Căn chỉnh thanh toán**: Căn chỉnh ngày thanh toán giữa nhiều đăng ký

   <Check>
     Kết quả: Kiểm soát toàn diện việc quản lý đăng ký ngay từ bảng điều khiển, giảm nhu cầu gọi API cho các điều chỉnh đăng ký phổ biến.
   </Check>

   <Tip>
     Sử dụng bảng điều khiển để thay đổi gói đăng ký nhanh chóng và API để quản lý đăng ký theo cách lập trình trong ứng dụng của bạn.
   </Tip>

4. **Liên Kết Ngắn Cho URL Thanh Toán**\
   Tạo các liên kết thanh toán ngắn gọn, dễ chia sẻ hơn với tính năng liên kết ngắn mới của chúng tôi. Các liên kết ngắn cung cấp URL thanh toán rút gọn với các slug tùy chỉnh, giúp dễ dàng chia sẻ với khách hàng hoặc nhúng vào trang web của bạn.

   <Frame>
     <img src="https://mintcdn.com/dodopayments/vqwKWj9TjLp0w5lS/images/changelog/short-links.png?fit=max&auto=format&n=vqwKWj9TjLp0w5lS&q=85&s=c5361cb37520128513ed5e3b1111fbb1" alt="Tính năng liên kết ngắn cho URL thanh toán" style={{ maxHeight: '500px', width: 'auto' }} width="1915" height="962" data-path="images/changelog/short-links.png" />
   </Frame>

   ### Lợi Ích

   * **URL sạch hơn**: Thay thế các URL thanh toán dài bằng các liên kết ngắn, có thương hiệu
   * **Tăng cường niềm tin**: Các liên kết trông chuyên nghiệp giúp xây dựng sự tự tin của khách hàng
   * **Chia sẻ dễ dàng hơn**: URL đơn giản hoàn hảo cho SMS, email hoặc mạng xã hội
   * **Slug tùy chỉnh**: Tạo các liên kết ngắn dễ nhớ, có thương hiệu cho sản phẩm của bạn

   ### Cách Hoạt Động

   Kích hoạt liên kết ngắn khi tạo phiên thanh toán hoặc liên kết thanh toán:

   <Tabs>
     <Tab title="Checkout Sessions">
       ```javascript theme={null}
       const session = await client.checkoutSessions.create({
         product_cart: [{ product_id: 'pdt_123', quantity: 1 }],
         short_link: true,
         return_url: 'https://yourapp.com/success'
       });
       ```
     </Tab>

     <Tab title="Payment Links">
       ```javascript theme={null}
       const payment = await client.payments.create({
         product_cart: [{ product_id: 'pdt_123', quantity: 1 }],
         short_link: true,
         return_url: 'https://yourapp.com/success'
       });
       ```
     </Tab>
   </Tabs>

   <Check>
     Kết quả: Một liên kết thanh toán được rút gọn dễ chia sẻ hơn và chuyên nghiệp hơn, cải thiện tỷ lệ chuyển đổi và sự tin tưởng của khách hàng.
   </Check>

   <Info>
     Liên kết ngắn được quản lý trong bảng điều khiển của bạn và có thể xem qua [List Short Links API](/api-reference/products/get-products-short-links).
   </Info>

5. **`redirect_immediately` Flag - Bỏ qua trang thành công sau thanh toán**\
   Điều khiển luồng thanh toán với cờ `redirect_immediately` mới. Khi bật, khách hàng sẽ được chuyển hướng ngay sau khi hoàn tất thanh toán, bỏ qua trang thành công mặc định để có trải nghiệm nhanh hơn và tối ưu hơn.

   ### Trường Hợp Sử Dụng

   * **Quy trình thanh toán nhanh hơn**: Giảm ma sát bằng cách bỏ qua các trang trung gian
   * **Trang thành công tùy chỉnh**: Chuyển hướng trực tiếp đến trang thành công có thương hiệu của bạn
   * **Tối ưu hóa di động**: Cải thiện trải nghiệm thanh toán trên di động với các chuyển hướng ngay lập tức
   * **Thanh toán nhúng**: Tích hợp liền mạch với các quy trình thanh toán chồng lên hoặc nhúng

   ### Cách Hoạt Động

   Kích hoạt chuyển hướng ngay lập tức trong các phiên thanh toán, thanh toán hoặc đăng ký:

<Tabs>
  <Tab title="Checkout Sessions">
    ```javascript theme={null}
    const session = await client.checkoutSessions.create({
      product_cart: [{ product_id: 'pdt_123', quantity: 1 }],
      feature_flags: {
        redirect_immediately: true
      },
      return_url: 'https://yourapp.com/success'
    });
    ```
  </Tab>

  <Tab title="One-Time Payments">
    ```javascript theme={null}
    const payment = await client.payments.create({
      product_cart: [{ product_id: 'pdt_123', quantity: 1 }],
      redirect_immediately: true,
      return_url: 'https://yourapp.com/success'
    });
    ```
  </Tab>

  <Tab title="Subscriptions">
    ```javascript theme={null}
    const subscription = await client.subscriptions.create({
      customer: { customer_id: 'cus_123' },
      billing: { country: 'US' },
      product_id: 'pdt_subscription',
      quantity: 1,
      redirect_immediately: true,
      return_url: 'https://yourapp.com/success'
    });
    ```
  </Tab>
</Tabs>

<Tip>
  Sử dụng `redirect_immediately: true` khi bạn có trang thành công tùy chỉnh mang đến trải nghiệm người dùng tốt hơn trang thành công thanh toán mặc định.
</Tip>

<Note>
  Khi `redirect_immediately` được bật, khách hàng sẽ được chuyển hướng đến `return_url` của bạn ngay sau khi hoàn tất thanh toán, hoàn toàn bỏ qua trang thành công mặc định.
</Note>

6. **Đăng Ký Theo Yêu Cầu - Có Sẵn Cho Tất Cả Doanh Nghiệp**\
   Đăng ký theo yêu cầu hiện đã được kích hoạt cho tất cả các doanh nghiệp, mang lại cho bạn kiểm soát thanh toán linh hoạt cho các dịch vụ dựa trên sử dụng và đo lường.

   ### Điều Này Cho Phép

   * **Thanh toán dựa trên sử dụng**: Tạo đăng ký và tính phí khách hàng dựa trên mức sử dụng thực tế
   * **Chu kỳ thanh toán linh hoạt**: Tính phí khách hàng theo yêu cầu thay vì theo khoảng thời gian cố định
   * **Dịch vụ đo lường**: Hoàn hảo cho việc sử dụng API, lưu trữ, thời gian tính toán và các tài nguyên đo lường khác
   * **Kiểm soát tính phí thủ công**: Tạo các khoản phí thủ công khi cần, mang lại cho bạn toàn quyền kiểm soát thời gian thanh toán

   ### Cách Hoạt Động

   Tạo một đăng ký theo yêu cầu và tính phí khách hàng khi cần:

   ```javascript theme={null}
   // Create an on-demand subscription
   const subscription = await client.subscriptions.create({
     customer: { customer_id: 'cus_123' },
     billing: { country: 'US' },
     product_id: 'pdt_api_access',
     quantity: 1,
     on_demand: { mandate_only: true }
   });

   // Charge the customer when usage occurs
   await client.subscriptions.charge(subscription.subscription_id, {
     product_price: 4900,
     product_currency: 'USD',
     product_description: 'API usage for September: 1,000 requests'
   });
   ```

   <Check>
     Kết quả: Kiểm soát hoàn toàn thời điểm và số tiền thu của khách hàng, lý tưởng cho mô hình kinh doanh dựa trên mức sử dụng.
   </Check>

   Tìm hiểu thêm: [Đăng Ký Theo Yêu Cầu](/developer-resources/ondemand-subscriptions)

7. **Sửa Lỗi Chung và Cải Tiến**\
   Phiên bản này bao gồm các cải tiến hiệu suất, làm bóng giao diện người dùng và giải quyết các lỗi nhỏ để có trải nghiệm đáng tin cậy và liền mạch hơn.
