すべてのプロダクト
Search
ドキュメントセンター

Captcha:V3 アーキテクチャへの WeChat ミニプログラムプラグインの統合

最終更新日:Jul 15, 2026

コンソールで検証シナリオを追加した後、検証機能を必要とする WeChat ミニプログラムのページに初期化コードを組み込みます。

前提条件

  • Captcha 2.0 が有効化済みであること。

  • WeChat ミニプログラムクライアント用の 検証シナリオ が作成済みであること。

WeChat ミニプログラムプラグインの統合

Native

プラグインを使用する前に、WeChat ミニプログラム管理コンソールで追加します。管理コンソールにログインし、[設定] > [サードパーティサービス] > [プラグイン管理] に移動します。アプリ ID (wxbe275ff84246f1a4) を使用してプラグインを検索し、追加します。

ステップ 1: プラグインの統合

  1. Captcha 2.0 プラグインの宣言

    ページでプラグインを使用する前に、プロジェクトの app.json ファイルでプラグインを宣言します。

    説明

    プラグインの最新バージョンを使用することをお勧めします。最新バージョンは [WeChat DevTools] > [詳細] > [基本情報] > [プラグイン情報] で確認できます。

    V3 アーキテクチャ

    {
      "plugins": {
        "AliyunCaptcha": {
          "version": "3.0.0", // ミニプログラムプラグインの最新バージョンを使用してください
          "provider": "wxbe275ff84246f1a4"
        }
      }
    }

    V2 アーキテクチャ

    {
      "plugins": {
        "AliyunCaptcha": {
          "version": "2.3.0", // ミニプログラムプラグインの最新バージョンを使用してください
          "provider": "wxbe275ff84246f1a4"
        }
      }
    }
  2. カスタムコンポーネントの宣言

    プラグインのカスタムコンポーネントを使用するには、関連するページまたはコンポーネントの .json ファイルでカスタムコンポーネントを宣言します。plugin:// プロトコルを使用して、プラグインの参照名とカスタムコンポーネント名を指定してください。

    {
      "usingComponents": {
        "aliyun-captcha": "plugin://AliyunCaptcha/captcha"
      }
    }

ステップ 2: テンプレートの挿入

サンプルコードに示されている必須パラメーターを含む aliyun-captcha テンプレートを、.wxml ファイルに挿入してください。

この例では、ログインシナリオを示しています。

<view class="captchapage-container">
  <view class="input-group">
    <view class="label">Username:</view>
    <input class="input" type="text" placeholder="Enter a username" bindinput="inputUsername" />
  </view>
  <view class="input-group">
    <view class="label">Password:</view>
    <input class="input" type="password" placeholder="Enter a password" bindinput="inputPassword" />
  </view>
  <aliyun-captcha id="captcha-element" wx:if="{{loadCaptcha}}" props="{{pluginProps}}" />
  <!-- ログインメソッドを [Log On] ボタンにバインドします。ボタンがクリックされると、ログインメソッドがプラグインのインスタンスメソッドを呼び出して Captcha を表示します。 -->
  <button class="login-btn" bindtap="login">Log On</button>
</view>

ステップ 3: プラグインの初期化

プラグインを初期化するには、必須パラメーターを指定して setData メソッドを呼び出してください。

この例では、ログインシナリオを示しています。

V3 アーキテクチャ

// プラグインインスタンスを取得
var AliyunCaptchaPluginInterface = requirePlugin('AliyunCaptcha');

// 成功時のコールバック関数
/**
 * @name success
 * @function
 * リクエストパラメーター:Captcha スクリプトから返される検証パラメーター。このパラメーターは変更せず、サーバーサイド検証のためにサーバーへ直接渡してください。
 * @params {string} captchaVerifyParam 
 */
var success = async function (captchaVerifyParam) {
  // 検証が成功した後、Captcha をアンロードします
  this.setData({
    loadCaptcha: false,
  });
  console.log(this.data);
  // ビジネスリクエストコード...
  const result = await customFetch('https://xxxx/demo/bizquery', {
      method: 'POST',
      data: {
        captchaVerifyParam, // 検証パラメーターを含めます
        userName: this.data.username, // this.data を使用してビジネスデータを取得
        password: this.data.password,
      },
    });
  console.log(captchaVerifyParam);
};

// 失敗時のコールバック関数
var fail = function (error) {
  console.error(error);
};

async function customFetch(url, option) {
  option.url = url;
  return new Promise((resolve, reject) => {
    wx.request({
      ...option,
      success(res) {
        resolve(res.data);
      },
      fail(res) {
        reject(new Error(res.toString()));
      },
    });
  });
}

// ページロジック
Page({
  data: {
    username: '',
    password: '',
    loadCaptcha: false, // Captcha をロードするかどうかを指定します
  },
  onLoad: function(options) {
    // プラグインパラメーターを構築します
    var pluginProps = {
      SceneId: 'xxxxx',
      mode: 'popup',
      // コールバック関数内の 'this' が現在のページコンテキストを指すように、ここでバインドが必要です。これにより、this.data を使用してビジネスパラメーターにアクセスできます
      success: success.bind(this), 
      // コールバック関数内の 'this' が現在のページコンテキストを指すように、ここでバインドが必要です。これにより、this.data を使用してビジネスパラメーターにアクセスできます
      fail: fail.bind(this), 
      slideStyle: {
        width: 540, // デフォルトの幅は 540 rpx です
        height: 60, // デフォルトの高さは 60 rpx です
      },
      language: 'cn',
      region: 'cn',
    };
    this.setData({
      loadCaptcha: true, // Captcha をロードまたは再ロードするかどうかを制御します
      pluginProps,
    });
  },
  inputUsername: function(e) {
    this.setData({
      username: e.detail.value
    });
  },
  inputPassword: function(e) {
    this.setData({
      password: e.detail.value
    });
  },
  login: function() {
    const { username, password } = this.data;
    // カスタムのビジネス検証を追加できます
    if (username && password) {
      // ポップアップモードの場合、インスタンスメソッドを呼び出して Captcha を表示します。フリクションレスモードの場合、同じメソッドを呼び出して検証をトリガーします
      AliyunCaptchaPluginInterface.show();
    } else {
      wx.showToast({
        title: 'ユーザー名とパスワードを入力してください。',
        icon: 'none'
      });
    }
  },
  // 再度検証が必要な場合は、このメソッドを呼び出して Captcha を再ロードします
  reloadCaptcha: function () {
    this.setData({
      loadCaptcha: true,
    });
  },
})

検証に成功した後、別の検証が必要な場合は reloadCaptcha メソッドを呼び出して Captcha を再ロードしてください。

V2 アーキテクチャ

// プラグインインスタンスを取得
var AliyunCaptchaPluginInterface = requirePlugin('AliyunCaptcha');

// CAPTCHA 認証を含むビジネスリクエストのコールバック関数
/**
 * @name captchaVerifyCallback
 * @function
 * リクエストパラメーター:Captcha スクリプトから返される検証パラメーター。このパラメーターは変更せず、サーバーへ直接渡してください。
 * @params {string} captchaVerifyParam
 * 戻り値:フィールド名は固定です。captchaResult は必須です。ビジネスロジックを検証しない場合、bizResult はオプションです。
 * @returns {{captchaResult: boolean, bizResult?: boolean|undefined}} 
 */
var captchaVerifyCallback = async function (captchaVerifyParam) {
  console.log(this.data);
  // ビジネスリクエストコード...
  const result = await customFetch('https://xxxx/demo/bizquery', {
      method: 'POST',
      data: {
        captchaVerifyParam, // 検証パラメーターを含めます
        userName: this.data.username, // this.data を使用してビジネスデータを取得
        password: this.data.password,
      },
    });
  console.log(captchaVerifyParam);
  return {
    captchaResult: result.captchaVerifyResult, // 必須。CAPTCHA 認証が成功したかどうかを示すブール値。
    bizResult: result.yourBizResult, // オプション。ビジネス検証結果。ビジネスロジックを検証しない場合は省略可能です。
  };
};

// ビジネスロジック検証結果のコールバック関数
var onBizResultCallback = function (bizResult) {
  if (bizResult === true) {
    // ビジネスロジック検証に成功した場合に実行するロジック (成功メッセージの表示など)
    wx.showToast({
      title: 'ビジネス検証に成功しました!',
      duration: 2000,
      icon: 'success',
    });
  } else {
    // ビジネスロジック検証に失敗した場合に実行するロジック (エラーメッセージの表示など)
    wx.showToast({
      title: 'ビジネス検証に失敗しました。',
      duration: 2000,
      icon: 'error',
    });
  }
};

async function customFetch(url, option) {
  option.url = url;
  return new Promise((resolve, reject) => {
    wx.request({
      ...option,
      success(res) {
        resolve(res.data);
      },
      fail(res) {
        reject(new Error(res.toString()));
      },
    });
  });
}

// ページロジック
Page({
  data: {
    username: '',
    password: '',
    loadCaptcha: false, // Captcha をロードするかどうかを指定します
  },
  onLoad: function(options) {
    // プラグインパラメーターを構築します
    var pluginProps = {
      SceneId: 'xxxxx',
      mode: 'popup',
      // コールバック関数内の 'this' が現在のページコンテキストを指すように、ここでバインドが必要です。これにより、this.data を使用してビジネスパラメーターにアクセスできます
      captchaVerifyCallback: captchaVerifyCallback.bind(this), 
      // コールバック関数内の 'this' が現在のページコンテキストを指すように、ここでバインドが必要です。これにより、this.data を使用してビジネスパラメーターにアクセスできます
      onBizResultCallback: onBizResultCallback.bind(this), 
      slideStyle: {
        width: 540, // デフォルトの幅は 540 rpx です
        height: 60, // デフォルトの高さは 60 rpx です
      },
      language: 'cn',
      region: 'cn',
    };
    this.setData({
      loadCaptcha: true, // Captcha をロードまたは再ロードするかどうかを制御します
      pluginProps,
    });
  },
  inputUsername: function(e) {
    this.setData({
      username: e.detail.value
    });
  },
  inputPassword: function(e) {
    this.setData({
      password: e.detail.value
    });
  },
  login: function() {
    const { username, password } = this.data;
    // カスタムのビジネス検証を追加できます
    if (username && password) {
      // ポップアップモードの場合、インスタンスメソッドを呼び出して Captcha を表示します。フリクションレスモードの場合、同じメソッドを呼び出して検証をトリガーします
      AliyunCaptchaPluginInterface.show();
    } else {
      wx.showToast({
        title: 'ユーザー名とパスワードを入力してください。',
        icon: 'none'
      });
    }
  },
})

Taro フレームワーク

説明

Taro の統合は現在 React のみをサポートしています。

ステップ 1: プラグインの統合

  1. Captcha 2.0 プラグインの宣言

    ページでプラグインを使用する前に、プロジェクトの app.config.js ファイルでプラグインを宣言します。

    説明

    最新バージョンのプラグインを使用することをお勧めします。バージョンは [WeChat DevTools] > [詳細] > [基本情報] > [プラグイン情報] で確認できます。

    V3 アーキテクチャ

    {
      "plugins": {
        "AliyunCaptcha": {
          "version": "3.0.0", // ミニプログラムプラグインの最新バージョンを使用してください
          "provider": "wxbe275ff84246f1a4"
        }
      }
    }

    V2 アーキテクチャ

    {
      "plugins": {
        "AliyunCaptcha": {
          "version": "2.3.0", // ミニプログラムプラグインの最新バージョンを使用してください
          "provider": "wxbe275ff84246f1a4"
        }
      }
    }
  2. カスタムコンポーネントの宣言

    プラグインのカスタムコンポーネントを使用するには、ページまたはコンポーネントの index.config.js ファイルで、plugin:// プロトコルを使用してプラグインの参照名とカスタムコンポーネント名を指定してください。

    export default {
      usingComponents: {
        'aliyun-captcha': 'plugin://AliyunCaptcha/captcha',
      },
    };

ステップ 2: コードの統合

この例では、ログインシナリオを示しています。

V3 アーキテクチャ

import Taro from '@tarojs/taro';
import { useEffect, useState, useRef } from 'react';
import { View, Text, Input, Button, Form } from '@tarojs/components';
import './index.scss';

// プラグインインスタンスを取得
const AliyunCaptchaPluginInterface = Taro.requirePlugin('AliyunCaptcha');

// `success` コールバックでは state の変更が反映されない可能性があるため、ビジネスパラメーターはグローバル変数で管理する必要があります
// let userName = '';
// let passWord = '';

function Index() {
  const [username, setUsername] = useState('');
  const [password, setPassword] = useState('');
  const [loadCaptcha, setLoadCaptcha] = useState(false);
  // ビジネスパラメーターを維持するために ref を使用することを推奨します
  const bizParams = useRef({
    username: '',
    password: '',
  });

  useEffect(() => {
    setLoadCaptcha(true); // Captcha をロードまたは再ロードするかどうかを制御します
  }, []);

  const handleUsernameChange = (e) => {
    setUsername(e.target.value); // state を更新します
    bizParams.current.username = e.target.value; // ref も更新します
    // userName = e.target.value; // または、グローバル変数を更新します
  };

  const handlePasswordChange = (e) => {
    setPassword(e.target.value); // state を更新します
    bizParams.current.password = e.target.value; // ref も更新します
    // passWord = e.target.value; // または、グローバル変数を更新します
  };

  const login = () => {
    // カスタムのビジネス検証を追加できます
    if (username && password) {
      // ポップアップモードの場合、インスタンスメソッドを呼び出して Captcha を表示します。フリクションレスモードの場合、同じメソッドを呼び出して検証をトリガーします
      AliyunCaptchaPluginInterface.show();
    } else {
      Taro.showToast({
        title: 'ユーザー名とパスワードを入力してください。',
        icon: 'none'
      });
    } 
  }

  // 成功時のコールバック関数
  /**
   * @name success
   * @function
   * リクエストパラメーター:Captcha スクリプトから返される検証パラメーター。このパラメーターは変更せず、サーバーサイド検証のためにサーバーへ直接渡してください。
   * @params {string} captchaVerifyParam
  */
  async function success(captchaVerifyParam) {
    // 検証が成功した後、Captcha をアンロードします
    setLoadCaptcha(false);
    console.log(bizParams.current); // ref からビジネスパラメーターを取得します
    // console.log(userName, passWord); // または、グローバルビジネスパラメーターを使用します
    // ビジネスリクエストコード...
    const result = await customFetch('https://xxxx/demo/bizquery', {
      method: 'POST',
      mode: 'cors',
      enableHttp2: true,
      enableQuic: true,
      data: {
        captchaVerifyParam, // 検証パラメーターを含めます
        userName: bizParams.current.username, // ref からビジネスデータを取得します
        password: bizParams.current.password, // ref からビジネスデータを取得します
        // または、グローバル変数からビジネスデータを取得します
        // username: userName, 
        // password: passWord, 
      },
    });
  }

  // 失敗時のコールバック関数
  function fail(error) {
    console.error(error)
  }

  // 再度検証が必要な場合は、このメソッドを呼び出して Captcha を再ロードします
  function reloadCaptcha() {
    setLoadCaptcha(true);
  }

  async function customFetch(url, option) {
    option.url = url;
    return new Promise((resolve, reject) => {
      Taro.request({
        ...option,
        success(res) {
          resolve(res.data);
        },
        fail(res) {
          reject(new Error(res.toString()));
        },
      });
    });
  }

  // プラグインパラメーターを構築します
  const pluginProps = {
    SceneId: 'xxxxx',
    mode: 'popup',
    success,
    fail,
    slideStyle: {
      width: 540, // デフォルトの幅は 540 rpx です
      height: 60, // デフォルトの高さは 60 rpx です
    },
    language: 'cn',
    region: 'cn',
  };

  return (
    <View className="captcha-page">
    <Form>
    <View className="input-group">
    <Text>Account:</Text>
    <Input
  type="text"
  placeholder="Enter an account"
  value={username}
  onInput={handleUsernameChange}
    />
    </View>
    <View className="input-group">
    <Text>Password:</Text>
    <Input
  type="password"
  placeholder="Enter a password"
  value={password}
  onInput={handlePasswordChange}
    />
    </View>
  {/* ログインメソッドを [Log On] ボタンにバインドします。ボタンがクリックされると、ログインメソッドがプラグインのインスタンスメソッドを呼び出して Captcha を表示します。 */}
  <Button style={{ margin: '20px' }} id="captcha-button" onClick={login}>Log On</Button>
  </Form>
{loadCaptcha && <aliyun-captcha id="captcha-element" props={pluginProps} />}
  </View>
 );
}

export default Index;

検証に成功した後、別の検証が必要な場合は reloadCaptcha メソッドを呼び出して Captcha を再ロードしてください。

V2 アーキテクチャ

import Taro from '@tarojs/taro';
import { useEffect, useState, useRef } from 'react';
import { View, Text, Input, Button, Form } from '@tarojs/components';
import './index.scss';

// プラグインインスタンスを取得
const AliyunCaptchaPluginInterface = Taro.requirePlugin('AliyunCaptcha');

// `captchaVerifyCallback` コールバックでは state の変更が反映されない可能性があるため、ビジネスパラメーターはグローバル変数で管理する必要があります
// let userName = '';
// let passWord = '';

function Index() {
  const [username, setUsername] = useState('');
  const [password, setPassword] = useState('');
  const [loadCaptcha, setLoadCaptcha] = useState(false);
  // ビジネスパラメーターを維持するために ref を使用することを推奨します
  const bizParams = useRef({
    username: '',
    password: '',
  });

  useEffect(() => {
    setLoadCaptcha(true); // Captcha をロードまたは再ロードするかどうかを制御します
  }, []);

  const handleUsernameChange = (e) => {
    setUsername(e.target.value); // state を更新します
    bizParams.current.username = e.target.value; // ref も更新します
    // userName = e.target.value; // または、グローバル変数を更新します
  };
  
  const handlePasswordChange = (e) => {
    setPassword(e.target.value); // state を更新します
    bizParams.current.password = e.target.value; // ref も更新します
    // passWord = e.target.value; // または、グローバル変数を更新します
  };

  const login = () => {
    // カスタムのビジネス検証を追加できます
    if (username && password) {
      // ポップアップモードの場合、インスタンスメソッドを呼び出して Captcha を表示します。フリクションレスモードの場合、同じメソッドを呼び出して検証をトリガーします
      AliyunCaptchaPluginInterface.show();
    } else {
      Taro.showToast({
        title: 'ユーザー名とパスワードを入力してください。',
        icon: 'none'
      });
    } 
  }

  // CAPTCHA 認証を含むビジネスリクエストのコールバック関数
  /**
   * @name captchaVerifyCallback
   * @function
   * リクエストパラメーター:Captcha スクリプトから返される検証パラメーター。このパラメーターは変更せず、サーバーへ直接渡してください。
   * @params {string} captchaVerifyParam
   * 戻り値:フィールド名は固定です。captchaResult は必須です。ビジネスロジックを検証しない場合、bizResult はオプションです。
   * @returns {{captchaResult: boolean, bizResult?: boolean|undefined}} 
   */
  async function captchaVerifyCallback(captchaVerifyParam) {
    console.log(bizParams.current); // ref からビジネスパラメーターを取得します
    // console.log(userName, passWord); // または、グローバルビジネスパラメーターを使用します
    // ビジネスリクエストコード...
    const result = await customFetch('https://xxxx/demo/bizquery', {
      method: 'POST',
      mode: 'cors',
      enableHttp2: true,
      enableQuic: true,
      data: {
        captchaVerifyParam, // 検証パラメーターを含めます
        userName: bizParams.current.username, // ref からビジネスデータを取得します
        password: bizParams.current.password, // ref からビジネスデータを取得します
        // または、グローバル変数からビジネスデータを取得します
        // username: userName,
        // password: passWord, 
      },
    });
    return {
      captchaResult: result.captchaVerifyResult, // 必須。CAPTCHA 認証が成功したかどうかを示すブール値。
      bizResult: result.yourBizResult, // オプション。ビジネス検証結果。ビジネスロジックを検証しない場合は省略可能です。
    };
  }

  // ビジネスロジック検証結果のコールバック関数
  function onBizResultCallback(bizResult) {
    if (bizResult === true) {
      // ビジネスロジック検証に成功した場合に実行するロジック (成功メッセージの表示など)
      Taro.showToast({
        title: 'ビジネス検証に成功しました!',
        duration: 2000,
        icon: 'success',
      });
    } else {
      // ビジネスロジック検証に失敗した場合に実行するロジック (エラーメッセージの表示など)
      Taro.showToast({
        title: 'ビジネス検証に失敗しました。',
        duration: 2000,
        icon: 'error',
      });
    }
  }

  async function customFetch(url, option) {
    option.url = url;
    return new Promise((resolve, reject) => {
      Taro.request({
        ...option,
        success(res) {
          resolve(res.data);
        },
        fail(res) {
          reject(new Error(res.toString()));
        },
      });
    });
  }
  
  // プラグインパラメーターを構築します
  const pluginProps = {
    SceneId: 'xxxxx',
    mode: 'popup',
    captchaVerifyCallback,
    onBizResultCallback,
    slideStyle: {
      width: 540, // デフォルトの幅は 540 rpx です
      height: 60, // デフォルトの高さは 60 rpx です
    },
    language: 'cn',
    region: 'cn',
  };

  return (
    <View className="captcha-page">
      <Form>
        <View className="input-group">
          <Text>Account:</Text>
          <Input
            type="text"
            placeholder="Enter an account"
            value={username}
            onInput={handleUsernameChange}
          />
        </View>
        <View className="input-group">
          <Text>Password:</Text>
          <Input
            type="password"
            placeholder="Enter a password"
            value={password}
            onInput={handlePasswordChange}
          />
        </View>
        {/* ログインメソッドを [Log On] ボタンにバインドします。ボタンがクリックされると、ログインメソッドがプラグインのインスタンスメソッドを呼び出して Captcha を表示します。 */}
        <Button style={{ margin: '20px' }} id="captcha-button" onClick={login}>Log On</Button>
      </Form>
      {loadCaptcha && <aliyun-captcha id="captcha-element" props={pluginProps} />}
    </View>
  );
}

export default Index;

Taro ビルドツールの推奨事項

Taro はパッケージングに Webpack のみをサポートします。Vite を使用する新しいプロジェクトの場合は、最適な互換性を確保するために Webpack への切り替えを推奨します。Webpack への切り替えが現実的でない既存のプロジェクトの場合、回避策として Captcha の WXML 要素を手動で dist ディレクトリに追加してください。

  1. Vite を使用してパッケージングすると、WeChat ミニプログラムでテンプレートが見つからないことを示す、次の WXML Runtime 警告が表示されます。

    WXMLRT_$6c6f67696e2f:./base.wxml:template:20:18: Template `tmpl_0_aliyun-captcha` not found.
    WXMLRT_$6c6f67696e2f:./base.wxml:template:20:18: Template `tmpl_0_aliyun-captcha` not found.
    
    [WXML Runtime warning] ./base.wxml
    Template `tmpl_0_aliyun-captcha` not found.
      18 | <template name="tmpl_0_3">
      19 |   <view style="{{i.st}}" class="{{i.cl}}"   id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
    > 20 |     <template is="{{xs.a(c, item.nn, l)}}" data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}" wx:for="{{i.cn}}" wx:key="sid" />
         |              ^
      21 |   </view>
      22 | </template>
      23 |
    
  2. パッケージングされた dist/base.wxml ファイルに、次のコードを追加してください。

    <template name="tmpl_0_aliyun-captcha">
      <aliyun-captcha
        props="{{i.props}}"
        id="{{i.uid||i.sid}}"
        data-sid="{{i.sid}}"
      >
        <block wx:for="{{i.cn}}" wx:key="sid">
          <template
            is="{{xs.a(c, item.nn, l)}}"
            data="{{i:item,c:c+1,l:xs.f(l,item.nn)}}"
          />
        </block>
      </aliyun-captcha>
    </template>

uni-app

uni-app の統合は Vue 2 と Vue 3 の両方をサポートします。このセクションでは Vue 3 を例として使用します。

ステップ 1: プラグインの統合

  1. Captcha 2.0 プラグインの宣言

    ページでプラグインを使用する前に、プロジェクトの manifest.json ファイルでプラグインを宣言します。

    説明

    プラグインは、最新バージョンを使用することをお勧めします。最新バージョンは、[WeChat DevTools] > [詳細] > [基本情報] > [プラグイン情報]で確認できます。

    V3 アーキテクチャ

    "mp-weixin": {
      "plugins": {
        "AliyunCaptcha": {
          "version": "3.0.0",
          "provider": "wxbe275ff84246f1a4",
        }
      }
    }

    V2 アーキテクチャ

    "mp-weixin": {
      "plugins": {
        "AliyunCaptcha": {
          "version": "2.3.0", // ミニプログラムプラグインの最新バージョンを使用してください
          "provider": "wxbe275ff84246f1a4"
        }
      }
    }
  2. カスタムコンポーネントの宣言

    プラグインのカスタムコンポーネントの使用は、標準のカスタムコンポーネントの使用と同様です。page.json ファイルの対応するページのスタイルノードで、plugin:// プロトコルを使用してプラグインの参照名とカスタムコンポーネント名を指定してください。

    {
      "path": "pages/CaptchaPage",
      "style": {
        "mp-weixin": {
            "usingComponents": {
                "aliyun-captcha": "plugin://AliyunCaptcha/captcha"
            }
        }
      }
    }

ステップ 2: コードの統合

.vue ファイルで、<template> セクションに aliyun-captcha コンポーネントを挿入してください。<script> セクションでプラグインを初期化してください。

この例では、ログインシナリオを示しています。

V3 アーキテクチャ

<template>
  <view class="captchapage-container">
    <view class="input-group">
      <view class="label">Username:</view>
      <input
        class="input"
        type="text"
        placeholder="Enter a username"
        @input="inputUsername"
      />
    </view>
    <view class="input-group">
      <view class="label">Password:</view>
      <input
        class="input"
        type="password"
        placeholder="Enter a password"
        @input="inputPassword"
      />
    </view>
    <aliyun-captcha
      id="captcha-element"
      v-if="data.loadCaptcha"
      :props="data.pluginProps"
    />
    <button class="login-btn" @click="login">Log On</button>
  </view>
</template>

<script>
  // プラグインインスタンスを取得
  const AliyunCaptchaPluginInterface = requirePlugin("AliyunCaptcha");

  // 成功時のコールバック関数
  /**
   * @name success
   * @function
   * リクエストパラメーター:Captcha スクリプトから返される検証パラメーター。このパラメーターは変更せず、サーバーサイド検証のためにサーバーへ直接渡してください。
   * @params {string} captchaVerifyParam
   */
  var success = async function (captchaVerifyParam) {
    // 検証が成功した後、Captcha をアンロードします
    this.data.loadCaptcha = false;
    console.log(this.data);
    // ビジネスリクエストコード...
    const result = await customFetch("https://xxxx/demo/bizquery", {
      method: "POST",
      data: {
        captchaVerifyParam, // 検証パラメーターを含めます
        userName: this.data.username, // this.data を使用してビジネスデータを取得します
        password: this.data.password,
      },
    });
  };

  // 失敗時のコールバック関数
  var fail = function (error) {
    console.error(error);
  };

  async function customFetch(url, option) {
    option.url = url;
    return new Promise((resolve, reject) => {
      uni.request({
        ...option,
        success(res) {
          resolve(res.data);
        },
        fail(res) {
          reject(new Error(res.toString()));
        },
      });
    });
  }

  export default {
    data() {
      return {
        data: {
          username: "",
          password: "",
          loadCaptcha: false,
        },
      };
    },
    onLoad(options) {
      console.log(AliyunCaptchaPluginInterface);
      var pluginProps = {
        SceneId: "xxxxx",
        mode: "popup",
        success: success.bind(this), // ここでバインドが必要です
        fail: fail.bind(this), // ここでバインドが必要です
        slideStyle: {
          width: 540, // デフォルトの幅は 540 rpx です
          height: 60, // デフォルトの高さは 60 rpx です
        },
        language: "cn",
        region: "cn",
      };
      // プラグインを初期化します
      this.data.loadCaptcha = true; // Captcha をロードまたは再ロードするかどうかを制御します
      this.data.pluginProps = pluginProps;
    },
    methods: {
      // ユーザー名入力のハンドラー
      inputUsername(e) {
        this.data.username = e.detail.value;
      },
      // パスワード入力のハンドラー
      inputPassword(e) {
        this.data.password = e.detail.value;
      },
      // ログインボタンクリックのハンドラー
      login() {
        const { username, password } = this.data;
        // これは例です。実際のアプリケーションでは、ログイン情報を検証のためにサーバーに送信する必要があります。
        // ポップアップモードの場合、インスタンスメソッドを呼び出して Captcha を表示します。フリクションレスモードの場合、同じメソッドを呼び出して検証をトリガーします
        if (username && password) {
          AliyunCaptchaPluginInterface.show();
        } else {
          uni.showToast({
            title: "ユーザー名とパスワードを入力してください。",
            icon: "none",
          });
        }
      },
      // 再度検証が必要な場合は、このメソッドを呼び出して Captcha を再ロードします
      reloadCaptcha() {
        this.data.loadCaptcha = true;
      }
    },
  };
</script>

検証に成功した後、別の検証が必要な場合は reloadCaptcha メソッドを呼び出して Captcha を再ロードしてください。

V2 アーキテクチャ

<template>
  <view class="captchapage-container">
    <view class="input-group">
      <view class="label">Username:</view>
      <input
        class="input"
        type="text"
        placeholder="Enter a username"
        @input="inputUsername"
      />
    </view>
    <view class="input-group">
      <view class="label">Password:</view>
      <input
        class="input"
        type="password"
        placeholder="Enter a password"
        @input="inputPassword"
      />
    </view>
    <aliyun-captcha
      id="captcha-element"
      v-if="data.loadCaptcha"
      :props="data.pluginProps"
    />
    <button class="login-btn" @click="login">Log On</button>
  </view>
</template>

<script>
  // プラグインインスタンスを取得
  const AliyunCaptchaPluginInterface = requirePlugin("AliyunCaptcha");

  // CAPTCHA 認証を含むビジネスリクエストのコールバック関数
  /**
   * @name captchaVerifyCallback
   * @function
   * リクエストパラメーター:Captcha スクリプトから返される検証パラメーター。このパラメーターは変更せず、サーバーへ直接渡してください。
   * @params {string} captchaVerifyParam
   * 戻り値:フィールド名は固定です。captchaResult は必須です。ビジネスロジックを検証しない場合、bizResult はオプションです。
   * @returns {{captchaResult: boolean, bizResult?: boolean|undefined}}
   */
  var captchaVerifyCallback = async function (captchaVerifyParam) {
    console.log(this.data);
    // ビジネスリクエストコード...
    const result = await customFetch("https://xxxx/demo/bizquery", {
      method: "POST",
      data: {
        captchaVerifyParam, // 検証パラメーターを含めます
        userName: this.data.username, // this.data を使用してビジネスデータを取得します
        password: this.data.password,
      },
    });
    console.log(captchaVerifyParam);
    return {
      captchaResult: result.captchaVerifyResult, // 必須。CAPTCHA 認証が成功したかどうかを示すブール値。
      bizResult: result.yourBizResult, // オプション。ビジネス検証結果。ビジネスロジックを検証しない場合は省略可能です。
    };
  };

  // ビジネスロジック検証結果のコールバック関数
  var onBizResultCallback = function (bizResult) {
    if (bizResult === true) {
      // ビジネスロジック検証に成功した場合に実行するロジック (成功メッセージの表示など)
      uni.showToast({
        title: "ビジネス検証に成功しました!",
        duration: 2000,
        icon: "success",
      });
    } else {
      // ビジネスロジック検証に失敗した場合に実行するロジック (エラーメッセージの表示など)
      uni.showToast({
        title: "ビジネス検証に失敗しました。",
        duration: 2000,
        icon: "error",
      });
    }
  };

  async function customFetch(url, option) {
    option.url = url;
    return new Promise((resolve, reject) => {
      uni.request({
        ...option,
        success(res) {
          resolve(res.data);
        },
        fail(res) {
          reject(new Error(res.toString()));
        },
      });
    });
  }

  export default {
    data() {
      return {
        data: {
          username: "",
          password: "",
          loadCaptcha: false,
        },
      };
    },
    onLoad(options) {
      console.log(AliyunCaptchaPluginInterface);
      var pluginProps = {
        SceneId: "xxxxx",
        mode: "popup",
        captchaVerifyCallback: captchaVerifyCallback.bind(this), // ここでバインドが必要です
        onBizResultCallback: onBizResultCallback.bind(this), // ここでバインドが必要です
        slideStyle: {
          width: 540, // デフォルトの幅は 540 rpx です
          height: 60, // デフォルトの高さは 60 rpx です
        },
        language: "cn",
        region: "cn",
      };
      // プラグインを初期化します
      this.data.loadCaptcha = true; // Captcha をロードまたは再ロードするかどうかを制御します
      this.data.pluginProps = pluginProps;
    },
    methods: {
      // ユーザー名入力のハンドラー
      inputUsername(e) {
        this.data.username = e.detail.value;
      },
      // パスワード入力のハンドラー
      inputPassword(e) {
        this.data.password = e.detail.value;
      },
      // ログインボタンクリックのハンドラー
      login() {
        const { username, password } = this.data;
        // これは例です。実際のアプリケーションでは、ログイン情報を検証のためにサーバーに送信する必要があります。
        // ポップアップモードの場合、インスタンスメソッドを呼び出して Captcha を表示します。フリクションレスモードの場合、同じメソッドを呼び出して検証をトリガーします
        if (username && password) {
          AliyunCaptchaPluginInterface.show();
        } else {
          uni.showToast({
            title: "ユーザー名とパスワードを入力してください。",
            icon: "none",
          });
        }
      },
    },
  };
</script>
説明

Vue 2 を統合する場合は、Vue 3 のステップ 1 とステップ 2 に従ってください。さらに、パッチファイルをインポートし、Captcha を使用するページの Vue オブジェクトのネイティブ __patch__ メソッドを置き換えてください。

  1. patch.js ファイルをインポートしてください。

  2. beforeCreate フックの開始時に __patch__ 関数を置き換えてください。

  3. beforeDestroy フックで __patch__ 関数を復元してください。

import { myPatch } from "@/xxx/patch.js"
import Vue from 'vue';

beforeCreate() {
  this.originalPatch = Vue.prototype.__patch__; // 元の patch 関数を保存します
  Vue.prototype.__patch__ = myPatch; // patch 関数を置き換えます
  // Vue 3 の例に従って Captcha を初期化してください
},
beforeDestroy() {
  Vue.prototype.__patch__ = this.originalPatch; // patch 関数を復元します
}

パラメータ

V3 アーキテクチャ

パラメータ

タイプ

必須

デフォルト

説明

SceneId

String

はい

なし

検証シナリオを作成した後に取得する検証シナリオの ID。

mode

String

はい

なし

CAPTCHA モード。セキュリティとユーザーエクスペリエンスのため、popup (ポップアップモード) のみがサポートされています。

success

Function

はい

なし

CAPTCHA 認証に成功した後にトリガーされるコールバック関数。この関数は CaptchaVerifyParam を返します。これを サーバーサイド検証 のためにサーバーに送信できます。

fail

Function

はい

なし

CAPTCHA が失敗したときにトリガーされるコールバック関数。この関数は失敗のエラーコードを返します。

slideStyle

Object

いいえ

{ width: 540, height: 60 }

スライダー CAPTCHA のスタイル。幅と高さを rpx 単位でカスタマイズできます。

説明
  • 効果的なリスク分析のため、推奨される最小スライダー幅 (width) は 540 rpx です。より小さい幅が設定された場合、システムはデフォルトで 540 rpx を使用します。

  • このパラメータはスライダー CAPTCHA チャレンジにのみ適用され、事前定義されたサイズを持つパズル CAPTCHA チャレンジには適用されません。CSS をオーバーライドしてスタイルを変更すると、検証が失敗する可能性があります。

language

String

いいえ

cn

Captcha 2.0 がサポートする言語

region

String

いいえ

cn

Captcha 2.0 インスタンスがデプロイされているリージョン。有効な値:

  • cn:中国本土

  • sgp:シンガポール

説明
  • クライアントで指定されたリージョンがサーバーエンドポイントと一致しない場合、検証リクエストは失敗します。

  • 設定されたパラメータに基づいて、クライアントは収集した行動およびデバイスデータを、セキュリティ検証のために対応するセンターに送信します。

onClose

Function

いいえ

なし

Captcha ポップアップウィンドウが閉じたときにトリガーされるコールバック関数:

function onClose(isVerify) { 
    if(isVerify) {
    // 検証成功後にウィンドウが閉じた場合。
    } else {
    // 手動で閉じた場合など、その他のシナリオでウィンドウが閉じた場合。
    }
}

timeout

Number

いいえ

10000

単一の CAPTCHA 初期化リクエストのタイムアウト (ミリ秒 (ms) 単位)。

disableMaskClick

Boolean

いいえ

false

オーバーレイのクリックを無効にするかどうかを指定します。

  • false (デフォルト):オーバーレイをクリックするとモーダルが閉じます。

  • true:オーバーレイをクリックしてもモーダルは閉じません。

V2 アーキテクチャ

パラメータ

タイプ

必須

デフォルト

説明

SceneId

String

はい

なし

検証シナリオを作成した後に取得する検証シナリオの ID。

mode

String

はい

なし

CAPTCHA モード。セキュリティとユーザーエクスペリエンスのため、popup (ポップアップモード) のみがサポートされています。

captchaVerifyCallback

Function

はい

captchaVerifyCallback

CAPTCHA 認証を含むビジネスリクエストのコールバック関数。詳細については、コードのコメントをご参照ください。

onBizResultCallback

Function

はい

onBizResultCallback

ビジネスロジック検証結果のコールバック関数。結果を処理するためのカスタムロジックを定義できます。

slideStyle

Object

いいえ

{ width: 540, height: 60 }

スライダー CAPTCHA のスタイル。幅と高さを rpx 単位でカスタマイズできます。

説明
  • 効果的なリスク分析のため、推奨される最小スライダー幅 (width) は 540 rpx です。より小さい幅が設定された場合、システムはデフォルトで 540 rpx を使用します。

  • このパラメータはスライダー CAPTCHA チャレンジにのみ適用され、事前定義されたサイズを持つパズル CAPTCHA チャレンジには適用されません。CSS をオーバーライドしてスタイルを変更すると、検証が失敗する可能性があります。

language

String

いいえ

cn

Captcha 2.0 がサポートする言語

region

String

いいえ

cn

Captcha 2.0 インスタンスがデプロイされているリージョン。有効な値:

  • cn:中国本土

  • sgp:シンガポール

説明
  • クライアントで指定されたリージョンがサーバーエンドポイントと一致しない場合、検証リクエストは失敗します。

  • 設定されたパラメータに基づいて、クライアントは収集した行動およびデバイスデータを、セキュリティ検証のために対応するセンターに送信します。