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

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

最終更新日:Oct 15, 2025

コンソールで認証シナリオを追加した後、認証機能を使用する WeChat ミニプログラムページに Captcha 初期化コードを統合する必要があります。このトピックでは、このコードを統合する方法について説明します。

前提条件

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

ネイティブ WeChat ミニプログラムとの統合

プラグインを使用する前に、ミニプログラム管理コンソールでプラグインを追加する必要があります。これを行うには、コンソールにログインし、[設定] > [サードパーティサービス] > [プラグイン管理] に移動し、AppID (wxbe275ff84246f1a4) でプラグインを検索して追加します。

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

  1. Captcha ミニプログラムプラグインをインポートします。

    ページでプラグインを使用する前に、プロジェクトの app.json ファイルで Alibaba Cloud Captcha ミニプログラムプラグインを宣言します。次のコードに例を示します。

    説明

    最新のプラグインバージョンを使用していることを確認してください。最新バージョンは、[WeChat 開発者ツール] > [詳細] > [基本情報] > [プラグイン情報] で確認できます。

    V3 アーキテクチャ

    {
      "plugins": {
        "AliyunCaptcha": {
          "version": "3.0.0", // ミニプログラムプラグインの最新バージョンを選択します。
          "provider": "wxbe275ff84246f1a4"
        }
      }
    }

    V2 アーキテクチャ

    {
      "plugins": {
        "AliyunCaptcha": {
          "version": "2.3.0", // ミニプログラムプラグインの最新バージョンを選択します。
          "provider": "wxbe275ff84246f1a4"
        }
      }
    }
  2. Captcha ミニプログラムコンポーネントをインポートします。

    プラグインによって提供されるカスタムコンポーネントを使用するには、ページまたはコンポーネントの .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 your username" bindinput="inputUsername" />
  </view>
  <view class="input-group">
    <view class="label">Password:</view>
    <input class="input" type="password" placeholder="Enter your password" bindinput="inputPassword" />
  </view>
  <aliyun-captcha id="captcha-element" wx:if="{{loadCaptcha}}" props="{{pluginProps}}" />
  <!-- ログインメソッドをログインボタンにバインドします。ボタンがクリックされると、ログインメソッドでプラグインインスタンスメソッドを呼び出して Captcha を表示します。 -->
  <button class="login-btn" bindtap="login">Log On</button>
</view>

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

プラグインを使用する必要がある場合は、setData を呼び出して、必要な初期化パラメーターを渡します。

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

V3 アーキテクチャ

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

// 認証成功時のコールバック関数。
/**
 * @name success
 * @function
 * リクエストパラメーター: Captcha スクリプトによって返される認証パラメーター。処理せずに、2次検証のためにサーバーに直接渡します。
 * @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 をバインドする必要があります。これにより、コールバック関数内で this.data を介してビジネスパラメーターを取得できます。
      success: success.bind(this), 
      // これは固定構文です。コールバック関数内の '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: 'Enter your username and password.',
        icon: 'none'
      });
    }
  },
  // 再度認証するには、このメソッドを呼び出して Captcha を再読み込みします。
  reloadCaptcha: function () {
    this.setData({
      loadCaptcha: true,
    });
  },
})

認証に成功した後、再度認証を実行するには、`reloadCaptcha` を呼び出して Captcha を再読み込みします。

V2 アーキテクチャ

// Captcha プラグインインスタンスを取得します。
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: Get your business verification result from the result. // ビジネス検証が成功したかどうかを指定します。これはブール値で、オプションです。ビジネス検証結果がない場合、bizResult は空にできます。
  };
};

// ビジネスリクエスト検証結果コールバック関数。
var onBizResultCallback = function (bizResult) {
  if (bizResult === true) {
    // ビジネス検証が成功した場合のロジック (成功メッセージの表示など)。
    wx.showToast({
      title: 'Business verification successful!',
      duration: 2000,
      icon: 'success',
    });
  } else {
  // ビジネス検証が失敗した場合のロジック (失敗メッセージの表示など)。
    wx.showToast({
      title: 'Business verification failed!',
      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 をバインドする必要があります。これにより、コールバック関数内で this.data を介してビジネスパラメーターを取得できます。
      captchaVerifyCallback: captchaVerifyCallback.bind(this), 
      // これは固定構文です。コールバック関数内の '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: 'Enter your username and password.',
        icon: 'none'
      });
    }
  },
})

Taro フレームワークミニプログラムとの統合

説明

Taro 統合は現在、React フレームワークでのみサポートされています。

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

  1. Captcha ミニプログラムプラグインをインポートします。

    ページでプラグインを使用する前に、プロジェクトの app.config.js ファイルで Alibaba Cloud Captcha ミニプログラムプラグインを宣言します。次のコードに例を示します。

    説明

    最新のプラグインバージョンを使用していることを確認してください。最新バージョンは、[WeChat 開発者ツール] > [詳細] > [基本情報] > [プラグイン情報] で確認できます。

    V3 アーキテクチャ

    {
      "plugins": {
        "AliyunCaptcha": {
          "version": "3.0.0", // ミニプログラムプラグインの最新バージョンを選択します。
          "provider": "wxbe275ff84246f1a4"
        }
      }
    }

    V2 アーキテクチャ

    {
      "plugins": {
        "AliyunCaptcha": {
          "version": "2.3.0", // ミニプログラムプラグインの最新バージョンを選択します。
          "provider": "wxbe275ff84246f1a4"
        }
      }
    }
  2. Captcha ミニプログラムコンポーネントをインポートします。

    プラグインによって提供されるカスタムコンポーネントを使用するには、ページまたはコンポーネントの 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';

// Captcha プラグインインスタンスを取得します。
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: 'Enter your username and password.',
        icon: 'none'
      });
    } 
  }

  // 認証成功時のコールバック関数。
  /**
   * @name success
   * @function
   * リクエストパラメーター: Captcha スクリプトによって返される認証パラメーター。処理せずに、2次検証のためにサーバーに直接渡します。
   * @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 your account"
  value={username}
  onInput={handleUsernameChange}
    />
    </View>
    <View className="input-group">
    <Text>Password:</Text>
    <Input
  type="password"
  placeholder="Enter your password"
  value={password}
  onInput={handlePasswordChange}
    />
    </View>
  {/* ログインメソッドをログインボタンにバインドします。ボタンがクリックされると、ログインメソッドでプラグインインスタンスメソッドを呼び出して 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';

// Captcha プラグインインスタンスを取得します。
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: 'Enter your username and password.',
        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: Get your business verification result from the result. // ビジネス検証が成功したかどうかを指定します。これはブール値で、オプションです。ビジネス検証結果がない場合、bizResult は空にできます。
    };
  }

  // ビジネスリクエスト検証結果コールバック関数。
  function onBizResultCallback(bizResult) {
    if (bizResult === true) {
      // ビジネス検証が成功した場合のロジック (成功メッセージの表示など)。
      Taro.showToast({
        title: 'Business verification successful!',
        duration: 2000,
        icon: 'success',
      });
    } else {
    // ビジネス検証が失敗した場合のロジック (失敗メッセージの表示など)。
    Taro.showToast({
        title: 'Business verification failed!',
        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 your account"
            value={username}
            onInput={handleUsernameChange}
          />
        </View>
        <View className="input-group">
          <Text>Password:</Text>
          <Input
            type="password"
            placeholder="Enter your password"
            value={password}
            onInput={handlePasswordChange}
          />
        </View>
        {/* ログインメソッドをログインボタンにバインドします。ボタンがクリックされると、ログインメソッドでプラグインインスタンスメソッドを呼び出して 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 開発者ツールに次のエラーメッセージが表示されることがあります。image

  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 は、Vue2 と Vue3 を使用したミニプログラムとの統合をサポートしています。このセクションでは、Vue3 を例として使用します。

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

  1. Captcha ミニプログラムプラグインをインポートします。

    ページでプラグインを使用する前に、プロジェクトの manifest.json ファイルで Alibaba Cloud Captcha ミニプログラムプラグインを宣言します。次のコードに例を示します。

    説明

    最新のプラグインバージョンを使用していることを確認してください。最新バージョンは、[WeChat 開発者ツール] > [詳細] > [基本情報] > [プラグイン情報] で確認できます。

    V3 アーキテクチャ

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

    V2 アーキテクチャ

    {
      "plugins": {
        "AliyunCaptcha": {
          "version": "2.3.0", // ミニプログラムプラグインの最新バージョンを選択します。
          "provider": "wxbe275ff84246f1a4"
        }
      }
    }
  2. Captcha ミニプログラムコンポーネントをインポートします。

    プラグインによって提供されるカスタムコンポーネントの使用は、通常のカスタムコンポーネントの使用に似ています。対応するページの page.json ファイルで、`style` ノードの下にカスタムコンポーネントを設定します。plugin:// プロトコルを使用して、プラグインの参照名とカスタムコンポーネントの名前を指定します。次のコードに例を示します。

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

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

.vue ファイルで、aliyun-captcha コンポーネントを <template> タグに挿入します。次に、<script> タグ内で、必要なときにプラグインを初期化します。

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

V3 アーキテクチャ

<template>
  <view class="captchapage-container">
    <view class="input-group">
      <view class="label">Username:</view>
      <input
        class="input"
        type="text"
        placeholder="Enter your username"
        @input="inputUsername"
      />
    </view>
    <view class="input-group">
      <view class="label">Password:</view>
      <input
        class="input"
        type="password"
        placeholder="Enter your 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>
  // Captcha プラグインインスタンスを取得します。
  const AliyunCaptchaPluginInterface = requirePlugin("AliyunCaptcha");

  // 認証成功時のコールバック関数。
  /**
   * @name success
   * @function
   * リクエストパラメーター: Captcha スクリプトによって返される認証パラメーター。処理せずに、2次検証のためにサーバーに直接渡します。
   * @params {string} captchaVerifyParam
   * 戻り値パラメーター: フィールド名は固定です。captchaResult は必須です。error は、ビジネス検証シナリオがない場合はオプションです。
   * @returns {{captchaResult: boolean, error?: boolean|undefined}}
   */
  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), // これは固定構文です。this をバインドする必要があります。
        fail: fail.bind(this), // これは固定構文です。this をバインドする必要があります。
        slideStyle: {
          width: 540, // デフォルトの幅は 540 rpx です。
          height: 60, // デフォルトの高さは 60 rpx です。
        },
        language: "cn",
        region: "cn",
      };
      // Captcha プラグインを初期化します。
      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: "Enter your username and password.",
            icon: "none",
          });
        }
      },
      // 再度認証するには、このメソッドを呼び出して Captcha を再読み込みします。
      reloadCaptcha = function () {
        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 your username"
        @input="inputUsername"
      />
    </view>
    <view class="input-group">
      <view class="label">Password:</view>
      <input
        class="input"
        type="password"
        placeholder="Enter your 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>
  // Captcha プラグインインスタンスを取得します。
  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: Get your business verification result from the result. // ビジネス検証が成功したかどうかを指定します。これはブール値で、オプションです。ビジネス検証結果がない場合、bizResult は空にできます。
    };
  };

  // ビジネスリクエスト検証結果コールバック関数。
  var onBizResultCallback = function (bizResult) {
    if (bizResult === true) {
      // ビジネス検証が成功した場合のロジック (成功メッセージの表示など)。
      uni.showToast({
        title: "Business verification successful!",
        duration: 2000,
        icon: "success",
      });
    } else {
      // ビジネス検証が失敗した場合のロジック (失敗メッセージの表示など)。
      uni.showToast({
        title: "Business verification failed!",
        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), // これは固定構文です。this をバインドする必要があります。
        onBizResultCallback: onBizResultCallback.bind(this), // これは固定構文です。this をバインドする必要があります。
        slideStyle: {
          width: 540, // デフォルトの幅は 540 rpx です。
          height: 60, // デフォルトの高さは 60 rpx です。
        },
        language: "cn",
        region: "cn",
      };
      // Captcha プラグインを初期化します。
      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: "Enter your username and password.",
            icon: "none",
          });
        }
      },
    },
  };
</script>
説明

Vue2 の統合プロセスは、Vue3 のプロセスと同様です。ただし、Captcha が使用されているページで、パッチファイルをインポートし、Vue オブジェクトのネイティブ __patch__ メソッドを置き換える必要もあります。

  1. patch.js ファイルをインポートします。

  2. `beforeCreate` フックの先頭で、__patch__ 関数を置換します。

  3. `beforeDestroy` フックで __patch__ 関数を元に戻します。

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

data() {
  return {
    data: {
      originalPatch: Vue.prototype.__patch__,
    },
  },
},
beforeCreate() {
  this.originalPatch = Vue.prototype.__patch__; // 元のパッチ関数を保存します。
  Vue.prototype.__patch__ = myPatch; // パッチ関数を置き換えます。
  // Captcha の初期化については、Vue3 のコードを参照してください。
},
beforeDestroy() {
  Vue.prototype.__patch__ = this.originalPatch; // パッチ関数を元に戻します。
}

パラメーター

V3 アーキテクチャ

パラメーター

タイプ

必須

デフォルト

説明

SceneId

String

はい

なし

認証シナリオの ID。この値は、認証シナリオを作成した後に取得できます。

mode

String

はい

なし

Captcha モード。保護とユーザーエクスペリエンスのため、popup のみがサポートされています。

success

Function

はい

なし

Captcha 認証が成功した場合のコールバック関数です。この関数は検証パラメーターを返します。このコールバック関数で CaptchaVerifyParam を取得し、ご使用のサーバーに CaptchaVerifyParam の検証をリクエストできます。

fail

Function

はい

なし

Captcha 認証が失敗した場合のコールバック関数。この関数は失敗のエラーコードを返します。

slideStyle

Object

いいえ

{ width: 540, height: 60 }

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

説明
  • Captcha は、ポリシーモデルが判断を下すために、スライドを通じて十分な情報を収集する必要があります。したがって、スライダーの最小幅 (width 値) を 540 rpx に設定します。width 値が 540 rpx 未満の場合、システムはそれを 540 rpx として設定します。

  • このパラメーターはスライダーモードでのみ有効であり、パズル Captcha には適用されません。パズル Captcha を使用する場合、CSS をオーバーライドしてスタイルを強制的に変更しないでください。パズル Captcha の画像サイズと認証の答えは事前に設定され、固定されています。スタイルを変更すると、認証が失敗します。

language

String

いいえ

cn

Captcha 2.0 でサポートされている言語タイプ

region

String

いいえ

cn

Captcha インスタンスが属するリージョン。有効な値:

  • cn: 中国本土。

  • sgp: シンガポール。

説明
  • クライアント統合のリージョンパラメーターがサーバー統合のエンドポイントと異なる場合、認証リクエストはエラーを返します。

  • このプロダクトには、中国本土 (中国 (上海)) とシンガポールに管理コンソールプラットフォームがあります。設定した呼び出しパラメーターに基づいて、クライアントによって収集された行動データ、デバイスデータ、およびその他の情報が、処理のために対応するセンターに送り返されます。これは主にセキュリティ認証のためです。

V2 アーキテクチャ

パラメーター

タイプ

必須

デフォルト

説明

SceneId

String

はい

なし

認証シナリオの ID。この値は、認証シナリオを作成した後に取得できます。

mode

String

はい

なし

Captcha モード。保護とユーザーエクスペリエンスのため、popup のみがサポートされています。

captchaVerifyCallback

Function

はい

captchaVerifyCallback

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

onBizResultCallback

Function

はい

onBizResultCallback

ビジネスリクエスト結果のコールバック関数。これを使用して、認証結果を処理するロジックを設定します。

slideStyle

Object

いいえ

{ width: 540, height: 60 }

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

説明
  • Captcha は、ポリシーモデルが判断を下すために、スライドを通じて十分な情報を収集する必要があります。したがって、スライダーの最小幅 (width 値) を 540 rpx に設定します。width 値が 540 rpx 未満の場合、システムはそれを 540 rpx として設定します。

  • このパラメーターはスライダーモードでのみ有効であり、パズル Captcha には適用されません。パズル Captcha を使用する場合、CSS をオーバーライドしてスタイルを強制的に変更しないでください。パズル Captcha の画像サイズと認証の答えは事前に設定され、固定されています。スタイルを変更すると、認証が失敗します。

language

String

いいえ

cn

Captcha 2.0 でサポートされている言語タイプ

region

String

いいえ

cn

Captcha インスタンスが属するリージョン。有効な値:

  • cn: 中国本土。

  • sgp: シンガポール。

説明
  • クライアント統合のリージョンパラメーターがサーバー統合のエンドポイントと異なる場合、認証リクエストはエラーを返します。

  • このプロダクトには、中国本土 (中国 (上海)) とシンガポールに管理コンソールプラットフォームがあります。設定した呼び出しパラメーターに基づいて、クライアントによって収集された行動データ、デバイスデータ、およびその他の情報が、処理のために対応するセンターに送り返されます。これは主にセキュリティ認証のためです。