PaymentGatewayAsyncAdapter Interface
Namespace
Usage
Implementing an asynchronous adapter also requires the processNotification method from the GatewayNotificationResponse class.
Example
global with sharing class SampleAsyncAdapter
implements commercepayments.PaymentGatewayAsyncAdapter,
commercepayments.PaymentGatewayAdapter {
global SampleAsyncAdapter() {
}
global commercepayments.GatewayResponse processRequest(
commercepayments.paymentGatewayContext gatewayContext) {
}
global commercepayments.GatewayNotificationResponse processNotification(
commercepayments.PaymentGatewayNotificationContext gatewayNotificationContext) {
}
}
PaymentGatewayAsyncAdapter Methods
The following are methods for PaymentGatewayAsyncAdapter.
processNotification(paymentGatewayNotificationContext)
Signature
global commercepayments.GatewayNotificationResponse processNotification(commercepayments.PaymentGatewayNotificationContext var1)
Parameters
- paymentGatewayNotificationContext
- Type: PaymentGatewayNotificationContext
- The PaymentGatewayNotificationContext object wraps all the information related to a gateway notification.
Return Value
Type: GatewayNotificationResponse
When the payment gateway sends a notification to the payments platform, the platform responds with a GatewayNotificationResponse indicating whether the platform succeeded or failed at receiving the notification.
PaymentGatewayAsyncAdapter Example Implementation
This is a sample implementation of the commercepayments.PaymentGatewayAsyncAdapter interface.
global with sharing class AdyenAdapter implements commercepayments.PaymentGatewayAsyncAdapter, commercepayments.PaymentGatewayAdapter {
global AdyenAdapter() {}
global commercepayments.GatewayResponse processRequest(commercepayments.paymentGatewayContext gatewayContext) {
}
global commercepayments.GatewayNotificationResponse processNotification(commercepayments.PaymentGatewayNotificationContext gatewayNotificationContext) {
}
}
commercepayments.RequestType requestType = gatewayContext.getPaymentRequestType();
if (requestType == commercepayments.RequestType.Capture) {
req.setEndpoint('/pal/servlet/Payment/v52/capture');
body = buildCaptureRequest((commercepayments.CaptureRequest)gatewayContext.getPaymentRequest());
} else if (requestType == commercepayments.RequestType.ReferencedRefund) {
req.setEndpoint('/pal/servlet/Payment/v52/refund');
body = buildRefundRequest((commercepayments.ReferencedRefundRequest)gatewayContext.getPaymentRequest());
}
req.setBody(body);
req.setMethod('POST');
commercepayments.PaymentsHttp http = new commercepayments.PaymentsHttp();
HttpResponse res = null;
try {
res = http.send(req);
} catch(CalloutException ce) {
commercepayments.GatewayErrorResponse error = new commercepayments.GatewayErrorResponse('500', ce.getMessage());
return error;
}
if ( requestType == commercepayments.RequestType.Capture) {
response = createCaptureResponse(res);
} else if ( requestType == commercepayments.RequestType.ReferencedRefund) {
response = createRefundResponse(res);
}
return response;
commercepayments.PaymentGatewayNotificationRequest notificationRequest = gatewayNotificationContext.getPaymentGatewayNotificationRequest();
Blob request = notificationRequest.getRequestBody();
Map<String, Object> jsonReq = (Map<String, Object>)JSON.deserializeUntyped(request.toString());
List<Object> notificationItems = (List<Object>)jsonReq.get('notificationItems');
Map<String, Object> notificationRequestItem =
(Map<String, Object>)((Map<String, Object>)notificationItems[0]).get('NotificationRequestItem');
Boolean success = Boolean.valueOf(notificationRequestItem.get('success'));
String pspReference = (String)notificationRequestItem.get('pspReference');
String eventCode = (String)notificationRequestItem.get('eventCode');
Double amount = (Double)((Map<String, Object>)notificationRequestItem.get('amount')).get('value');
commercepayments.NotificationStatus notificationStatus = null;
if (success) {
notificationStatus = commercepayments.NotificationStatus.Success;
} else {
notificationStatus = commercepayments.NotificationStatus.Failed;
}
commercepayments.BaseNotification notification = null;
if ('CAPTURE'.equals(eventCode)) {
notification = new commercepayments.CaptureNotification();
} else if ('REFUND'.equals(eventCode)) {
notification = new commercepayments.ReferencedRefundNotification();
}
notification.setStatus(notificationStatus);
notification.setGatewayReferenceNumber(pspReference);
notification.setAmount(amount);
commercepayments.NotificationSaveResult saveResult = commercepayments.NotificationClient.record(notification);
commercepayments.GatewayNotificationResponse gnr = new commercepayments.GatewayNotificationResponse();
if (saveResult.isSuccess()) {
system.debug('Notification accepted by platform');
} else {
system.debug('Errors in the result '+ Blob.valueOf(saveResult.getErrorMessage()));
}
gnr.setStatusCode(200);
gnr.setResponseBody(Blob.valueOf('[accepted]'));
return gnr;