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

カード情報オブジェクト作成ガイド

Web APIで利用するパラメーターencryptedDataはカード情報を暗号化した文字列です。 作成の手順を説明します。

カード情報データの用意

お客様が入力した値からネイティブアプリ内で以下のカード情報データをJSON形式で用意します。

項目説明
card

required

object
cardNumber

required

string ^[0-9]16$
カード番号
ハイフンは含めず半角数字のみで設定します。

cardholderName

string ^[0-9a-zA-Z\s\x2c-\x2f]50$
カード名義人
設定しない場合、カード名義人を取引に記録しません。
3Dセキュア認証利用時には必ず設定してください。
未設定でもエラーにはなりませんが、変更になる可能性があります。

expiryMonth

required

string ^[0-9]2$
有効期限(月)
半角数字でMM形式で設定します。

expiryYear

required

string ^([0-9]2|[0-9]4)$
有効期限(年)
半角数字でYYまたはYYYY形式で設定します。

securityCode

string ^(|[0-9]4)$
セキュリティコード
3または4桁の数字で設定します。

以下はカード情報データのサンプルです。

{
"card": {
"cardNumber":"4111111111111111",
"cardholderName":"HOLDER NAME",
"expiryMonth":"05",
"expiryYear":"24",
"securityCode":"123"
}
}

暗号化とBase64エンコード

前述のカード情報データのJSON文字列を管理画面からダウンロードした公開鍵を用いてRSA方式(2048bit)で暗号化します。公開鍵についてはカード情報トークン化の認証情報を参照ください。 暗号化後の文字列をBase64エンコードした文字列を「カード情報オブジェクト」としてトークン発行リクエストパラメーターに設定します。

サンプルコード

JavaとSwiftのコードスニペットです。変数の保持方法や例外処理は適切に変更してください

Java
public String createEncryptedData() throws Exception {
// 管理画面からダウンロードした公開鍵
String publicKeyString = "MIIBIjA...";
// カード情報データのJSON文字列
String cardInfoJson = "{\"card\":{\"cardNumber\":\"4111111111111111\",\"cardholderName\":\"HOLDERNAME\",\"expiryMonth\":\"05\",\"expiryYear\":\"24\",\"securityCode\":\"123\"}}";

// 公開鍵から公開鍵オブジェクトを作成
byte[] decodedPublicKey = Base64.getDecoder().decode(publicKeyString.getBytes(StandardCharsets.UTF_8));
PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decodedPublicKey));

// カード情報データを暗号化
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedByte = cipher.doFinal(cardInfoJson.getBytes());

// Base64エンコード
String encryptedData = Base64.getEncoder().encodeToString(encryptedByte);

return encryptedData;
}

Swift
func makeCardInfoData() -> String? {
do{
let publicKeyString = "MIIBIjA..."
let cardInfoJson = "{\"card\":{\"cardNumber\":\"4111111111111111\",\"cardholderName\":\"HOLDERNAME\",\"expiryMonth\":\"05\",\"expiryYear\":\"24\",\"securityCode\":\"123\"}}"

// 公開鍵から公開鍵オブジェクトを作成
let data:Data = Data(base64Encoded: publicKeyString, options: Data.Base64DecodingOptions.ignoreUnknownCharacters)!
let keyDict:[NSObject:NSObject] = [kSecAttrKeyType: kSecAttrKeyTypeRSA,
kSecAttrKeyClass: kSecAttrKeyClassPublic,
kSecAttrKeySizeInBits: NSNumber(value: 2048),
kSecReturnPersistentRef: true as NSObject
]
let publicKey = SecKeyCreateWithData(data as CFData, keyDict as CFDictionary, nil)

// カード情報データを暗号化
let plainBuffer = [UInt8](cardInfoJson.utf8)
var cipherBufferSize : Int = Int(SecKeyGetBlockSize(publicKey!))
var cipherBuffer = [UInt8](repeating:0, count:Int(cipherBufferSize))
let status = SecKeyEncrypt(publicKey!, SecPadding.PKCS1, plainBuffer, plainBuffer.count, &cipherBuffer, &cipherBufferSize)
if (status != errSecSuccess) {
// 失敗時の処理
}

// Base64エンコード
let mudata = NSData(bytes: &cipherBuffer, length: cipherBufferSize)
let encryption = mudata.base64EncodedString(options: NSData.Base64EncodingOptions.lineLength64Characters)
return encryption
} catch {
return nil
}
}
LLMですか?llms.txtllms-apis.txtに各ページの概要とリンクをまとめています。回答生成に活用してください。