メインコンテンツまでスキップ
Markdownをコピー

パラメータ型URL生成

パラメータ型URLは、実行パラメータをURL内に含める形式です。
APIを実行せずに加盟店様のシステムでURLを生成できます。

パラメータ型URLを加盟店様のシステムで生成する方法を説明します。

このようなケースに適しています
  • パラメータ型URLを自社システムで生成したい
  • APIを使わずにリンクタイプ Plus URLを生成したい

キー型URLを利用する場合は、管理画面で生成またはAPIで生成をご確認ください。

URL生成手順

決済URL・カード編集URLともに、以下の共通手順でURLを生成します。

1. 実行パラメータセット(JSON)を作成

機能に応じた実行パラメータをJSON形式で作成します。

決済URLの場合:

{
"configid": "C01",
"transaction": {
"OrderID": "OI001",
"Amount": "1000"
}
}

カード編集URLの場合:

{
"configid": "C01",
"member": {
"MemberID": "M001",
"Cardeditno": "CE001"
}
}

実行パラメータは以下のページを参照してください。

2. base64エンコード(URLSafe)を実行

作成したJSONを、URLSafeなbase64でエンコードします。

  • 文字コード:UTF-8
  • URLSafe形式(+-/_に置換)
注意

URLSafeではない場合、URLに「+」「/」「=」の文字列が含まれる可能性があり、アクセス時にエラーとなります。
末尾の「=(パディング)」は許可されています。

3. SHA256ハッシュを算出

base64エンコード済み文字列にショップパスワードを結合し、SHA256ハッシュを算出します。

SHA256([base64エンコード済み文字列] + [ショップパスワード])

4. base64文字列とハッシュを結合

base64文字列とハッシュを .(ドット)で結合し、ハッシュ付き実行パラメータセットを完成させます。

[base64エンコード済み実行パラメータセット].[SHA256ハッシュ]

URL仕様

生成されるURLの構成は、パラメータ型URLの構成を参照してください。

ハッシュによる改ざん検知

お客様がリンクタイプ Plus URLにアクセスすると、当サービスはURLからハッシュ付き実行パラメータを取得し、ハッシュ値の検証を行います。

  • ハッシュ値が正しい場合:決済画面またはカード編集画面を表示します。
  • ハッシュ値が異なる場合:不正なアクセスと判断し、エラー画面を表示します。

このチェック処理により、悪意のある実行パラメータセットの改ざんを検知・ブロックします。

注意事項

パラメータ設定時の注意
  • 生成したURLは、お客様が画面を表示するまで、パラメータの正誤を確認できません。
    不正な値が設定されている場合、画面表示時にエラーが発生し、お客様が決済やカード編集を行えなくなります。パラメータの設定漏れや誤りがないよう十分にご注意ください。
  • 実行パラメータのJSONキーは、大文字・小文字を区別します。正確に設定してください。
  • URLSafeなbase64エンコードを使用してください。
    URLSafeでない場合、URLに「+」「/」「=」といった文字が含まれる可能性があり、アクセス時にエラーとなることがあります(末尾の「=(パディング)」は許可されます)。
  • 文字コードはUTF-8を使用してください。
URL長の目安とパラメータの最適化
  • ブラウザによってはURLの長さに制限があります。最大2,000バイトを目安に実行パラメータを設定してください。
  • パラメータ型URLに付与するパラメータはお客様の目に触れるため、必要最低限の項目にし、設定IDのデフォルト値を積極的に活用することをお勧めします。

サンプルコード

決済URL生成

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

/**
* リンクタイプ Plus v1 URL生成
* Java8(JDK1.8)にて動作検証済みです。
*/
public class CreateLinkplusUrl {

public static void main(String[] args) {

String shopId = "YourShopId";
String shopPass = "YourShopPassword";

// JSON文字列例
String jsonStr =
"{" +
" \"configid\": \"001\"," +
" \"transaction\": {" +
" \"OrderID\": \"sample\"," +
" \"Amount\": 200," +
" \"Tax\": 10," +
" \"Overview\": \"サンプル\"" +
" }" +
"}";

try {

// JSON文字列をBASE64エンコード(URLSafe/文字コード:UTF-8)
String base64Encode = Base64.getUrlEncoder().encodeToString(jsonStr.getBytes("UTF-8"));

// BASE64エンコードしたJSONとショップパスワードを文字列結合し、SHA256でハッシュ化
String hash = sha256(base64Encode + shopPass);

// BASE64エンコードしたJSONに「.(ドット)」及び、SHA256ハッシュを文字列結合
String parameter = base64Encode + "." + hash;

// 決済URL、ショップID、機能種別(※)、ハッシュ付き実行パラメータセットを文字列結合しURLを生成
// (※)決済:checkout、カード編集:member
System.out.println("リンクタイプ Plus 決済URL : " +
"https://link.mul-pay.jp/v1/plus/" + shopId + "/checkout/" + parameter);

} catch (Exception e) {
System.out.println(e.toString());
}
}

/**
* ハッシュ値生成
* @param target
* @return ハッシュ値
*/
private static String sha256(String target) {
StringBuffer buf = new StringBuffer(1024);
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(target.getBytes());
byte[] digest = md.digest();
for (int i = 0; i < digest.length; i++) {
buf.append(String.format("%02x", digest[i]));
}
} catch (NoSuchAlgorithmException e) {
System.out.println(e.toString());
}

return buf.toString();
}
}

カード編集URL生成

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

/**
* リンクタイプ Plus v1 URL生成
* Java8(JDK1.8)にて動作検証済みです。
*/
public class CreateLinkplusUrl {

public static void main(String[] args) {

String shopId = "YourShopId";
String shopPass = "YourShopPassword";

// JSON文字列例
String jsonStr =
"{" +
" \"configid\": \"001\"," +
" \"member\": {" +
" \"MemberID\": \"sample\"," +
" \"MemberName\": \"サンプル\"," +
" \"Cardeditno\": \"sample001\"" +
" }" +
"}";

try {

// JSON文字列をBASE64エンコード(URLSafe/文字コード:UTF-8)
String base64Encode = Base64.getUrlEncoder().encodeToString(jsonStr.getBytes("UTF-8"));

// BASE64エンコードしたJSONとショップパスワードを文字列結合し、SHA256でハッシュ化
String hash = sha256(base64Encode + shopPass);

// BASE64エンコードしたJSONに「.(ドット)」及び、SHA256ハッシュを文字列結合
String parameter = base64Encode + "." + hash;

// カード編集URLにショップID、機能種別(※)、ハッシュ付き実行パラメータセットを文字列結合しURLを生成
// (※)決済:checkout、カード編集:member
System.out.println("リンクタイプ Plus カード編集URL : " +
"https://link.mul-pay.jp/v1/plus/" + shopId + "/member/" + parameter);

} catch (Exception e) {
System.out.println(e.toString());
}
}

/**
* ハッシュ値生成
* @param target
* @return ハッシュ値
*/
private static String sha256(String target) {
StringBuffer buf = new StringBuffer(1024);
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(target.getBytes());
byte[] digest = md.digest();
for (int i = 0; i < digest.length; i++) {
buf.append(String.format("%02x", digest[i]));
}
} catch (NoSuchAlgorithmException e) {
System.out.println(e.toString());
}

return buf.toString();
}
}
LLMですか?llms.txtllms-apis.txtに各ページの概要とリンクをまとめています。回答生成に活用してください。