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

申込情報の作成

このページでは、PocketSign Stamp を利用して申込情報を作成する方法を説明します。

あらかじめAPI の利用開始を完了し、API トークンを取得しておいてください。

シーケンス

  1. 利用者は、事業者 Web サイト上で申込情報等(署名対象となる情報)を入力し、事業者バックエンドに送信します。
  2. 事業者バックエンドは、申込情報等を Stamp API へ送信します。
    • このとき、署名が完了した後に利用者がコールバックされるべき URL(コールバック URL)を指定します。
  3. Stamp API より、利用者に署名を要求する Web ページの URL(リダイレクト URL)を事業者バックエンドへ返却します。
  4. 事業者バックエンドは、利用者をリダイレクト URL に遷移させます。
  5. 利用者は、Stamp API の署名要求ページにアクセスします。

実装例

ここでは、事業者バックエンド側で申込情報等を Stamp API へ送信する実装例を示します。

こちらの実装例で利用している API については、セッションの開始をご参照ください。

app.post('/apply', async (c) => {
const { plan } = await c.req.parseBody();

const url = new URL(c.req.url);

// ランダムかつ再利用不可能な文字列 `nonce` を生成します。
const nonce = crypto.randomUUID();

// 公的個人認証サービス(JPKI)より発行された署名用電子証明書を用いた署名について、利用者に要求を行うためのセッションを作成します。
const resp = await client.createSession(
{
// 署名が完了した後に利用者がコールバックされるべき URL(コールバック URL)を指定します。
// コールバックリクエストはGETリクエストとして送信され、署名セッションIDがクエリパラメータ `session_id` として追加されます。
callbackUrl: `${url.origin}/callback`,
// 申込情報への署名要求を指定します。
requests: [
{
// trueを設定した場合は、利用者がこの要求をスキップできなくなります。
required: true,
request: {
// 公的個人認証サービス(JPKI)より発行された署名用電子証明書による署名の作成を要求します。
case: 'digitalSignature',
value: {
// 署名対象となるデータを指定します。
content: new TextEncoder().encode(
`【申込書】\n利用規約に同意し、選択したプランに申し込みます。\nプラン: ${plan}`
),
// この値は、ユーザーに何を署名させようとしているのかを示すために利用されます。
// Markdown形式(CommonMark)で記述された文字列を指定することができます。
printableContent: `ポケットサインターネットにお申し込みいただきありがとうございます。申込内容は以下のとおりです。\n\nプラン: ${plan}`,
},
},
},
],
// この値は、セッションがFinalizeされるまでPocketSign Stampが保持します。
// ここでは、ランダムかつ再利用不可能な文字列 `nonce` を指定しています。
metadata: { nonce },
},
{
headers: {
// APIトークンを利用して認証します。
Authorization: `Bearer ${c.env?.POCKETSIGN_TOKEN}`,
},
}
);

// ユーザーのブラウザセッションと紐づけて `nonce` を保存します。
setCookie(c, 'nonce', nonce);

// 利用者を署名を要求する Web ページの URL(リダイレクト URL)に遷移させます。
return c.redirect(resp.redirectUrl);
});

次のステップ

ユーザーは、リダイレクト URL に遷移することで、PocketSign Stamp の署名要求ページにアクセスします。 そこから、ユーザーはポケットサインアプリ側で署名を行います。