1private static SavedPaymentMethod fetchSavedPaymentMethod(Id idToProcess) {
2 QueryUtils q = new QueryUtils(SavedPaymentMethod.SObjectType);
3 q.getSelectClause().addField('GatewayToken', false);
4 q.getSelectClause().addField('GatewayReference', false);
5 q.getSelectClause().addField('ExtendedPaymentMethodType', false);
6 q.getSelectClause().addField('type', false);
7 q.setWhereClause(' WHERE Id = \'' + idToProcess + '\'');
8 return (SavedPaymentMethod) Database.query(q.buildSOQL())[0];
9}
10
11//Sample Adyen sale transaction request.
12private String buildSaleRequest(commercepayments.SaleRequest saleRequest) {
13 String currencyIso = saleRequest.currencyIsoCode;
14 commercepayments.SaleApiPaymentMethodRequest paymentMethod = saleRequest.paymentMethod;
15 if (currencyIso == null) {
16 currencyIso = UserInfo.getDefaultCurrency();
17 }
18 JSONGenerator jsonGeneratorInstance = JSON.createGenerator(true);
19 jsonGeneratorInstance.writeStartObject();
20 jsonGeneratorInstance.writeStringField('merchantAccount', '{!$Credential.Username}');
21 jsonGeneratorInstance.writeStringField('reference', String.valueOf(Datetime.now().getTime()) + String.valueOf(Math.random()).substring(2, 8));
22
23 jsonGeneratorInstance.writeFieldName('amount');
24 jsonGeneratorInstance.writeStartObject();
25 jsonGeneratorInstance.writeStringField('value', String.ValueOf((saleRequest.amount * 100.0).intValue()));
26 jsonGeneratorInstance.writeStringField('currency', currencyIso);
27 jsonGeneratorInstance.writeEndObject();
28
29 jsonGeneratorInstance.writeFieldName('paymentMethod');
30 jsonGeneratorInstance.writeStartObject();
31 String shopperReference;
32 String token;
33 String type = 'scheme';
34 Id idToProcess = saleRequest.paymentMethod.id;
35 Map < String, String > paymentTypeMap = new Map < String, String > {
36 'us_bank_account' => 'ach',
37 'sepa_debit' => 'sepadirectdebit',
38 'au_becs_debit' => 'directdebit_AU',
39 'bacs_debit' => 'directdebit_GB',
40 'amazon_pay' => 'amazonpay',
41 'googlepay' => 'paywithgoogle'
42 };
43 if (idToProcess.getSObjectType() == SavedPaymentMethod.SObjectType) {
44 SavedPaymentMethod savedPaymentMethod = fetchSavedPaymentMethod(idToProcess);
45 token = savedPaymentMethod.GatewayToken;
46 shopperReference = savedPaymentMethod.GatewayReference;
47 String paymentMethodType = savedPaymentMethod.type;
48 String extendedPaymentMethodType = savedPaymentMethod.ExtendedPaymentMethodType;
49 System.debug('Queried SPM record for QA override');
50 type = determinePaymentType(paymentMethodType, extendedPaymentMethodType, paymentTypeMap);
51 }
52 // Common JSON field population
53 jsonGeneratorInstance.writeStringField('type', type);
54 jsonGeneratorInstance.writeStringField('storedPaymentMethodId', token);
55 jsonGeneratorInstance.writeEndObject();
56 jsonGeneratorInstance.writeStringField('shopperInteraction', 'ContAuth');
57 jsonGeneratorInstance.writeStringField('recurringProcessingModel', 'UnscheduledCardOnFile');
58 jsonGeneratorInstance.writeStringField('shopperReference', shopperReference);
59 //jsonGeneratorInstance.writeStringField('holderName', 'John Smith');
60 jsonGeneratorInstance.writeNumberField('captureDelayHours', 0);
61 jsonGeneratorInstance.writeEndObject();
62 return jsonGeneratorInstance.getAsString();
63}