Files
roi-theme/wp-content/plugins/wp-marketing-automations/woofunnels/includes/class-bwf-facebook-sdk.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

353 lines
10 KiB
PHP
Executable File

<?php
if ( ! class_exists( 'BWF_Facebook_Sdk' ) ) {
#[AllowDynamicProperties]
class BWF_Facebook_Sdk {
private static $instance = null;
protected $container = array();
protected $event_data = array();
private $api_url = 'https://graph.facebook.com';
private $version = '';
private $pixel_id = '';
private $event_name = '';
private $time = '';
private $test_event_code = '';
private $partner_agent = '';
private $body = [];
private $response_body = null;
private $access_token = '';
public function __construct( $pixel_id, $access_token, $version = 'v11.0' ) {
if ( ! empty( $pixel_id ) ) {
$this->pixel_id = $pixel_id;
}
if ( ! empty( $access_token ) ) {
$this->access_token = $access_token;
}
if ( ! empty( $version ) ) {
$this->version = $version;
}
$this->time = time();
}
public static function create( $pixel_id, $access_token, $version = 'v11.0' ) {
if ( is_null( self::$instance ) ) {
self::$instance = new self( $pixel_id, $access_token, $version );
}
return self::$instance;
}
public function set_event_data( $event_name, $event_data ) {
$this->event_name = $event_name;
$this->event_data = $event_data;
}
public function set_event_source_url( $url = '' ) {
$this->source_url = $url;
}
public function execute() {
$out_response = [ 'status' => false, 'errors' => [] ];
if ( empty( $this->event_name ) && empty( $this->event_data ) ) {
$out_response['errors'][] = 'Event Name is empty';
}
if ( count( $out_response['errors'] ) > 0 ) {
return $out_response;
}
$event_id = $this->get_event_id();
$input = [ 'event_name' => $this->event_name, 'event_time' => $this->get_time(), 'action_source' => 'website', 'event_id' => $event_id ];
if ( isset( $this->source_url ) ) {
$input['event_source_url'] = $this->source_url;
}
$user_data = $this->get_user_data();
if ( ! empty( $user_data ) ) {
$input['user_data'] = $user_data;
}
$input['custom_data'] = $this->event_data;
$body = [ 'data' => [ $input ] ];
if ( ! empty( $this->test_event_code ) ) {
$body['test_event_code'] = $this->test_event_code;
}
if ( ! empty( $this->partner_agent ) ) {
$body['partner_agent'] = $this->partner_agent;
}
$headers = [
'Authorization' => 'Bearer ' . $this->access_token,
];
$this->body = $body;
$post = wp_remote_post( $this->get_api_url(), [
'timeout' => 2,
'sslverify' => false,
'body' => $this->body,
'headers' => $headers
] );
$this->response_body = wp_remote_retrieve_body( $post );
return array( 'request' => $this->get_request_body(), 'response' => $this->response_body );
}
public function get_event_id() {
return isset( $this->container['event_id'] ) ? $this->container['event_id'] : '';
}
public function get_time() {
return time();
}
public function get_user_data() {
$normalized_payload = array();
$normalized_payload['em'] = self::hash( $this->getEmail() );
$normalized_payload['ph'] = self::hash( $this->getPhone() );
$normalized_payload['ge'] = self::hash( $this->getGender() );
$normalized_payload['db'] = self::hash( $this->getDateOfBirth() );
$normalized_payload['ln'] = self::hash( $this->getLastName() );
$normalized_payload['fn'] = self::hash( $this->getFirstName() );
$normalized_payload['ct'] = self::hash( $this->getCity() );
$normalized_payload['st'] = self::hash( $this->getState() );
$normalized_payload['zp'] = self::hash( $this->getZipCode() );
$normalized_payload['country'] = self::hash( $this->getCountryCode() );
$normalized_payload['dobd'] = self::hash( $this->getDobd() );
$normalized_payload['dobm'] = self::hash( $this->getDobm() );
$normalized_payload['doby'] = self::hash( $this->getDoby() );
$normalized_payload['client_ip_address'] = $this->getIpAddress();
$normalized_payload['client_user_agent'] = $this->getHttpUserAgent();
$normalized_payload['fbc'] = $this->getFbc();
$normalized_payload['fbp'] = $this->getFbp();
$normalized_payload['external_id'] = $this->getExternalId();
$normalized_payload = array_filter( $normalized_payload );
return $normalized_payload;
}
/**
* @param string $data hash input data using SHA256 algorithm.
*
* @return string
*/
public static function hash( $data ) {
if ( $data == null || self::isHashed( $data ) ) {
return $data;
}
return hash( 'sha256', $data, false );
}
/**
* @param string $pii PII data to check if its hashed.
*
* @return bool
*/
public static function isHashed( $pii ) {
// it could be sha256 or md5
return preg_match( '/^[A-Fa-f0-9]{64}$/', $pii ) || preg_match( '/^[a-f0-9]{32}$/', $pii );
}
/**
* Gets an email address, in lowercase.
* @return string
*/
public function getEmail() {
return $this->container['email'];
}
/**
* Gets a phone number
* @return string
*/
public function getPhone() {
return $this->container['phone'];
}
/**
* Gets gender.
* @return string
*/
public function getGender() {
return $this->container['gender'];
}
/**
* Gets Date Of Birth.
* @return string
*/
public function getDateOfBirth() {
return $this->container['date_of_birth'];
}
/**
* Gets Last Name.
* @return string
*/
public function getLastName() {
return $this->container['last_name'];
}
/**
* Gets First Name.
* @return string
*/
public function getFirstName() {
return $this->container['first_name'];
}
/**
* Gets city.
* @return string
*/
public function getCity() {
return $this->container['city'];
}
/**
* Gets state.
* @return string
*/
public function getState() {
return $this->container['state'];
}
/**
* Gets zip code
* @return string
*/
public function getZipCode() {
return $this->container['zip_code'];
}
/**
* Gets country code.
* @return string
*/
public function getCountryCode() {
return $this->container['country_code'];
}
/**
* Gets the date of birth day.
* @return string
*/
public function getDobd() {
return $this->container['dobd'];
}
/**
* Gets the date of birth month.
* @return string
*/
public function getDobm() {
return $this->container['dobm'];
}
/**
* Gets the date of birth year.
* @return string
*/
public function getDoby() {
return $this->container['doby'];
}
/**
* Extracts the IP Address from the PHP Request Context.
* @return string
*/
public function getIpAddress() {
return $this->container['client_ip_address'];
}
/**
* Extracts the HTTP User Agent from the PHP Request Context.
* @return string
*/
public function getHttpUserAgent() {
return $this->container['client_user_agent'];
}
/**
* Extracts the FBC cookie from the PHP Request Context.
* @return string
*/
public function getFbc() {
return $this->container['fbc'];
}
/**
* Extracts the FBP cookie from the PHP Request Context.
* @return string
*/
public function getFbp() {
return $this->container['fbp'];
}
public function getExternalId() {
return $this->container['external_id'];
}
public function get_api_url() {
return $this->api_url . '/' . $this->version . '/' . $this->pixel_id . '/events';
}
public function get_request_body() {
return $this->body;
}
public function set_user_data( $data = [] ) {
$this->container['email'] = isset( $data['email'] ) ? $data['email'] : ( isset( $data['em'] ) ? $data['em'] : null );
$this->container['phone'] = isset( $data['phone'] ) ? $data['phone'] : ( isset( $data['ph'] ) ? $data['ph'] : null );
$this->container['gender'] = isset( $data['gender'] ) ? $data['gender'] : null;
$this->container['date_of_birth'] = isset( $data['date_of_birth'] ) ? $data['date_of_birth'] : null;
$this->container['last_name'] = isset( $data['last_name'] ) ? $data['last_name'] : ( isset( $data['ln'] ) ? $data['ln'] : null );
$this->container['first_name'] = isset( $data['first_name'] ) ? $data['first_name'] : ( isset( $data['fn'] ) ? $data['fn'] : null );
$this->container['city'] = isset( $data['city'] ) ? $data['city'] : ( isset( $data['ct'] ) ? $data['ct'] : null );
$this->container['state'] = isset( $data['state'] ) ? $data['state'] : ( isset( $data['st'] ) ? $data['st'] : null );
$this->container['dobd'] = isset( $data['dobd'] ) ? $data['dobd'] : null;
$this->container['dobm'] = isset( $data['dobm'] ) ? $data['dobm'] : null;
$this->container['doby'] = isset( $data['doby'] ) ? $data['doby'] : null;
$this->container['country_code'] = isset( $data['country_code'] ) ? $data['country_code'] : ( isset( $data['country'] ) ? $data['country'] : null );
$this->container['zip_code'] = isset( $data['zip_code'] ) ? $data['zip_code'] : null;
$this->container['client_user_agent'] = isset( $data['client_user_agent'] ) ? $data['client_user_agent'] : null;
$this->container['client_ip_address'] = isset( $data['client_ip_address'] ) ? $data['client_ip_address'] : null;
$this->container['fbp'] = isset( $data['fbp'] ) ? $data['fbp'] : null;
$this->container['fbc'] = isset( $data['fbc'] ) ? $data['fbc'] : null;
$this->container['fbp'] = isset( $data['_fbp'] ) ? $data['_fbp'] : $this->container['fbp'];
$this->container['fbc'] = isset( $data['_fbc'] ) ? $data['_fbc'] : $this->container['fbc'];
$this->container['external_id'] = isset( $data['external_id'] ) ? $data['external_id'] : null;
}
public function get_response_body() {
return $this->response_body;
}
public function set_event_id( $event_id ) {
return $this->container['event_id'] = $event_id;
}
public function set_test_event_code( $event_code ) {
$this->test_event_code = $event_code;
}
public function set_partner_agent( $partner_agent ) {
$this->partner_agent = $partner_agent;
}
/**
* Extracts the URI from the PHP Request Context.
* @return string
*/
public function getRequestUri() {
return $this->container['reuqesturi'];
}
}
}