トークン化サービスの 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 情報が含まれます。次に例を示します。
1global commercepayments.GatewayResponse processRequest(commercepayments.paymentGatewayContext gatewayContext) {
2 commercepayments.RequestType requestType = gatewayContext.getPaymentRequestType();
3 commercepayments.GatewayResponse response;
4 try
5 {
6 if (requestType == commercepayments.RequestType.Tokenize) {
7 response = createTokenizeResponse((commercepayments.PaymentMethodTokenizationRequest)gatewayContext.getPaymentRequest());
8 }
9 //Add other else if statements for different request types as needed.
10 return response;
11 }
12 catch(SalesforceValidationException e)
13 {
14 commercepayments.GatewayErrorResponse error = new commercepayments.GatewayErrorResponse('400', e.getMessage());
15 return error;
16 }
17 }PaymentMethodTokenizationRequest のインスタンスを受け入れるように createTokenizeResponse メソッドを設定した後、支払ゲートウェイから受信した値に基づいて PaymentMethodTokenizationResponse のインスタンスを作成します。tokenizeResponse には、ゲートウェイのトークン化プロセスの結果が含まれます。また、トークン化が成功した場合は、トークン化された値も含まれます。次の例では、setGatewayTokenEncrypted メソッドをコールして、トークン化された値をトークン化応答に設定します。
1public commercepayments.GatewayResponse createTokenizeResponse(commercepayments.PaymentMethodTokenizationRequest tokenizeRequest) {
2 commercepayments.PaymentMethodTokenizationResponse tokenizeResponse = new commercepayments.PaymentMethodTokenizationResponse();
3 tokenizeResponse.setGatewayTokenEncrypted(encryptedValue);
4 tokenizeResponse.setGatewayTokenDetails(tokenDetails);
5 tokenizeResponse.setGatewayAvsCode(avsCode);
6 tokenizeResponse.setGatewayMessage(gatewayMessage);
7 tokenizeResponse.setGatewayResultCode(resultcode);
8 tokenizeResponse.setGatewayResultCodeDescription(resultCodeDescription);
9 tokenizeResponse.setSalesforceResultCodeInfo(resultCodeInfo);
10 tokenizeResponse.setGatewayDate(system.now());
11 return tokenizeResponse;
12 }setGatewayTokenEncrypted メソッドは、Salesforce API v52.0 以降で使用できます。このメソッドは、Salesforce の従来の暗号化を使用して、暗号化されたトークン値を設定します。設定したトークン値は、CardPaymentMethod または DigitalWallet の GatewayTokenEncrypted、あるいは AlternativePaymentMethod の GatewayToken に保存できます。setGatewayTokenEncrypted を使用して、トークン化された支払方法の値を確実に暗号化し、保護することをお勧めします。
1/** @description Method to set Gateway token to persist in Encrypted Text */
2 global void setGatewayTokenEncrypted(String gatewayTokenEncrypted) {
3 if (gatewayTokenSet) {
4 throwTokenError();
5 }
6 this.delegate.setGatewayTokenEncrypted(gatewayTokenEncrypted);
7 gatewayTokenEncryptedSet = true;
8 }インスタンス化されたクラスにゲートウェイトークンがすでにある場合は、setGatewayTokenEncrypted でエラーが発生します。