Usted está aquí:
Fragmentos de código de muestra para clases Apex
Utilice estas clases Apex para definir los parámetros requeridos para la integración de WhatsApp Pay.
Estas son las clases Apex de muestra que configura.
- Total de pago
- Partidas de pago
- Contexto de pedido
- Iniciaciones de pago
Total de pago
Esta clase calcula y proporciona el importe total que paga el cliente. Representa el costo de transacción final después de que el sistema aplique todos los cálculos.
public with sharing class GetPaymentTotal {
@InvocableMethod
public static List<Outputs> getPaymentTotal() {
Double amount = 0.25;
List<Outputs> result = new List<Outputs>();
RichMessaging.PaymentLineItem total = new RichMessaging.PaymentLineItem('total amount', amount);
total.amountValue = 1.5;
Outputs o1 = new Outputs();
o1.paymentLineItem = total;
result.add(o1);
return result;
}
public class Outputs {
@InvocableVariable
public RichMessaging.PaymentLineItem paymentLineItem;
}
}
Partidas de pago
Esta clase genera un recibo desglosado para el cliente. Enumera los productos o servicios individuales, como una pizza o pasta, y sus precios de modo que el comprador pueda revisar su carrito directamente en el chat de WhatsApp.
public with sharing class GetPaymentLineItems {
@InvocableMethod
public static List<List<RichMessaging.PaymentLineItem>> getLineItems() {
Double amount = 0.25;
Double amount1 = 1.25;
List<List<RichMessaging.PaymentLineItem>> result = new List<List<RichMessaging.PaymentLineItem>>();
RichMessaging.PaymentLineItem pizza = new RichMessaging.PaymentLineItem('pizza', amount);
RichMessaging.PaymentLineItem pasta = new RichMessaging.PaymentLineItem('pasta', amount1);
pizza.statusValue = RichMessaging.PaymentItemStatus.FinalCost;
pasta.statusValue = RichMessaging.PaymentItemStatus.FinalCost;
RichMessaging.OrderItemCommerceAttributes commerceAttrs = new RichMessaging.OrderItemCommerceAttributes();
commerceAttrs.retailerIdValue = 'retailed_id';
commerceAttrs.categoryValue = RichMessaging.OrderItemCategory.Product;
pizza.commerceValue = commerceAttrs;
pasta.commerceValue = commerceAttrs;
List<RichMessaging.PaymentLineItem> options = new List<RichMessaging.PaymentLineItem>{
pizza, pasta
};
result.add(options);
return result;
}
}
Contexto de pedido
Esta clase define los detalles de fondo y la logística del pedido. Actúa como las “condiciones” y la “etiqueta de envío”, y proporciona metadatos necesarios como direcciones de facturación y envío, el tiempo de caducidad del vínculo de pago y el tipo de bienes que se venden.
public with sharing class GetOrderContext {
@InvocableMethod
public static List<OrderContextOutputs> getOrderContext() {
RichMessaging.OrderContext orderContext = new RichMessaging.OrderContext();
RichMessaging.OrderExpiration orderExpiration = new RichMessaging.OrderExpiration();
orderExpiration.description = 'Expiration Description';
orderExpiration.timestamp = 2342534536L;
orderContext.expiration = orderExpiration;
orderContext.catalogId = 'CAT-001';
orderContext.typeValue = RichMessaging.OrderType.DigitalGoods;
orderContext.checkoutBehaviorValue = RichMessaging.PaymentCheckoutBehavior.QuickPay;
orderContext.referenceId = 'REF-001';
List<RichMessaging.OrderBeneficiary> beneficiaries = new List<RichMessaging.OrderBeneficiary>();
RichMessaging.OrderBeneficiary beneficiaryA = new RichMessaging.OrderBeneficiary();
beneficiaryA.name = 'beneficiary Name A';
beneficiaryA.phone = 'beneficiary Phone A';
List<String> addressLinesA = new List<String>();
addressLinesA.add('Addresss Line 1');
addressLinesA.add('Addresss Line 2');
RichMessaging.Address addressA = new RichMessaging.Address();
addressA.addressLines = addressLinesA;
addressA.subLocality = 'subLocality A';
addressA.locality = 'locality A';
addressA.postalCode = '111111';
addressA.subAdministrativeArea = 'subAdministrativeArea A';
addressA.administrativeArea = 'administrativeArea A';
addressA.country = 'India';
addressA.countryCode = 'IN';
beneficiaryA.address = addressA;
RichMessaging.OrderBeneficiary beneficiaryB = new RichMessaging.OrderBeneficiary();
beneficiaryB.name = 'beneficiary Name B';
beneficiaryB.phone = 'beneficiary Phone B';
List<String> addressLinesB = new List<String>();
addressLinesB.add('Addresss Line 1');
addressLinesB.add('Addresss Line 2');
RichMessaging.Address addressB = new RichMessaging.Address();
addressB.addressLines = addressLinesB;
addressB.subLocality = 'subLocality B';
addressB.locality = 'locality B';
addressB.postalCode = '222222';
addressB.subAdministrativeArea = 'subAdministrativeArea B';
addressB.administrativeArea = 'administrativeArea B';
addressB.country = 'India';
addressB.countryCode = 'IN';
beneficiaryB.address = addressB;
beneficiaries.add(beneficiaryA);
beneficiaries.add(beneficiaryB);
orderContext.beneficiaries = beneficiaries;
OrderContextOutputs output = new OrderContextOutputs();
output.orderContext = orderContext;
List<OrderContextOutputs> result = new List<OrderContextOutputs>();
result.add(output);
return result;
}
public class OrderContextOutputs {
@InvocableVariable
public RichMessaging.OrderContext orderContext;
}
}
Iniciaciones de pago
Esta clase configura cómo puede pagar el cliente. Especifica los métodos de pago aprobados, como PIX o Boleto, y proporciona los códigos de enrutamiento subyacentes y las claves de cuenta requeridas para procesar la transacción.
public class GetPaymentInitiations {
@InvocableMethod
public static List<List<RichMessaging.PaymentInitiation>> getPaymentInitiation() {
List<List<RichMessaging.PaymentInitiation>> result = new List<List<RichMessaging.PaymentInitiation>>();
RichMessaging.PaymentInitiation pixPaymentInitiation = new RichMessaging.PaymentInitiation();
pixPaymentInitiation.modeValue = RichMessaging.PaymentInitiationMode.ExternalPaymentApp;
RichMessaging.PaymentInitiationPix pixValue = new RichMessaging.PaymentInitiationPix();
pixValue.keyValue = '12345678901';
pixValue.keyTypeValue = RichMessaging.PaymentPixKeyType.Cpf;
pixValue.codeValue = '12345678901';
pixPaymentInitiation.pix = pixValue;
RichMessaging.PaymentInitiation boletoPaymentInitiation = new RichMessaging.PaymentInitiation();
boletoPaymentInitiation.modeValue = RichMessaging.PaymentInitiationMode.ExternalPaymentApp;
RichMessaging.PaymentInitiationBoleto boletoValue = new RichMessaging.PaymentInitiationBoleto();
boletoValue.digitableLine = '03399026944140000002628346101018898510000008848';
boletoPaymentInitiation.boleto = boletoValue;
List<RichMessaging.PaymentInitiation> options = new List<RichMessaging.PaymentInitiation>{
pixPaymentInitiation, boletoPaymentInitiation
};
result.add(options);
return result;
}
}

