パラメータ型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の長さに制限があります。最大2,000バイトを目安に実行パラメータを設定してください。
- パラメータ型URLに付与するパラメータはお客様の目に触れるため、必要最低限の項目にし、設定IDのデフォルト値を積極的に活用することをお勧めします。
サンプルコード
決済URL生成
- Java
- PHP
- Ruby
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();
}
}
<?php
$shopId = 'YourShopId';
$shopPass = 'YourShopPassword';
mb_internal_encoding('UTF-8');
// JSON文字列例
$param = [
'configid' => 'YourConfigId',
'transaction' => [
'OrderID' => 'SampleOrderID',
'Amount' => '1000',
'Tax' => '100',
'Overview' => 'SampleOverview'
]
];
try {
// JSON文字列をBASE64エンコード(URLSafe/文字コード:UTF-8)
$param_json = json_encode( $param, JSON_UNESCAPED_UNICODE );
$base64Encode = str_replace(array('+', '/'),array('-', '_'),base64_encode( $param_json ));
// BASE64エンコードしたJSONとショップパスワードを文字列結合し、SHA256でハッシュ化
$hash = hash( 'sha256', $base64Encode . $shopPass );
// BASE64エンコードしたJSONに「.(ドット)」及び、SHA256ハッシュを文字列結合
$parameter = $base64Encode . '.' . $hash;
// 決済URL、ショップID、機能種別(※)、ハッシュ付き実行パラメータセットを文字列結合しURLを生成
// (※)決済:checkout、カード編集:member
echo "リンクタイプ Plus 決済URL : https://link.mul-pay.jp/v1/plus/{$shopId}/checkout/{$parameter}" ;
} catch ( Exception $e ) {
echo $e;
return false;
}
return true;
?>
# encoding: Windows-31J
require 'base64'
require 'digest'
require 'json'
shopId = "YourShopId"
shopPass = "YourShopPassword"
# JSON文字列例
param = {
"configid" => "YourConfigId",
"transaction" => {
"OrderID" => "SampleOrderID",
"Amount" => "1000",
"Tax" => "100",
"Overview" => "SampleOverview"
}
}
begin
# JSON文字列をBASE64エンコード(URLSafe/文字コード:UTF-8)
param_json = param.to_json
base64Encode = Base64.urlsafe_encode64(param_json)
# BASE64エンコードしたJSONとショップパスワードを文字列結合し、SHA256でハッシュ化
hash = Digest::SHA256.hexdigest(base64Encode + shopPass)
# BASE64エンコードしたJSONに「.(ドット)」及び、SHA256ハッシュを文字列結合
parameter = base64Encode + "." + hash
# 決済URL、ショップID、機能種別(※)、ハッシュ付き実行パラメータセットを文字列結合しURLを生成
# (※)決済:checkout、カード編集:member
puts "リンクタイプ Plus 決済URL : " + "https://link.mul-pay.jp/v1/plus/" + shopId + "/checkout/" + parameter
rescue => error
puts error
end
カード編集URL生成
- Java
- PHP
- Ruby
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();
}
}
<?php
$shopId = 'YourShopId';
$shopPass = 'YourShopPassword';
mb_internal_encoding('UTF-8');
// JSON文字列例
$param = [
'configid' => 'YourConfigId',
'member' => [
'MemberID' => 'SampleMemberID',
'MemberName' => 'SampleMemberName',
'Cardeditno' => 'SampleCardeditno'
]
];
try {
// JSON文字列をBASE64エンコード(URLSafe/文字コード:UTF-8)
$param_json = json_encode( $param, JSON_UNESCAPED_UNICODE );
$base64Encode = str_replace(array('+', '/'),array('-', '_'),base64_encode( $param_json ));
// BASE64エンコードしたJSONとショップパスワードを文字列結合し、SHA256でハッシュ化
$hash = hash( 'sha256', $base64Encode . $shopPass );
// BASE64エンコードしたJSONに「.(ドット)」及び、SHA256ハッシュを文字列結合
$parameter = $base64Encode . '.' . $hash;
// カード編集URLにショップID、機能種別(※)、ハッシュ付き実行パラメータセットを文字列結合しURLを生成
// (※)決済:checkout、カード編集:member
echo "リンクタイプ Plus 決済URL : https://link.mul-pay.jp/v1/plus/{$shopId}/member/{$parameter}" ;
} catch ( Exception $e ) {
echo $e;
return false;
}
return true;
?>
# encoding: Windows-31J
require 'base64'
require 'digest'
require 'json'
shopId = "YourShopId"
shopPass = "YourShopPassword"
# JSON文字列例
param = {
"configid" => "YourConfigId",
"member" => {
"MemberID" => "SampleMemberID",
"MemberName" => "SampleMemberName",
"Cardeditno" => "SampleCardeditno"
}
}
begin
# JSON文字列をBASE64エンコード(URLSafe/文字コード:UTF-8)
param_json = param.to_json
base64Encode = Base64.urlsafe_encode64(param_json)
# BASE64エンコードしたJSONとショップパスワードを文字列結合し、SHA256でハッシュ化
hash = Digest::SHA256.hexdigest(base64Encode + shopPass)
# BASE64エンコードしたJSONに「.(ドット)」及び、SHA256ハッシュを文字列結合
parameter = base64Encode + "." + hash
# カード編集URLにショップID、機能種別(※)、ハッシュ付き実行パラメータセットを文字列結合しURLを生成
# (※)決済:checkout、カード編集:member
puts "リンクタイプ Plus 決済URL : " + "https://link.mul-pay.jp/v1/plus/" + shopId + "/member/" + parameter
rescue => error
puts error
end