トークン化サービスの Apex クラス実装
| 使用可能なバージョン: Salesforce Spring '21 以降 |
トークン化された支払方法の暗号化
CommercePayments は、Salesforce 項目の暗号化を使用して、DigitalWallet、CardPaymentMethod、AlternativePaymentMethod などの顧客支払方法エンティティにゲートウェイトークン値を安全に保存します。
CardPaymentMethod と DigitalWallet には、API v52.0 以降で使用可能な GatewayTokenEncrypted 項目と、API v48.0 以降で使用可能な GatewayToken 項目が含まれます。ゲートウェイトークン値は、両方の項目に保存されます。ただし、GatewayTokenEncrypted は、Salesforce のカスタム項目の従来の暗号化を使用してトークンを暗号化するため安全です。GatewayToken は、暗号化を使用しません。トークン化を安全に行うために、DigitalWallets および CardPaymentMethods では GatewayTokenEncrypted を使用することをお勧めします。AlternativePaymentMethod オブジェクトは、GatewayToken 項目を使用してトークンを保存します。ただし、この項目は、AlternativePaymentMethods で暗号化されます。
API バージョン 52.0 以降の場合、CardPaymentMethods および DigitalWallets は、GatewayTokenEncryption と GatewayToken の値を同じレコードに同時に保存できません。一方の値を割り当てようとしたときにもう一方の値が存在していると、Salesforce でエラーが発生します。
支払ゲートウェイアダプタは、PaymentMethodTokenizationRequest および PaymentMethodTokenizationResponse クラスを使用して、ゲートウェイトークンを支払ゲートウェイから取得して Salesforce で暗号化し、その値を支払方法エンティティに保存します。これらのクラスを支払ゲートウェイアダプタで設定する方法を確認しましょう。
ゲートウェイアダプタでのトークン化クラスの実装
PaymentGatewayAdapter Apex クラス内で使用するコードを以下に示します。
GatewayResponse クラスの processRequest メソッドがトークン化要求を受信すると、ゲートウェイトークンが作成され、暗号化されます。要求種別が Tokenize の場合、GatewayResponse は createTokenizeResponse メソッドをコールして、PaymentMethodTokenizationRequest クラスのインスタンスを渡します。渡された PaymentMethodTokenizationRequest オブジェクトには、トークン化プロセスの管理のために支払ゲートウェイで必要な住所および cardPaymentMethod 情報が含まれます。次に例を示します。
PaymentMethodTokenizationRequest のインスタンスを受け入れるように createTokenizeResponse メソッドを設定した後、支払ゲートウェイから受信した値に基づいて PaymentMethodTokenizationResponse のインスタンスを作成します。tokenizeResponse には、ゲートウェイのトークン化プロセスの結果が含まれます。また、トークン化が成功した場合は、トークン化された値も含まれます。次の例では、setGatewayTokenEncrypted メソッドをコールして、トークン化された値をトークン化応答に設定します。
setGatewayTokenEncrypted メソッドは、Salesforce API v52.0 以降で使用できます。このメソッドは、Salesforce の従来の暗号化を使用して、暗号化されたトークン値を設定します。設定したトークン値は、CardPaymentMethod または DigitalWallet の GatewayTokenEncrypted、あるいは AlternativePaymentMethod の GatewayToken に保存できます。setGatewayTokenEncrypted を使用して、トークン化された支払方法の値を確実に暗号化し、保護することをお勧めします。
インスタンス化されたクラスにゲートウェイトークンがすでにある場合は、setGatewayTokenEncrypted でエラーが発生します。