# Ví dụ theo ngôn ngữ backend

DRM-X 6.0 Name PHP, ASP.NET Core, Node.jsPython, Java, Go và Ruby sử dụng một phiên chạy Playback bảo mật API.

Quy trình cấp quyền phát video

Backend quyết định ai được xem. DRM-X cung cấp thông tin cấp quyền phát. Trình phát dùng thông tin đó để yêu cầu giấy phép DRM.

- 01**Người xem**

Đăng nhập vào dịch vụ của bạn và yêu cầu xem video.

- 02**Backend của bạn**

Kiểm tra giao dịch mua, gói đăng ký hoặc quyền xem khác của người dùng.

- 03**DRM-X**

Áp dụng các quy tắc đã chọn và trả về cấu hình cùng thông tin cấp quyền phát.

- 04**Trình phát**

Dùng thông tin cấp quyền nhận được để yêu cầu giấy phép DRM cần thiết cho việc phát video.

Hậu phương của bạn quyết định truy cập; DRM-X Áp dụng chính sách đã ký. DRM Bằng lái đi theo đường giao hàng riêng.

## Yêu cầu phụ thuộc ngôn ngữ[#](#the-language-independent-request)

```
POST /api/v1/playback/environments/{siteId}/sessions
X-DRMX-Client-Id: {siteKey}
X-DRMX-Client-Secret: {accessKey}

{
  "contentId": "trusted-content-id",
  "contentType": "vod",
  "drmSystem": "widevine",
  "subject": "authenticated-user-id",
  "sessionId": "new-id-for-this-attempt",
  "licensePolicyTemplate": "multi-tier-standard",
  "useEnvironmentDefaults": true
}
```



## Chọn hậu phương[#](#choose-your-backend)

### PHP 8.2+

Dùng cURL với JSON Ngoại lệ, HTTPS-Chỉ có giao thức, thời hạn 12 giây, và xử lý phản ứng rõ ràng. PHP Ứng dụng bao gồm đăng nhập, phúc lợi xã hội, trực tiếp, hiệu quả, chẩn đoán, và phát hành.

[Chạy PHP mẫu](https://developer.drm-x.com/php-sample/)

### ASP.NET Core

Dùng các tùy chọn đã cung cấp hợp lệ hóa, gõ `HttpClient`hủy bỏ, `JsonContent`và trợ lý điểm kết thúc. Giá trị cấu hình rõ ràng trong mã cho lần chạy đầu tiên với các lựa chọn quản lý bí mật bình luận.

### Node.js / TypeScript

Dùng `fetch` có `AbortSignal.timeout`cấu hình chỉ máy phục vụ, trả lời hợp lệ hoá giản đồ, và `Cache-Control: no-store`.

### Python 3. 11+

Dùng a HTTPS Khách hàng có thời hạn rõ ràng, JSON Hàng loạt hóa, kiểm tra tình trạng, và tiêm thuốc bí mật từ thời gian sản xuất.

### Java 21+

Dùng `HttpClient` với yêu cầu thời gian ra, chính xác là các thư ký, xác nhận JSONvà không có chuyển hướng đến những nguồn gốc không đáng tin cậy.

### Đi hay Ruby

Dùng ngữ cảnh/ thời hạn yêu cầu, chính xác JSON Các lĩnh vực, kiểm tra tình trạng nghiêm ngặt, và không bao giờ in thẻ ủy nhiệm hoặc phát lại thành công cơ thể phản ứng.



## Các giá trị kinh doanh sơ đồ an toàn[#](#map-business-values-safely)

| Yêu cầu lĩnh vực | Nguồn | 
| --- | --- |

| `contentId` | Bản đồ máy phục vụ từ danh mục của bạn sang một tập tin được bảo vệ đã xuất ra. | 

| `subject` | Người dùng xác thực của bạn ID; không bao giờ có danh tính trình duyệt. | 

| `licensePolicyTemplate` | Máy chủ lập bản đồ từ kế hoạch tin cậy, cho thuê, tất nhiên, hoặc thông tin nội dung. | 

| `drmSystem` | Kiểm tra khả năng khách hàng đã kiểm tra, giới hạn DRM hệ thống hỗ trợ cho sự kết hợp của bạn. | 

| `sessionId` | Nhận diện mới được tạo ra bởi hậu phương của bạn cho nỗ lực phát lại này. | 



## Dùng giá trị mã trực tiếp chỉ cho lần chạy đầu[#](#use-direct-code-values-only-for-the-first-run)

Các mẫu thử cố tình làm cho các thiết lập nhỏ dễ dàng tìm. Đối với sản xuất, uncomment môi trường ghi chép/người quản lý tài liệu thay thế, loại bỏ các bí mật cứng, xoay khách hàng, và cấp vốn chỉ `license-tokens:create`.



& Hướng dẫn máy phục vụ 

## Gọi cùng một điểm từ các ngôn ngữ hậu phương phổ biến[#](#call-the-same-endpoint-from-popular-backend-languages)



Trong mỗi ví dụ, xác thực người xem và kiểm tra quyền ưu tiên trước cuộc gọi này.PHP vàASP.NET Hiển thị các giá trị mã trực tiếp cho lần chạy đầu tiên; di chuyển cácAccess Key đến một bộ quản lý bí mật để sản xuất và không bao giờ đăng nhập yêu cầu đầu trang hoặc phản ứng thành công cơ thể.

PHP 8.2+



```
$drmx = [
    'platformApi' => 'https://api6.drm-x.com',
    'siteId' => 'your-development-environment-uuid',
    'siteKey' => 'drmx_your_environment_scoped_client_id',
    'accessKey' => 'paste-your-one-time-access-key',
];

$payload = [
    'contentId' => $trustedContentId,
    'contentType' => 'vod',
    'drmSystem' => $drmSystem,
    'subject' => $authenticatedUserId,
    'playbackMode' => 'streaming',
    'licensePolicyTemplate' => 'multi-tier-standard',
    'useEnvironmentDefaults' => true,
    'maximumQualityTier' => 'auto',
];

$curl = curl_init($drmx['platformApi'] . '/api/v1/playback/environments/' .
    rawurlencode($drmx['siteId']) . '/sessions');
curl_setopt_array($curl, [
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode($payload, JSON_THROW_ON_ERROR),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 12,
    CURLOPT_PROTOCOLS => CURLPROTO_HTTPS,
    CURLOPT_HTTPHEADER => [
        'Accept: application/json',
        'Content-Type: application/json',
        'X-DRMX-Client-Id: ' . $drmx['siteKey'],
        'X-DRMX-Client-Secret: ' . $drmx['accessKey'],
    ],
]);
$body = curl_exec($curl);
```



Bắt đầu từ mẫu hoàn chỉnh có thể thực hiện được; nó bao gồm đăng nhập, quyền lợi, chế độ đặc trưng trực tiếp, chế độ thời gian biểu hiệu, chẩn đoán bị hạn chế, và giải phóng xử lý.

Node.js / TypeScript



```
const response = await fetch(
  `${process.env.DRMX_PLATFORM_API}/api/v1/playback/environments/${
    encodeURIComponent(process.env.DRMX_PLAYBACK_SITE_ID!)
  }/sessions`,
  {
    method: "POST",
    headers: {
      "Accept": "application/json",
      "Content-Type": "application/json",
      "X-DRMX-Client-Id": process.env.DRMX_PLAYBACK_SITE_KEY!,
      "X-DRMX-Client-Secret": process.env.DRMX_PLAYBACK_ACCESS_KEY!,
    },
    body: JSON.stringify({
      contentId: trustedContentId,
      contentType: "vod",
      drmSystem,
      subject: authenticatedUser.id,
      playbackMode: "streaming",
      licensePolicyTemplate: "multi-tier-standard",
      useEnvironmentDefaults: true,
      maximumQualityTier: "auto",
    }),
    signal: AbortSignal.timeout(12_000),
  },
);
const playback = await response.json();
```

Python 3. 11+



```
import json, os, urllib.request

payload = json.dumps({
    "contentId": trusted_content_id,
    "contentType": "vod",
    "drmSystem": drm_system,
    "subject": authenticated_user_id,
    "playbackMode": "streaming",
    "licensePolicyTemplate": "multi-tier-standard",
    "useEnvironmentDefaults": True,
    "maximumQualityTier": "auto",
}).encode("utf-8")

url = (
    os.environ["DRMX_PLATFORM_API"] +
    "/api/v1/playback/environments/" +
    os.environ["DRMX_PLAYBACK_SITE_ID"] + "/sessions"
)
request = urllib.request.Request(url, data=payload, method="POST", headers={
    "Accept": "application/json",
    "Content-Type": "application/json",
    "X-DRMX-Client-Id": os.environ["DRMX_PLAYBACK_SITE_KEY"],
    "X-DRMX-Client-Secret": os.environ["DRMX_PLAYBACK_ACCESS_KEY"],
})
with urllib.request.urlopen(request, timeout=12) as response:
    playback = json.load(response)
```

ASP.NET Core / C#



```
builder.Services.AddDrmXPlayback(options =>
{
    options.PlatformApi = "https://api6.drm-x.com";
    options.SiteId = "your-development-environment-uuid";
    options.SiteKey = "drmx_your_environment_scoped_client_id";
    options.AccessKey = "paste-your-one-time-access-key";
    options.ApplicationId = "customer-aspnet-website";
    options.LicensePolicyTemplate = "multi-tier-standard";
});

var payload = new {
    contentId = trustedContentId,
    contentType = "vod",
    drmSystem,
    subject = authenticatedUserId,
    playbackMode = "streaming",
    licensePolicyTemplate = "multi-tier-standard",
    useEnvironmentDefaults = true,
    maximumQualityTier = "auto"
};

using var request = new HttpRequestMessage(HttpMethod.Post,
    $"{platformApi}/api/v1/playback/environments/{Uri.EscapeDataString(siteId)}/sessions") {
    Content = JsonContent.Create(payload)
};
request.Headers.Add("X-DRMX-Client-Id", siteKey);
request.Headers.Add("X-DRMX-Client-Secret", accessKey);
using var response = await httpClient.SendAsync(request, cancellationToken);
```

Java 21 / Spring Services



```
String payload = objectMapper.writeValueAsString(Map.of(
    "contentId", trustedContentId,
    "contentType", "vod",
    "drmSystem", drmSystem,
    "subject", authenticatedUserId,
    "playbackMode", "streaming",
    "licensePolicyTemplate", "multi-tier-standard",
    "useEnvironmentDefaults", true,
    "maximumQualityTier", "auto"
));

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create(platformApi + "/api/v1/playback/environments/" +
        URLEncoder.encode(siteId, StandardCharsets.UTF_8) + "/sessions"))
    .timeout(Duration.ofSeconds(12))
    .header("Accept", "application/json")
    .header("Content-Type", "application/json")
    .header("X-DRMX-Client-Id", siteKey)
    .header("X-DRMX-Client-Secret", accessKey)
    .POST(HttpRequest.BodyPublishers.ofString(payload))
    .build();
HttpResponse<String> response = client.send(request,
    HttpResponse.BodyHandlers.ofString());
```

Go 1. 23+



```
payload, _ := json.Marshal(map[string]any{
    "contentId": trustedContentID,
    "contentType": "vod",
    "drmSystem": drmSystem,
    "subject": authenticatedUserID,
    "playbackMode": "streaming",
    "licensePolicyTemplate": "multi-tier-standard",
    "useEnvironmentDefaults": true,
    "maximumQualityTier": "auto",
})

url := platformAPI + "/api/v1/playback/environments/" +
    url.PathEscape(siteID) + "/sessions"
req, _ := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(payload))
req.Header.Set("Accept", "application/json")
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-DRMX-Client-Id", siteKey)
req.Header.Set("X-DRMX-Client-Secret", accessKey)
response, err := httpClient.Do(req)
```

Ruby 3. 3+



```
uri = URI("#{ENV.fetch('DRMX_PLATFORM_API')}/api/v1/playback/environments/" \
          "#{ERB::Util.url_encode(ENV.fetch('DRMX_PLAYBACK_SITE_ID'))}/sessions")
request = Net::HTTP::Post.new(uri)
request['Accept'] = 'application/json'
request['Content-Type'] = 'application/json'
request['X-DRMX-Client-Id'] = ENV.fetch('DRMX_PLAYBACK_SITE_KEY')
request['X-DRMX-Client-Secret'] = ENV.fetch('DRMX_PLAYBACK_ACCESS_KEY')
request.body = JSON.generate(
  contentId: trusted_content_id,
  contentType: 'vod',
  drmSystem: drm_system,
  subject: authenticated_user_id,
  playbackMode: 'streaming',
  licensePolicyTemplate: 'multi-tier-standard',
  useEnvironmentDefaults: true,
  maximumQualityTier: 'auto'
)
response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(request) }
```

<!-- Canonical: https://docs.drm-x.com/vi/integrations/backend-languages -->
<!-- Language: vi -->
