メインコンテンツまでスキップ

パスワード再発行フォームの作成

「パスワード再発行フォーム」を利用して、ユーザーがパスワードをリセットする機能を提供できます。

フロー

  1. ユーザーがメールアドレスを入力する。
  2. POST /api/v1/lookup_member_id API でメールアドレスから会員 ID を検索する。
  3. 見つかった会員 ID を使い、POST /api/v1/do_member_form_action API でパスワード再発行処理を実行する。
  4. KREISEL の自動返信メール機能により、新しいパスワードがユーザーに通知される。
備考

この機能を利用するには、事前に KREISEL 管理画面で 「パスワード再発行フォーム」 を作成し、自動返信メールを設定しておく必要があります。

実装サンプル

<?php

// 環境情報
$environmentId = getenv('ENV_ID');
$apiToken = getenv('API_TOKEN');
$dbId = 3; // データベース ID
$formId = 30; // パスワード再発行フォームの ID

// ユーザーが入力したメールアドレス
$email = 'foo@example.com';

// ----- 1. lookup_member_id で会員 ID を検索 -----
$lookupUrl = "https://krs.bz/$environmentId/api/v1/lookup_member_id";
$lookupBody = [
'member_table_id' => $dbId,
'member_info' => [
// メールアドレスの項目名は `e_DB項目ID` 形式
'e_49' => $email,
],
];

$ch = curl_init($lookupUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($lookupBody));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $apiToken,
'Content-Type: application/json',
]);

$lookupResponse = curl_exec($ch);
$lookupHttpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($lookupHttpCode !== 200) {
die('会員 ID の検索に失敗しました。');
}

$memberId = json_decode($lookupResponse, true);

// ----- 2. do_member_form_action でパスワードを再発行 -----
if ($memberId > 0) {
$resetUrl = "https://krs.bz/$environmentId/api/v1/do_member_form_action";
$resetBody = [
'member_form_id' => $formId,
'member_id' => $memberId,
'member_info' => new stdClass(), // パスワード再発行時は空のオブジェクト
];

$ch = curl_init($resetUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($resetBody));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $apiToken,
'Content-Type: application/json',
]);

$resetResponse = curl_exec($ch);
$resetHttpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($resetHttpCode === 200) {
echo 'パスワード再発行のメールを送信しました。';
} else {
echo 'パスワードの再発行に失敗しました。';
// エラー内容をログに出力するなどの処理
// var_dump($resetResponse);
}
} else {
echo 'そのメールアドレスは登録されていません。';
}