コンソールで検証シナリオを追加した後、検証機能を必要とする WeChat ミニプログラムのページに初期化コードを組み込みます。
前提条件
Captcha 2.0 が有効化済みであること。
WeChat ミニプログラムクライアント用の 検証シナリオ が作成済みであること。
WeChat ミニプログラムプラグインの統合
Native
プラグインを使用する前に、WeChat ミニプログラム管理コンソールで追加します。管理コンソールにログインし、 に移動します。アプリ ID (wxbe275ff84246f1a4) を使用してプラグインを検索し、追加します。
ステップ 1: プラグインの統合
Captcha 2.0 プラグインの宣言
ページでプラグインを使用する前に、プロジェクトの
app.jsonファイルでプラグインを宣言します。説明プラグインの最新バージョンを使用することをお勧めします。最新バージョンは で確認できます。
V3 アーキテクチャ
{ "plugins": { "AliyunCaptcha": { "version": "3.0.0", // ミニプログラムプラグインの最新バージョンを使用してください "provider": "wxbe275ff84246f1a4" } } }V2 アーキテクチャ
{ "plugins": { "AliyunCaptcha": { "version": "2.3.0", // ミニプログラムプラグインの最新バージョンを使用してください "provider": "wxbe275ff84246f1a4" } } }カスタムコンポーネントの宣言
プラグインのカスタムコンポーネントを使用するには、関連するページまたはコンポーネントの
.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: プラグインの統合
Captcha 2.0 プラグインの宣言
ページでプラグインを使用する前に、プロジェクトの
app.config.jsファイルでプラグインを宣言します。説明最新バージョンのプラグインを使用することをお勧めします。バージョンは で確認できます。
V3 アーキテクチャ
{ "plugins": { "AliyunCaptcha": { "version": "3.0.0", // ミニプログラムプラグインの最新バージョンを使用してください "provider": "wxbe275ff84246f1a4" } } }V2 アーキテクチャ
{ "plugins": { "AliyunCaptcha": { "version": "2.3.0", // ミニプログラムプラグインの最新バージョンを使用してください "provider": "wxbe275ff84246f1a4" } } }カスタムコンポーネントの宣言
プラグインのカスタムコンポーネントを使用するには、ページまたはコンポーネントの
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 ディレクトリに追加してください。
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 |パッケージングされた 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: プラグインの統合
Captcha 2.0 プラグインの宣言
ページでプラグインを使用する前に、プロジェクトの
manifest.jsonファイルでプラグインを宣言します。説明プラグインは、最新バージョンを使用することをお勧めします。最新バージョンは、で確認できます。
V3 アーキテクチャ
"mp-weixin": { "plugins": { "AliyunCaptcha": { "version": "3.0.0", "provider": "wxbe275ff84246f1a4", } } }V2 アーキテクチャ
"mp-weixin": { "plugins": { "AliyunCaptcha": { "version": "2.3.0", // ミニプログラムプラグインの最新バージョンを使用してください "provider": "wxbe275ff84246f1a4" } } }カスタムコンポーネントの宣言
プラグインのカスタムコンポーネントの使用は、標準のカスタムコンポーネントの使用と同様です。
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__ メソッドを置き換えてください。
patch.js ファイルをインポートしてください。
beforeCreate フックの開始時に
__patch__関数を置き換えてください。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 認証に成功した後にトリガーされるコールバック関数。この関数は |
fail | Function | はい | なし | CAPTCHA が失敗したときにトリガーされるコールバック関数。この関数は失敗のエラーコードを返します。 |
slideStyle | Object | いいえ | { width: 540, height: 60 } | スライダー CAPTCHA のスタイル。幅と高さを rpx 単位でカスタマイズできます。 説明
|
language | String | いいえ | cn | Captcha 2.0 がサポートする言語。 |
region | String | いいえ | cn | Captcha 2.0 インスタンスがデプロイされているリージョン。有効な値:
説明
|
onClose | Function | いいえ | なし | Captcha ポップアップウィンドウが閉じたときにトリガーされるコールバック関数: |
timeout | Number | いいえ | 10000 | 単一の CAPTCHA 初期化リクエストのタイムアウト (ミリ秒 (ms) 単位)。 |
disableMaskClick | Boolean | いいえ | false | オーバーレイのクリックを無効にするかどうかを指定します。
|
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 2.0 インスタンスがデプロイされているリージョン。有効な値:
説明
|