
VEXPay Gateway for WooCommerce lets Venezuelan shoppers pay with C2P (bank OTP / token) or a Visa/Mastercard/Maestro card through VEXPay.
You configure your own API keys from the VEXPay dashboard. This plugin does not include paid locks or trial restrictions; VEXPay is a paid payment service (serviceware).
…/wc-api/vexpay_webhook). Local sites need a public URL or tunnel.Developer docs and E2E checklist: https://github.com/chuventures/woo-vexpay-gateway
For marketplaces whose products belong to different comercios (sellers). Turn on Marketplace splits under WooCommerce Settings Payments VEXPay (off by default; while off, nothing changes). One customer payment (one OTP, one card charge) is then split between the comercios in the cart and you.
vexpay_split_refusal_message), no money is taken, and the order gets a note. The payment is never retried without splits.Custom comercio systems can create comercios with vexpay_upsert_merchant() and map items with filters instead of the product field:
add_action( 'my_comercio_saved', function ( $comercio ) {
$merchant_id = vexpay_upsert_merchant( array(
'external_ref' => (string) $comercio->id, // your comercio id
'name' => $comercio->name,
'identification' => $comercio->rif, // V/E+8 or J/G+9 digits
'contact_email' => $comercio->email,
'contact_phone' => $comercio->phone,
'bank_code' => $comercio->bank_code, // Pago Móvil payout account
'phone' => $comercio->pago_movil_phone,
'application_fee_percent' => 20, // your commission
'auto_payout' => true,
) );
if ( ! is_wp_error( $merchant_id ) ) {
update_post_meta( $comercio->id, '_vexpay_merchant_id', $merchant_id );
}
} );
function my_vexpay_merchant_for_product( $product_id ) {
$comercio_id = get_post_meta( $product_id, '_my_comercio_id', true );
return $comercio_id ? (string) get_post_meta( $comercio_id, '_vexpay_merchant_id', true ) : '';
}
add_filter( 'vexpay_line_item_merchant_id', function ( $merchant_id, $item, $order ) {
return my_vexpay_merchant_for_product( $item->get_product_id() ) ?: $merchant_id;
}, 10, 3 );
add_filter( 'vexpay_cart_item_merchant_id', function ( $merchant_id, $cart_item, $product ) {
return my_vexpay_merchant_for_product( $cart_item['product_id'] ) ?: $merchant_id;
}, 10, 3 );
The vexpay_order_splits( $splits, $order, $method ) filter can change the final shares, for example to set applicationFeePercent per comercio. The vexpay_split_refusal_message( $message, $order ) filter changes the message buyers see when a split is refused:
add_filter( 'vexpay_split_refusal_message', function ( $message, $order ) {
return 'Este plan no está disponible para pago en este momento';
}, 10, 2 );
A new or changed Pago Móvil payout account must be verified with the two micro-deposit amounts before the comercio is paid out.
This plugin connects to the VEXPay API (https://api.vexpay.app), a paid Venezuelan payment-processing service, to authorize, confirm (OTP), and refund C2P/Débito Inmediato payments. It is required for the plugin’s core function: without it, no payments can be processed.
The following data is sent to VEXPay:
vexpay_upsert_merchant() sends the comercio details your store passes to it (name, cédula/RIF, contact email and phone, Pago Móvil bank and phone, commission).No data is sent unless a customer actively submits the checkout/OTP form, a merchant explicitly tests the connection, or a refund is triggered by store staff.
VEXPay Terms of Service: https://docs.vexpay.app/es/terms?utm_source=wp-repo&utm_medium=link&utm_campaign=readme-legal
VEXPay Privacy Policy: https://docs.vexpay.app/es/privacy?utm_source=wp-repo&utm_medium=link&utm_campaign=readme-legal
This plugin also loads the “IBM Plex Sans” and “Outfit” web fonts from Google Fonts (fonts.googleapis.com / fonts.gstatic.com) on the checkout and OTP confirmation pages, for consistent typography. Loading these fonts causes the visitor’s browser to make a direct request to Google, which transmits their IP address to Google.
Google Fonts: Google Fonts Terms of Service, Google Privacy Policy