保利威文档中心

幫助中心

觀看條件 - 付費觀看

更新時間:2025-02-28 14:41:01

一、設定資訊

1.1 付費觀看條件設定資訊

Interface 介面: AuthSettingItemPay

屬性名 說明 型別
authType 條件類型 Pay
enabled 是否啟用 null | YN
payAuthTips 歡迎標題 string
price 觀看價格 number
payEntryText 入口文字 null | string
trialWatchEnabled 試看開關 YN
trialWatchTime 試看時長,單位:分鐘 number

二、使用方式

2.1 取得付費觀看的支付資訊

用於取得觀眾進行付費觀看的支付資訊,如:PC 端的支付 QR Code、微信 H5 的微信支付簽名等,呼叫後可根據支付 id payId 查詢觀眾的付費狀態。

Api 方法: getAuthPayData(): Promise<CommonResult<AuthPayFailReason, AuthPayData>>

回傳值說明: 支付資料,Promise<CommonResult<AuthPayFailReason, AuthPayData>> 型別

範例:

const { success, ...payData } = await watchCore.auth.getAuthPayData();
if(!success) return
console.log('支付 id', payData.payId);
console.log('微信支付地址', payData.codeUrl); // PC 端下使用
console.log('微信支付二维码图片地址', payData.qrcodeUrl); // PC 端下使用
console.log('微信 H5 支付签名', payData.wxPaySignData); // 微信 H5 下使用

2.2 取得付費觀看的支付狀態

當呼叫 getAuthPayData 後,根據回傳的 payId 查詢支付狀態,回傳 true 時表示支付成功,隨後即可進入觀看頁。

Api 方法: checkPayStatus(payId?: string): Promise<boolean>

參數說明:

  • payId:支付 id,string 型別,選傳

回傳值說明: 是否支付成功,Promise<boolean> 型別

範例:

// 获取支付数据
const payData = await watchCore.auth.getAuthPayData();
// 检查支付状态
const payStatus = await watchCore.auth.checkPayStatus(payData.payId);
// 支付成功
if (payStatus) {
  toast.success('支付成功');
  handleAuthVerifySuccess({
    success: true,
    authType: AuthType.Pay,
  });
}

2.3 取得微信掃碼觀看資訊

已付費過的觀眾可以透過微信掃描 QR Code 直接進入觀看頁,無需二次支付,透過該方法取得掃碼資訊,呼叫後可根據記錄 id logId 查詢觀眾的掃碼狀態。

Api 方法: getWechatPayCheckData(): Promise<AuthWechatPayCheckData>

回傳值說明: 微信掃碼觀看資訊,Promise<AuthWechatPayCheckData> 型別,詳細型別說明如下

屬性名 說明 型別
logId 記錄 id string
codeUrl 微信 QR Code 內容 string
qrcodeUrl QR Code 圖片位址 string

範例:

const wechatQrcodeData = await watchCore.auth.getWechatPayCheckData();
console.log('记录 id', wechatQrcodeData.logId);
console.log('微信扫描二维码图片地址', wechatQrcodeData.qrcodeUrl);
console.log('二维码内容', wechatQrcodeData.codeUrl);

2.4 取得微信掃碼觀看狀態

當呼叫 getWechatPayCheckData 後,根據回傳的 logId 查詢支付狀態,回傳 true 時表示使用已支付的微信掃碼,隨後即可進入觀看頁。

Api 方法: checkWechatPayStatus(logId?: string): Promise<boolean>

參數說明:

  • logId:記錄 id,string 型別,選傳

回傳值說明: 是否使用已支付的微信掃碼成功,Promise<boolean> 型別

範例:

// 获取扫码数据
const wechatQrcodeData = await watchCore.auth.getWechatPayCheckData();
// 检查扫码状态
const status = await watchCore.auth.checkWechatPayStatus(wechatQrcodeData.logId);
// 扫码成功
if (status) {
  toast.success('扫码成功');
  handleAuthVerifySuccess({
    success: true,
    authType: AuthType.Pay,
  });
}

三、PC 端付費觀看處理

3.1 PC 端微信掃碼支付

PC 端頁面需要透過掃描微信支付 QR Code 進行支付,開發者可透過 getAuthPayData 取得微信支付 QR Code 位址,並呼叫 startCheckWechatPayStatusPolling 輪詢微信支付狀態。

範例程式碼:

/** 获取微信支付二维码 */
async function getPcPayData() {
  const payData = await watchCore.auth.getAuthPayData();

  // 显示支付二维码
  const imageElem = document.createElement('img');
  imageElem.src = payData.qrcodeUrl;

  // 启动前先结束上一次轮询,避免创建多次轮询
  watchCore.auth.closeCheckPayStatusPolling();

  // 启动轮询检查支付状态
  watchCore.auth.startCheckPayStatusPolling({
    // 如果已调用 getAuthPayData,则可以不传 payId
    payId: payData.payId,
    // 支付成功回调,详细的处理流程可见当前文档 [PC 端支付成功处理]
    successCallback: () => {
      onPaySuccess()
    },
    // 支付超时回调
    timeoutCallback: () => {
      console.log('支付超时!');
    },
  });
}

3.2 PC 端微信掃碼觀看

已付費過的觀眾可以透過微信掃描 QR Code 直接進入觀看頁,無需二次支付,開發者可透過 getWechatPayCheckData 取得微信掃碼資訊,並呼叫 startCheckWechatPayStatusPolling 輪詢微信掃碼狀態。

範例程式碼:

async function getPcWechatPayData() {
  const wechatQrcodeData = await watchCore.auth.getWechatPayCheckData();

  // 显示扫描二维码
  const imageElem = document.createElement('img');
  imageElem.src = wechatQrcodeData.qrcodeUrl;

  // 扫码记录 id
  const logId = wechatQrcodeData.logId;

  watchCore.auth.closeCheckWechatPayStatusPolling();

  // 开启微信扫码状态检查轮询
  watchCore.auth.startCheckWechatPayStatusPolling({
    // 如果已调用 getWechatPayCheckData,则可以不传 logId
    logId: logId,
    // 扫码成功回调,详细的处理流程可见当前文档 [PC 端支付成功处理]
    successCallback: () => {
      onPaySuccess()
    },
    // 扫码超时回调
    timeoutCallback: () => {
      console.log('支付超时!');
    },
  });
}

如果您不使用 startCheckWechatPayStatusPolling 來輪詢偵測微信掃碼,可呼叫 checkWechatPayStatus 來取得觀眾的微信掃碼登入狀態,範例程式碼:

async function example() {
  const data = await watchCore.auth.getWechatPayCheckData();
  const status = await watchCore.auth.checkWechatPayStatus(data.logId);
  if (status) {
    console.log('扫码成功');
  } else {
    console.log('未扫码登录');
  }
}

3.3 PC 端支付成功處理

由於 PC 端微信開啟觀看頁時需要進行微信授權處理,因此在 PC 端支付成功後需要判斷當前環境與微信授權狀態,在微信端且未授權時進行微信非靜默授權,範例程式碼:

import { AuthType } from '@polyv/live-watch-sdk';

function onPaySuccess() {
  // 针对于 PC 端微信客户端,如果需要显示微信用户信息,需要在付费完后做微信非静默授权
  if (isWeixin && !watchCore.weixin.isWeixinWatchAuthorized()) {
    // TODO:执行微信非静默授权
    return;
  }

  handleAuthVerifySuccess({
    success: true,
    authType: AuthType.Pay,
  });
}

四、微信 H5 付費觀看處理

4.1 微信 H5 微信支付觀看

在微信 H5 環境下,可透過 getAuthPayData 取得微信 JSSDK 支付 API 的簽名參數,當觀眾支付成功後,呼叫 checkPayStatus 檢查微信支付狀態,當回傳成功後即可進入直播觀看頁,程式碼範例如下:

import { AuthType } from '@polyv/live-watch-sdk';

async function toDoAuthPayMobile() {
  // 非微信打开
  if (!isWeixin) {
    alert('请在微信中打开本页进行支付');
    return;
  }

  const payData = await watchCore.auth.getAuthPayData();
  if (payData.wxPaySignData) {
    // 调用微信 JSSDK 支付 API,唤起支付窗口
    wx.chooseWXPay({
      timestamp: payData.timestamp,
      nonceStr: payData.nonceStr,
      package: payData.package,
      signType: payData.signType,
      paySign: payData.paySign,
      success: () => {
        // 支付成功,详细的处理流程可见文档 4.2
        onPaySuccess();
      },
      cancel: () => {
        alert('您取消了支付');
      },
    });
  }
}

4.2 微信 H5 支付成功處理

在微信 H5 支付成功後,需要觀眾進行微信非靜默授權,範例程式碼如下:

async function onPaySuccess() {
  // 如果未进行非静默授权,则先进行一次非静默授权
  if (!watchCore.weixin.isWeixinWatchAuthorized()) {
    // TODO:执行微信非静默授权
    return;
  }

  // 是否已支付成功
  const payed = await watchCore.auth.checkPayStatus();
  if (payed) {
    handleAuthVerifySuccess({
      success: true,
      authType: AuthType.Pay,
    });
  }
}
联系客服,在线咨询