> For the complete documentation index, see [llms.txt](https://developers-apps-in-toss.toss.im/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers-apps-in-toss.toss.im/documentation/api-and-sdk-zh/sdk/domains-api/tosspay/tosspay.authorizesubscription.md).

# TossPay.authorizeSubscription

> 函数式 API `requestTossPayPaysBilling`也可以用来实现同样的功能。函数式 API 与 v2 相同 `{ params: { wrappedToken } }` 接收这种形式的参数，如果是不支持的版本，则不报错，而是先输出警告日志后 `undefined`会返回。

### 功能说明

会打开 TossPay 定期支付窗口并进行用户认证。认证完成后返回是否成功。

实际的支付处理需要在认证成功后由服务器另外进行。

Toss应用 **5.256.0** 可在以上版本中使用。调用前 `TossPay.authorizeSubscription.isSupported()`可通过它来确认是否支持。在不支持的版本中调用时， `UNSUPPORTED_APP_VERSION` 会发生错误。

### 类型

```ts
TossPay.authorizeSubscription(params: RequestTossPayPaysBillingOptions): Promise<RequestTossPayPaysBillingResult>;
```

**参数**

```ts
type RequestTossPayPaysBillingOptions = {
  /** 这是定期支付的包装令牌。 */
  wrappedToken: string;
};
```

**响应**

```ts
type RequestTossPayPaysBillingResult = {
  /** 是否认证成功。 */
  success: boolean;
  /** 认证失败时的原因。 */
  reason?: string;
};
```

### 错误代码

错误代码是 catch 到的错误的 `error.code` 值。

| 代码                        | 说明                                                                                                                           |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| `UNSUPPORTED_APP_VERSION` | 如果当前运行的 Toss App 版本不支持此功能，则调用后会立即发生。 `TossPay.authorizeSubscription.isSupported()`请先通过它确认，发生时 `error.message`请向用户显示（更新提示文案）。 |

### 示例代码

```js
import { TossPay } from "@apps-in-toss/web-framework";

async function handleBilling() {
  try {
    if (!TossPay.authorizeSubscription.isSupported()) {
      console.log("当前应用版本不支持定期支付认证。");
      return;
    }

    // 实际实现时，请替换为负责创建定期支付的 API 端点。
    const { wrappedToken } = await fetch("/my-api/billing/create").then((res) =>
      res.json(),
    );

    const { success, reason } = await TossPay.authorizeSubscription({
      wrappedToken,
    });

    if (success) {
      // 实际实现时，请替换为执行定期支付的 API 端点。
      await fetch("/my-api/billing/execute", {
        method: "POST",
        body: JSON.stringify({ wrappedToken }),
        headers: { "Content-Type": "application/json" },
      });
    } else {
      console.log("认证失败：", reason);
    }
  } catch (error) {
    console.error("定期支付认证过程中发生错误：", error);
  }
}

document
  .querySelector("#billing-button")
  .addEventListener("click", handleBilling);
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://developers-apps-in-toss.toss.im/documentation/api-and-sdk-zh/sdk/domains-api/tosspay/tosspay.authorizesubscription.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
