この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Newer Version Available

This content describes an older version of this product. View Latest

YourGatewayName

YourGateWayName は基本クラスです。すべてのユーザゲートウェイ API クラスは、用途に応じて異なったものになります。ただし、独自のテンプレートを作成するために使用できるテンプレートが用意されています。
使用可能なエディション: Salesforce Billing のすべてのエディション

このクラスは、CyberSource 支払ゲートウェイをコールする void トークンの例を示しています。このゲートウェイは要求を受信し、TransactionResult オブジェクトを通じて応答を返します。Salesforce Billing では、応答が評価され、その応答が支払トランザクションレコードの [ゲートウェイの状況] 項目に表示されているいくつかの項目の 1 つに絞り込まれます。Salesforce Billing での支払トランザクションおよびゲートウェイ応答の管理についての詳細は、「支払トランザクションの管理」を参照してください。

1Note : Map<String, blng.TransactionParameter> is the parameter in all methods of this class
2       blng.TransactionParameter class is a global class which list of global method exposed detailed in next section 
3       and String in the map is a Unique Id which could be Invoice or Account Id
4       
5       Map<String, blng.TransactionResult> is the return for all the Methods in this class
6       blng.TransactionResult class is a global class with a list of global method detailed in next section
7       the string should be the same string of parameter
8
9       public class YourGatewayName
10{
11    //Add variables here
12    //Gateway Status related variables
13    private static Map<string, blng.TransactionResult.GatewayStatusType> mapGatewayStatusEnumTypesByStrings =
14            new Map<string, blng.TransactionResult.GatewayStatusType>();
15    static {
16        List<blng.TransactionResult.GatewayStatusType> enumValues = blng.TransactionResult.GatewayStatusType.values();
17        for (Integer i = 0; i < enumValues.size(); i++) {
18            mapGatewayStatusEnumTypesByStrings.put(enumValues.get(i).name(), enumValues.get(i));
19        }
20    }
21
22
23 // 
24    // ============================================================================
25    // CONSTANT 
26    // ============================================================================
27  
28        private static final String ACCEPT = 'ACCEPT';
29        private static final String REJECT = 'REJECT';
30        private static final String SUCCESS = 'SUCCESS';
31        private static final String FAILURE = 'FAILURE';
32        private static final String ERROR = 'ERROR';
33        private static final String DECISION = 'decision';
34
35    /**
36    * @name handleError
37    * @description populates TransactionResult with error values
38    * @Param
39    * @return NA
40    * @exception NA
41    */
42    private void handleError(blng.TransactionResult transactionResult,
43            String pointOfFailure,
44            blng.TransactionResult.GatewayStatusType gatewayStatus,
45            Exception e) {
46        String newErrorMessage = pointOfFailure + (e != null ? ': ' + e.getMessage() : '');
47
48        // if there are previous errors, set the response message by concatenating them in the right order
49        if (!transactionResult.getErrors().isEmpty()) {
50            String prevErrorMessage = '';
51            for (String err : transactionResult.getErrors()) {
52                prevErrorMessage += (String.isEmpty(prevErrorMessage) ? '' : '. ') + err;
53            }
54            transactionResult.setResponseMessage(prevErrorMessage);
55        } else {
56            transactionResult.setResponseMessage(newErrorMessage);
57        }
58
59        // set the rest of the values
60        transactionResult.setIsSuccess(false);
61        transactionResult.setError(newErrorMessage);
62        transactionResult.setResponseToValidate(FAILURE);
63        if (transactionResult.getResponseCode() != null) {
64            populateGatewayStatus(transactionResult);
65        } else {
66            // set the response code to ERROR if it does not exist, which will be in all cases except when the response returns from the gateway
67            transactionResult.setResponseCode(ERROR);
68            transactionResult.setGatewayStatus(gatewayStatus);
69        }
70    }
71    
72    /**
73    * @name populateTransactionResultForVoidToken
74    * @description Method to populate Transaction Result for CyberSource Void Token
75    * @param Map[Key => String [unique Id],Value => TransactionParameter]
76    * @return Map[Key => String [unique Id],Value => TransactionResult]
77    */ 
78    public Map<String, blng.TransactionResult> populateTransactionResultForVoidToken(Map<String, blng.TransactionParameter> mapOfTransactionParameterById)
79    {
80        Map<String, blng.TransactionResult> mapOfTransactionResultById = new Map<String, blng.TransactionResult>();
81        for(String idToProcess : mapOfTransactionParameterById.KeySet())
82        {
83            blng.TransactionParameter transactionParameterToProcess;
84            try {
85                transactionParameterToProcess = mapOfTransactionParameterById.get(idToProcess);
86                if (NULL != transactionParameterToProcess.transactionResult.getGatewayStatus()) {
87                    mapOfTransactionResultById.put(idToProcess, transactionParameterToProcess.transactionResult);
88                    continue;
89                }
90                //Populating the transaction Parameter class based on the response is success or failure
91                if(transactionParameterToProcess.getResponseValueByKey().get(DECISION) == ACCEPT)
92                {
93                    //The response is success
94                    transactionParameterToProcess.transactionResult.setResponseToValidate(SUCCESS);
95                    transactionParameterToProcess.transactionResult.setIsSuccess(true);
96                }
97                else if(transactionParameterToProcess.getResponseValueByKey().get(DECISION) == REJECT)
98                {
99                    //The response is failure
100                    transactionParameterToProcess.transactionResult.setResponseToValidate(FAILURE);
101                    transactionParameterToProcess.transactionResult.setIsSuccess(false);
102                }
103                //Populating payment gateway response
104                transactionParameterToProcess.transactionResult.setId(idToProcess);
105                transactionParameterToProcess.transactionResult.setResponseCode
106                    (transactionParameterToProcess.getResponseValueByKey().get(REASONCODE));
107
108                if(NULL != transactionParameterToProcess.transactionResult.getResponseCode())
109                {
110                    transactionParameterToProcess.transactionResult.setResponseCodeMessage
111                     (YourGatewayNameUtils.getGatewayReturnCode().get(transactionParameterToProcess.transactionResult.getResponseCode()));
112                }
113                //Populating payment gateway response
114                transactionParameterToProcess.transactionResult.setPaymentToken
115                   (transactionParameterToProcess.getResponseValueByKey().get(SUBSCRIPTIONID));
116                //Populate gateway status
117                populateGatewayStatus(transactionParameterToProcess.transactionResult);
118                mapOfTransactionResultById.put(idToProcess,transactionParameterToProcess.transactionResult);
119            } catch (Exception e) {
120                handleError(transactionParameterToProcess.transactionResult, FAILED_POPULATING_RESULT + IN_VOID_TOKEN, blng.TransactionResult.GatewayStatusType.SystemError, e);
121            }
122        }
123        //Return map of transaction results
124        return mapOfTransactionResultById;
125    } 
126
127
128
129    // default Gateway Status
130    private static final blng.TransactionResult.GatewayStatusType defaultGatewayStatus = blng.TransactionResult.GatewayStatusType.Indeterminate;
131        
132    //Generate Token method Salesforce billing interface class will use this class to Generate token 
133    public static Map<String, blng.TransactionResult> generateToken(Map<String, blng.TransactionParameter> mapOfTransactionParameterById) 
134    {
135       //Actual Implementation for Token takes place here 
136    }
137    
138    //Void Token method Salesforce billing interface class will use this class to void Token Transaction
139    public static Map<String, blng.TransactionResult> voidTokenTransaction(Map<String, blng.TransactionParameter> mapOfTransactionParameterById) 
140    {
141       //Actual Implementation for Void Token takes place here 
142       if(!mapOfTransactionParameterById.IsEmpty())
143        {
144            for(blng.TransactionParameter transactionParameterToProcess : mapOfTransactionParameterById.Values())
145            {
146                // validate gateway settings
147                try {
148                    YourGatewayNameUtils.validateGatewaySettings(transactionParameterToProcess);
149                    if (!transactionParameterToProcess.transactionResult.getErrors().IsEmpty()) {
150                        handleError(transactionParameterToProcess.transactionResult, FAILED_GATEWAY_SETTINGS + IN_VOID_TOKEN, blng.TransactionResult.GatewayStatusType.ValidationError, null);
151                        continue;
152                    }
153                } catch (Exception e) {
154                    handleError(transactionParameterToProcess.transactionResult, FAILED_GATEWAY_SETTINGS + IN_VOID_TOKEN, blng.TransactionResult.GatewayStatusType.ValidationError, e);
155                    continue;
156                }
157                // Calling YourGatewayNameUtils class to populate the Request for generate void token XML
158                try {
159                    YourGatewayNameUtils.getInstance().generateVoidTokenXML(transactionParameterToProcess);
160                } catch (Exception e) {
161                    handleError(transactionParameterToProcess.transactionResult, FAILED_XML_GENERATION + IN_VOID_TOKEN, blng.TransactionResult.GatewayStatusType.SystemError, e);
162                    continue;
163                }
164                try {
165                    // Calling YourHttpService class to send a Request
166                    YourHttpService sendHttpRequest = YourHttpService.getInstance();
167                    sendHttpRequest.addHeader('Content-type', 'text/xml');
168                    sendHttpRequest.setTokenisationHeader(transactionParameterToProcess.getGateWay().MerchantId__c, transactionParameterToProcess.getGateWay().TransactionSecurityKey__c);
169                    // Sends the request to payment gateway
170                    sendHttpRequest.post(transactionParameterToProcess.getGateWay().TestMode__c ? YOUR_GATEWAY_TEST_ENDPOINT_URL_SANDBOX : YOUR_GATEWAY_TEST_ENDPOINT_PRODUCTION,transactionParameterToProcess.getRequestBody());
171                    if(!Test.isRunningTest())
172                    {
173                        // Populating the map of Response for transaction parameter class from the response received by payment gateway
174                        transactionParameterToProcess.mapOfResponseValueByKey.putAll
175                        (YourGatewayNameUtils.getElements(sendHttpRequest.getResponse().getBodyDocument().getRootElement()));
176                    }
177                    else
178                    {
179                        Dom.Document doc = new Dom.Document();
180                        doc.load(TEST_RESPONSE_BODY); // You can provide a string for TEST_RESPONSE_BODY in test mode
181                        transactionParameterToProcess.mapOfResponseValueByKey.putAll
182                        (YourGatewayNameUtils.getElements(doc.getRootElement()));
183                    }
184                } catch (Exception e) {
185                    handleError(transactionParameterToProcess.transactionResult, FAILED_CALLOUT + IN_VOID_TOKEN, blng.TransactionResult.GatewayStatusType.SystemError, e);
186                }
187            }
188        }
189        // Calling populate Transaction Result For Void Token class to Return map of transaction results
190        return populateTransactionResultForVoidToken(mapOfTransactionParameterById);
191    }
192    
193    //Authorize Transaction method Salesforce billing interface class will use this class to Authorize Transaction
194    public static Map<String, blng.TransactionResult> authorizeTransaction(Map<String, blng.TransactionParameter> mapOfTransactionParameterById) 
195    {
196        //Actual Implementation for Authorize takes place here 
197    }
198    
199    //Capture Transaction method Salesforce billing interface class will use this class to capture Transaction
200    public static Map<String, blng.TransactionResult> captureTransaction(Map<String, blng.TransactionParameter> mapOfTransactionParameterById) 
201    {
202        //Actual Implementation for capture takes place here
203    }
204
205    //Charge Transaction method Salesforce billing interface class will use this class to Charge Transaction
206    public static Map<String, blng.TransactionResult> chargeTransaction(Map<String, blng.TransactionParameter> mapOfTransactionParameterById) 
207    {
208        //Actual Implementation for Charge takes place here
209    }
210    
211    //void Transaction method Salesforce billing interface class will use this class to void Transaction
212    public static Map<String, blng.TransactionResult> voidTransaction(Map<String, blng.TransactionParameter> mapOfTransactionParameterById) 
213    {
214        //Actual Implementation for void Transaction takes place here
215    }
216
217    //RefundTransaction method Salesforce billing interface class will use this class to Refund Transaction
218    public static Map<String, blng.TransactionResult> refundTransaction(Map<String, blng.TransactionParameter> mapOfTransactionParameterById) 
219    {
220        //Actual Implementation for Refund takes place here
221    }
222    
223    //Non Referenced Refund method Salesforce billing interface class will use this class to non referenced refund Transaction
224    public static Map<String, blng.TransactionResult> nonReferencedRefund(Map<String, blng.TransactionParameter> mapOfTransactionParameterById) 
225    {
226        //Actual Implementation for non referenced refund takes place here
227    }
228    
229    //void Refund method Salesforce billing interface class will use this class to non void Refund Transaction
230    public static Map<String, blng.TransactionResult> voidRefundTransaction(Map<String, blng.TransactionParameter> mapOfTransactionParameterById) 
231    {
232        //Actual Implementation for void Refund Transaction takes place here
233    }
234    
235    //Get payment status method Salesforce billing interface class will use this class to get payment status Transaction
236    public static Map<String, blng.TransactionResult> getPaymentStatus(Map<String, blng.TransactionParameter> mapOfTransactionParameterById) 
237    {
238        //Actual Implementation for get payment status takes place here
239    }
240    
241    //Get refund status method Salesforce billing interface class will use this class to get refund status Transaction
242    public static Map<String, blng.TransactionResult> getRefundStatus(Map<String, blng.TransactionParameter> mapOfTransactionParameterById) 
243    {
244        //Actual Implementation for get refund status takes place here
245    }
246    /**
247     * Does a SOQL lookup on the mapper table and gets the gateway status mapped to the return code
248     * Returns the default enum if no match is found
249     * @param transactionResult
250     */
251     public void populateGatewayStatus(blng.TransactionResult transactionResult) {
252         blng.TransactionResult.GatewayStatusType gatewayStatus = defaultGatewayStatus;
253         // actual implementation of mapping
254         transactionResult.setGatewayStatus(gatewayStatus);
255     }    
256}