> ## 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.

# Quyền lợi GitHub

> Cấp cho khách hàng quyền cộng tác viên trên một repository GitHub riêng tư ở cấp quyền bạn chọn và tự động thu hồi khi hủy.

<Info>
  Quyền lợi GitHub thêm khách hàng trả phí làm cộng tác viên trên một repository riêng tư. Bạn chọn cấp quyền (`pull`, `push`, `triage`, `maintain` hoặc `admin`) và Dodo Payments xử lý lời mời, theo dõi việc chấp nhận và xóa quyền khi hủy.
</Info>

## Nội dung được cung cấp

* Khách hàng được mời vào repository GitHub của bạn thông qua OAuth flow liên kết tài khoản GitHub của họ với giao dịch mua.
* Sau khi chấp nhận, GitHub cấp cho họ quyền cộng tác viên ở cấp quyền đã cấu hình.
* Khi hủy, hoàn tiền hoặc thu hồi thủ công, cộng tác viên sẽ bị xóa.

Các trường hợp sử dụng phổ biến gồm sản phẩm có mã nguồn cung cấp, template trả phí, repository mã nguồn khóa học và SDK client giới hạn quyền truy cập.

## Kết nối GitHub

<Steps>
  <Step title="Open Entitlements">
    Trong dashboard Dodo Payments của bạn, đi đến **Entitlements** và nhấp **+** để bắt đầu tạo entitlement mới.
  </Step>

  <Step title="Pick GitHub">
    Chọn **GitHub Access** làm integration. Nếu GitHub chưa được kết nối, bạn sẽ được nhắc **Connect GitHub**.

    <Frame caption="Connect GitHub prompt before the install handoff.">
      <img src="https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/connect-prompt.png?fit=max&auto=format&n=do-W-dMDGVB_xzr_&q=85&s=8a836c94099accdb2b3dc31c22d0e11b" alt="Bảng entitlement mới yêu cầu merchant kết nối GitHub" style={{ maxHeight: '500px', width: 'auto' }} width="2000" height="1129" data-path="images/entitlements/github/connect-prompt.png" />
    </Frame>

    Nhấp để tiếp tục sẽ mở GitHub trong tab mới. Đăng nhập, sau đó cài đặt GitHub App của Dodo Payments trên tổ chức hoặc tài khoản người dùng sở hữu repository. Bạn có thể cấp quyền truy cập cho **all repositories** hoặc chỉ những repository bạn muốn giới hạn quyền truy cập.

    <Frame caption="GitHub Install & Authorize page — choose which repositories the app can manage.">
      <img src="https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/oauth-install.png?fit=max&auto=format&n=do-W-dMDGVB_xzr_&q=85&s=0788d3f6e9df8a087de824967f09c215" alt="Trang Install and Authorize của GitHub với các tùy chọn All repositories và Only select repositories" style={{ maxHeight: '500px', width: 'auto' }} width="2000" height="1120" data-path="images/entitlements/github/oauth-install.png" />
    </Frame>

    Khi GitHub chuyển hướng trở lại, bạn sẽ thấy xác nhận tài khoản đã được kết nối.

    <Frame caption="Account connected — return to the Dodo Payments dashboard to continue.">
      <img src="https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/connected.png?fit=max&auto=format&n=do-W-dMDGVB_xzr_&q=85&s=ee3c87c3b3917f473ff3d376dfdc6494" alt="Trang xác nhận GitHub Access đã kết nối thành công" style={{ maxHeight: '500px', width: 'auto' }} width="2000" height="1137" data-path="images/entitlements/github/connected.png" />
    </Frame>
  </Step>

  <Step title="Pick a repository and permission">
    Quay lại dashboard, chọn **repository** mà entitlement sẽ cấp quyền truy cập và chọn cấp **permission**. Bộ chọn repository chỉ hiển thị những repository mà GitHub App có quyền truy cập. Đặt **name** cho entitlement và nhấp **Create Entitlement**.

    <Frame caption="Creating a GitHub entitlement. Pick the repository and the permission you want customers to receive.">
      <img src="https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/create.png?fit=max&auto=format&n=do-W-dMDGVB_xzr_&q=85&s=722e925ec5158a5d16c58213132ccb9d" alt="Biểu mẫu entitlement GitHub với GitHub Access đã kết nối, bộ chọn repository, menu thả xuống permission và trường name" style={{ maxHeight: '500px', width: 'auto' }} width="2000" height="1130" data-path="images/entitlements/github/create.png" />
    </Frame>
  </Step>

  <Step title="Save the entitlement">
    Lưu và gắn entitlement vào bất kỳ sản phẩm nào. Khách hàng mua sản phẩm đó sẽ nhận được lời mời GitHub khi entitlement được cung cấp.
  </Step>
</Steps>

## Các cấp quyền

Các quyền repository tiêu chuẩn của GitHub được áp dụng:

| Permission | Phù hợp nhất cho                                                                          |
| ---------- | ----------------------------------------------------------------------------------------- |
| `pull`     | Quyền chỉ đọc. Khách hàng có thể clone, fetch và xem repo.                                |
| `triage`   | Quyền đọc cùng khả năng quản lý issue và pull request.                                    |
| `push`     | Quyền đọc + ghi. Khách hàng có thể push branch và mở pull request.                        |
| `maintain` | Quyền push cùng khả năng quản lý cài đặt repository (không bao gồm các cài đặt nhạy cảm). |
| `admin`    | Toàn quyền kiểm soát repository. Hãy sử dụng thận trọng.                                  |

<Warning>
  Cấp **least privilege** phù hợp với trường hợp sử dụng của bạn. Hầu hết các tình huống cung cấp nội dung trả phí chỉ cần `pull`.
</Warning>

## Quy trình của khách hàng

1. Khách hàng hoàn tất checkout.
2. Dodo Payments tạo một grant ở trạng thái `pending` cùng một `oauth_url` để khách hàng liên kết tài khoản GitHub.
3. Khách hàng cấp quyền thông qua liên kết trong email hoặc customer portal.
4. Dodo Payments mời tài khoản GitHub của khách hàng vào repository với permission đã cấu hình. Grant chuyển sang `delivered` khi lời mời được tạo.
5. Nếu subscription bị hủy, hoàn tiền hoặc thu hồi, khách hàng sẽ bị xóa khỏi danh sách cộng tác viên.

## Cấu hình bắt buộc

| Field        | Bắt buộc | Mô tả                                                                                             |
| ------------ | -------- | ------------------------------------------------------------------------------------------------- |
| `target_id`  | Có       | Repository để mời khách hàng vào. Bộ chọn repository trong dashboard sẽ điền giá trị này cho bạn. |
| `permission` | Có       | Một trong các giá trị `pull`, `push`, `triage`, `maintain`, `admin`.                              |

## Tạo qua API

<CodeGroup>
  ```typescript TypeScript theme={null} theme={null}
  const entitlement = await client.entitlements.create({
    name: 'Code Share Repository',
    integration_type: 'github',
    integration_config: {
      target_id: 'acme/private-sdk',
      permission: 'pull',
    },
  });
  ```

  ```python Python theme={null} theme={null}
  client.entitlements.create(
      name="Code Share Repository",
      integration_type="github",
      integration_config={
          "target_id": "acme/private-sdk",
          "permission": "pull",
      },
  )
  ```

  ```go Go theme={null} theme={null}
  client.Entitlements.New(ctx, dodopayments.EntitlementNewParams{
    Name:            dodopayments.F("Code Share Repository"),
    IntegrationType: dodopayments.F(dodopayments.EntitlementIntegrationTypeGithub),
    IntegrationConfig: dodopayments.F[dodopayments.IntegrationConfigUnionParam](
      dodopayments.IntegrationConfigGitHubConfigParam{
        TargetID:   dodopayments.F("acme/private-sdk"),
        Permission: dodopayments.F("pull"),
      },
    ),
  })
  ```
</CodeGroup>

## Webhooks

Các [webhook events `entitlement_grant.*` tiêu chuẩn](/developer-resources/webhooks/intents/entitlement-grant) bao quát quy trình GitHub:

* `entitlement_grant.created` bao gồm `oauth_url` để cấp quyền GitHub.
* `entitlement_grant.delivered` được kích hoạt khi lời mời cộng tác viên được tạo.
* `entitlement_grant.failed` được kích hoạt cùng `error_code: "github_permission_denied"` (hoặc tương tự) nếu GitHub App mất quyền truy cập vào repository.

## Khắc phục sự cố

<AccordionGroup>
  <Accordion title="Repository picker is empty">
    GitHub App của Dodo Payments phải được cài đặt trên tổ chức hoặc người dùng sở hữu repository. Mở **Entitlements → Integrations → GitHub** và cài đặt lại app, đảm bảo cấp quyền truy cập cho các repository liên quan.
  </Accordion>

  <Accordion title="Grant fails with permission_denied">
    Bản cài đặt GitHub App không còn quyền truy cập vào repository hoặc repository đã được đổi tên/chuyển giao. Cấp lại quyền truy cập cho app và lần regrant tiếp theo sẽ thành công.
  </Accordion>

  <Accordion title="Customer hasn't accepted the invite">
    Khách hàng phải chấp nhận lời mời GitHub từ trang thông báo của họ hoặc bằng cách nhấp vào liên kết trong email. Cho đến khi chấp nhận, họ vẫn ở trạng thái "invited" nhưng không thể clone repo. Grant vẫn ở trạng thái `delivered` theo góc nhìn của Dodo Payments; lời mời là thứ chúng tôi phát hành.
  </Accordion>
</AccordionGroup>
