Validar una compra con OTP
NOTA:
Antes de continuar recuerda realizar los 3 pasos de Inicio
4. Enviar la tarjeta
Cargar métodos de pago
Luego de establecer la dirección de la orden, obtén los métodos de pago que se encuentran en el panel de administración del comercio, esto devolverá una lista con todos los métodos de pago disponibles para tu comercio.
const getPaymentMethods = await SDK.getPaymentMethods();
// If the payment methods are not configured correctly, this error will appear.
if (getPaymentMethods.error != null) {
console.log("Error in getPaymentMethods");
return;
}
// If the payment methods are not configured in the admin this error appears.
if (getPaymentMethods.data?.data.length == 0) {
console.log("Payment methods not configured");
return;
}
console.log(getPaymentMethods.data?.data);
El comercio usado de ejemplo tiene dos métodos de pago:
- Efectivo
- Tarjeta de crédito con el procesador de pago
{
data: [
{
enabled: true,
method_type: 'cash',
processor_name: 'cash',
specific_fields: null,
input_schema: [],
labels: [Object],
exclude_cvv: false
},
{
enabled: true,
method_type: 'credit_card',
processor_name: 'paymentez_credit',
specific_fields: null,
input_schema: [Array],
labels: [Object],
exclude_cvv: false
}
]
}
Asignar un método de pago
Para el ejemplo se usara el segundo elemento de la lista de los métodos de pago que corresponde a tarjeta de crédito.
const paymentMethod = getPaymentMethods.data?.data[1]!;
Tarjeta de crédito
Si el elemento que se selecciono de la lista de métodos de pago es de tipo CreditCard deberás de enviar el siguiente payload con la información de la tarjeta de crédito.
Puedes encontrar datos de prueba de los procesadores integrados actualmente.
if (paymentMethod.method_type == PaymentMethodTypes.CreditCard) {
const creditCard: CreditCard = {
expiry_month: "06",
expiry_year: "2025",
card_holder: "Jhon Doe",
card_holder_dni: "9999999999",
card_number: "4242424242424242",
card_cvv: "123",
address1: "Calle 12 avenida 17",
zip: "170129",
city: "Quito",
state: "Pichincha",
country: "Ecuador",
phone: "593999999999",
};
orderResp.setCreditCard(creditCard);
}
order.setPaymentMethod(paymentMethod);
Después deberás procesar el pago de la orden y verificar con OTP.
5. Verificar pago con OTP
Se enviara un código OTP al usuario y habrá que validarlo de la siguiente manera.
import { ErrorsCode } from "@d-una/checkout-sdk"
// The order is processed
const { error } = await order.processPayment();
if (error) {
// The error is verified as follows
const requireCompleteWithOTP = error.code === ErrorsCode.CompleteOrderWithOTP
if (requireCompleteWithOTP) {
// Waiting for the user to enter the otp
const userOTP = "012345";
await order.verifyPaymentWithOTP(userOTP);
}
// Do something with the error
return;
}
Si la llamada a
verifyPaymentWithOTP
es _succcesful _esto retornara la orden en la propiedad "order" y la propiedad error no tendrá un valor.
Verificar orden en el panel de administración
Listo. Si seguiste los pasos de manera correcta deberás poder ver la transacción en el panel de admin y tu código deberá verse del siguiente modo:
import { Address, Checkout, Environment, PaymentMethodTypes, CreditCard, ErrorsCode } from "@d-una/checkout-sdk";
async function Init() {
const SDK = await Checkout.init({
env: Environment.Staging,
apiKey: "Tu api Key pública"
});
const { data, error } = await SDK.getOrderTokenized("Token de la orden");
if (error) {
console.warn(error.error);
return;
}
const order = data!;
order.setGuestEmail("[email protected]");
const address: Address = {
first_name: "Jhon",
last_name: "Doe",
phone: "+51943844652",
identity_document: "123456789",
lat: -0.190974,
lng: -78.496911,
address1: "Av. América 56, Quito 170129, Ecuador",
address2: "Av. América 56, Quito 170129, Ecuador",
city: "Quito",
zipcode: "170129",
state_name: "Pichincha",
state_code: "EC",
country: "Ecuador",
address_type: "home",
additional_description: "Cachan de la florita",
is_default_address: true,
is_last_address: false,
};
// If the order is of type pickup
await order.setBillingAddress(address);
// If the order is of type delivery
// await order.setShippingRate(address);
const getPaymentMethods = await SDK.getPaymentMethods();
if (getPaymentMethods.error) {
console.warn(getPaymentMethods.error!.error);
return;
}
if (getPaymentMethods.data?.data.length == 0) {
console.warn("Métodos de pago no configurados");
return;
}
const paymentMethod = getPaymentMethods.data?.data[1]!;
// If the item in the list of payment methods is CreditCard
if (paymentMethod.method_type == PaymentMethodTypes.CreditCard) {
const creditCard: CreditCard = {
expiry_month: "06",
expiry_year: "2025",
card_holder: "Jhon Doe",
card_holder_dni: "9999999999",
card_number: "4242424242424242",
card_cvv: "123",
address1: "Calle 12 avenida 17",
zip: "170129",
city: "Quito",
state: "Pichincha",
country: "Ecuador",
phone: "593999999999",
};
order.setCreditCard(creditCard);
}
// If the item in the list of payment methods is Cash
// if (paymentMethod.method_type == PaymentMethodTypes.Cash) {
// Este método es opcional
// order.setCashChange(50);
// }
order.setPaymentMethod(paymentMethod);
// The order is processed
const { error } = await order.processPayment();
if (error) {
// The error is verified as follows
const requireCompleteWithOTP = error.code === ErrorsCode.CompleteOrderWithOTP
if (requireCompleteWithOTP) {
// Waiting for the user to enter the otp
const userOTP = "012345";
await order.verifyPaymentWithOTP(userOTP);
}
// Do something with the error
return;
}
}
Init();
import { Address, Checkout, Environment, PaymentMethodTypes, CreditCard, OtpType, ErrorsCode } from "@d-una/checkout-sdk";
async function Init() {
const SDK = await Checkout.init({
env: Environment.Staging,
apiKey: "Tu api Key pública"
});
const { data, error } = await SDK.getOrderTokenized("Token de la orden");
if (error) {
console.warn(error.error);
return;
}
const order = data!;
const userExist = await SDK.userExist("[email protected]")
if(userExist.data?.success){
// Una vez nos llegue el OTP a nuestro correo debemos comentar o eliminar esta linea
// await SDK.sendOtpToEmail('[email protected]');
// return;
const userToken = await SDK.loginWithOtp('[email protected]', '123456', OtpType.Email);
if (userToken.error){
console.warn(userToken.error!.error);
return;
}
console.log(userToken.data);
}
else{
console.warn(userExist.error!.error);
return;
}
const address: Address = {
id: 1,
user_id: "COD_DATABASE_MERCHANT",
first_name: "Jhon",
last_name: "Doe",
phone: "+51943844652",
identity_document: "123456789",
lat: -0.190974,
lng: -78.496911,
address1: "Av. América 56, Quito 170129, Ecuador",
address2: "Av. América 56, Quito 170129, Ecuador",
city: "Quito",
zipcode: "170129",
state_name: "Pichincha",
state_code: "EC",
country: "Ecuador",
address_type: "home",
additional_description: "Cachan de la florita",
is_default_address: true,
is_last_address: false,
is_billing_address: true,
created_at: new Date(),
updated_at: new Date(),
};
await order.setBillingAddress(address);
// Si la orden es de tipo delivery
// await order.setShippingRate(address);
const getPaymentMethods = await SDK.getPaymentMethods();
if (getPaymentMethods.error) {
console.warn(getPaymentMethods.error!.error);
return;
}
if (getPaymentMethods.data?.data.length == 0) {
console.warn("Métodos de pago no configurados");
return;
}
const paymentMethod = getPaymentMethods.data?.data[1]!;
if (paymentMethod.method_type == PaymentMethodTypes.CreditCard) {
const creditCard: CreditCard = {
expiry_month: "03",
expiry_year: "2025",
card_holder: "Guest",
card_holder_dni: "488888888",
card_number: "xxxxxxxx",
card_cvv: "123",
address1: "xxxx",
zip: "1417",
city: "xxx",
state: "xxx",
country: "xxx",
phone: "+51943844652",
};
order.setCreditCard(creditCard);
}
// Si el elemento de la lista de métodos de pago es Efectivo
// if (paymentMethod.method_type == PaymentMethodTypes.Cash) {
// Este método es opcional
// order.setCashChange(50);
// }
order.setPaymentMethod(paymentMethod);
// se procesa la orden
const { error } = await order.processPayment();
if (error) {
// se verifica que el error sea el siguiente
const requireCompleteWithOTP = error.code === ErrorsCode.CompleteOrderWithOTP
if (requireCompleteWithOTP) {
// esperar que el usuario ingrese el otp
const userOTP = "012345";
await order.verifyPaymentWithOTP(userOTP);
}
// do something with the error
return;
}
}
Init();
Updated about 1 year ago