コンソールで認証シナリオを追加した後、認証機能を使用する WeChat ミニプログラムページに Captcha 初期化コードを統合する必要があります。このトピックでは、このコードを統合する方法について説明します。
前提条件
Alibaba Cloud Captcha 2.0 を有効化済みであること。
WeChat ミニプログラムクライアント用の認証シナリオを作成済みであること。
WeChat ミニプログラムプラグインの統合
ネイティブ WeChat ミニプログラムとの統合
プラグインを使用する前に、ミニプログラム管理コンソールでプラグインを追加する必要があります。これを行うには、コンソールにログインし、 に移動し、AppID (wxbe275ff84246f1a4) でプラグインを検索して追加します。
ステップ 1: プラグインの統合
Captcha ミニプログラムプラグインをインポートします。
ページでプラグインを使用する前に、プロジェクトの
app.jsonファイルで Alibaba Cloud Captcha ミニプログラムプラグインを宣言します。次のコードに例を示します。説明最新のプラグインバージョンを使用していることを確認してください。最新バージョンは、 で確認できます。
V3 アーキテクチャ
{ "plugins": { "AliyunCaptcha": { "version": "3.0.0", // ミニプログラムプラグインの最新バージョンを選択します。 "provider": "wxbe275ff84246f1a4" } } }V2 アーキテクチャ
{ "plugins": { "AliyunCaptcha": { "version": "2.3.0", // ミニプログラムプラグインの最新バージョンを選択します。 "provider": "wxbe275ff84246f1a4" } } }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: プラグインの統合
Captcha ミニプログラムプラグインをインポートします。
ページでプラグインを使用する前に、プロジェクトの
app.config.jsファイルで Alibaba Cloud Captcha ミニプログラムプラグインを宣言します。次のコードに例を示します。説明最新のプラグインバージョンを使用していることを確認してください。最新バージョンは、 で確認できます。
V3 アーキテクチャ
{ "plugins": { "AliyunCaptcha": { "version": "3.0.0", // ミニプログラムプラグインの最新バージョンを選択します。 "provider": "wxbe275ff84246f1a4" } } }V2 アーキテクチャ
{ "plugins": { "AliyunCaptcha": { "version": "2.3.0", // ミニプログラムプラグインの最新バージョンを選択します。 "provider": "wxbe275ff84246f1a4" } } }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` ディレクトリに手動で追加できます。
Vite を使用してパッケージングする場合、互換性の問題により、WeChat 開発者ツールに次のエラーメッセージが表示されることがあります。

この問題を解決するには、パッケージ化されたプロジェクトの `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: プラグインの統合
Captcha ミニプログラムプラグインをインポートします。
ページでプラグインを使用する前に、プロジェクトの
manifest.jsonファイルで Alibaba Cloud Captcha ミニプログラムプラグインを宣言します。次のコードに例を示します。説明最新のプラグインバージョンを使用していることを確認してください。最新バージョンは、 で確認できます。
V3 アーキテクチャ
"mp-weixin": { "plugins": { "AliyunCaptcha": { "version": "3.0.0", "provider": "wxbe275ff84246f1a4", } } }V2 アーキテクチャ
{ "plugins": { "AliyunCaptcha": { "version": "2.3.0", // ミニプログラムプラグインの最新バージョンを選択します。 "provider": "wxbe275ff84246f1a4" } } }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__ メソッドを置き換える必要もあります。
patch.js ファイルをインポートします。
`beforeCreate` フックの先頭で、
__patch__関数を置換します。`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 認証が成功した場合のコールバック関数です。この関数は検証パラメーターを返します。このコールバック関数で |
fail | Function | はい | なし | Captcha 認証が失敗した場合のコールバック関数。この関数は失敗のエラーコードを返します。 |
slideStyle | Object | いいえ | { width: 540, height: 60 } | スライダー Captcha のスタイル。幅と高さを rpx でカスタマイズできます。 説明
|
language | String | いいえ | cn | Captcha 2.0 でサポートされている言語タイプ。 |
region | String | いいえ | cn | Captcha インスタンスが属するリージョン。有効な値:
説明
|
V2 アーキテクチャ
パラメーター | タイプ | 必須 | デフォルト | 説明 |
SceneId | String | はい | なし | 認証シナリオの ID。この値は、認証シナリオを作成した後に取得できます。 |
mode | String | はい | なし | Captcha モード。保護とユーザーエクスペリエンスのため、popup のみがサポートされています。 |
captchaVerifyCallback | Function | はい | captchaVerifyCallback | ビジネスリクエスト (Captcha 認証付き) のコールバック関数。詳細については、コード例のコメントをご参照ください。 |
onBizResultCallback | Function | はい | onBizResultCallback | ビジネスリクエスト結果のコールバック関数。これを使用して、認証結果を処理するロジックを設定します。 |
slideStyle | Object | いいえ | { width: 540, height: 60 } | スライダー Captcha のスタイル。幅と高さを rpx でカスタマイズできます。 説明
|
language | String | いいえ | cn | Captcha 2.0 でサポートされている言語タイプ。 |
region | String | いいえ | cn | Captcha インスタンスが属するリージョン。有効な値:
説明
|