Files
roi-theme/wp-content/plugins/restrict-content-pro/pro/includes/gateways/class-rcp-payment-gateway-paypal-pro.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

289 lines
8.9 KiB
PHP

<?php
/**
* PayPal Pro Gateway class
*
* @package Restrict Content Pro
* @subpackage Classes/Gateways/PayPal Pro
* @copyright Copyright (c) 2017, Pippin Williamson
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
* @since 2.1
*/
class RCP_Payment_Gateway_PayPal_Pro extends RCP_Payment_Gateway {
private $api_endpoint;
protected $username;
protected $password;
protected $signature;
/**
* Get things going
*
* @access public
* @since 2.1
* @return void
*/
public function init() {
$this->supports[] = 'one-time';
$this->supports[] = 'recurring';
$this->supports[] = 'fees';
$this->supports[] = 'trial';
$this->supports[] = 'card-updates';
if( $this->test_mode ) {
$this->api_endpoint = 'https://api-3t.sandbox.paypal.com/nvp';
} else {
$this->api_endpoint = 'https://api-3t.paypal.com/nvp';
}
if( rcp_has_paypal_api_access() ) {
$creds = rcp_get_paypal_api_credentials();
$this->username = $creds['username'];
$this->password = $creds['password'];
$this->signature = $creds['signature'];
}
}
/**
* Process registration
*
* @access public
* @since 2.1
* @return void
*/
public function process_signup() {
global $rcp_options;
/**
* @var RCP_Payments $rcp_payments_db
*/
global $rcp_payments_db;
if ( is_user_logged_in() ) {
$user_data = get_userdata( $this->user_id );
$first_name = $user_data->first_name;
$last_name = $user_data->last_name;
} else {
$first_name = $_POST['rcp_user_first'];
$last_name = $_POST['rcp_user_last'];
}
$descriptor = get_bloginfo( 'name' ) . ' - ' . $this->subscription_name;
if ( strlen( $descriptor ) > 23 ) {
$descriptor = substr( $descriptor, 0, 23 );
}
$descriptor_city = get_bloginfo( 'admin_email' );
if ( strlen( $descriptor_city ) > 13 ) {
$descriptor_city = substr( $descriptor_city, 0, 13 );
}
$args = array(
'USER' => $this->username,
'PWD' => $this->password,
'SIGNATURE' => $this->signature,
'VERSION' => '124',
'METHOD' => $this->auto_renew ? 'CreateRecurringPaymentsProfile' : 'DoDirectPayment',
'AMT' => $this->auto_renew ? $this->amount : $this->initial_amount,
'CURRENCYCODE' => strtoupper( $this->currency ),
'SHIPPINGAMT' => 0,
'TAXAMT' => 0,
'DESC' => $this->subscription_name,
'SOFTDESCRIPTOR' => $descriptor,
'SOFTDESCRIPTORCITY' => $descriptor_city,
'CUSTOM' => $this->user_id . '|' . $this->membership->get_id(),
'NOTIFYURL' => add_query_arg( 'listener', 'EIPN', home_url( 'index.php' ) ),
'EMAIL' => $this->email,
'FIRSTNAME' => sanitize_text_field( $first_name ),
'LASTNAME' => sanitize_text_field( $last_name ),
'STREET' => sanitize_text_field( $_POST['rcp_card_address'] ),
'CITY' => sanitize_text_field( $_POST['rcp_card_city'] ),
'STATE' => sanitize_text_field( $_POST['rcp_card_state'] ),
'COUNTRYCODE' => sanitize_text_field( $_POST['rcp_card_country'] ),
'CREDITCARDTYPE' => '',
'ACCT' => sanitize_text_field( $_POST['rcp_card_number'] ),
'EXPDATE' => sanitize_text_field( $_POST['rcp_card_exp_month'] . $_POST['rcp_card_exp_year'] ), // needs to be in the format 062019
'CVV2' => sanitize_text_field( $_POST['rcp_card_cvc'] ),
'ZIP' => sanitize_text_field( $_POST['rcp_card_zip'] ),
'BUTTONSOURCE' => 'EasyDigitalDownloads_SP',
'PROFILESTARTDATE' => date( 'Y-m-d\TH:i:s', strtotime( '+' . $this->length . ' ' . $this->length_unit, time() ) ),
'BILLINGPERIOD' => ucwords( $this->length_unit ),
'BILLINGFREQUENCY' => $this->length,
'FAILEDINITAMTACTION'=> 'CancelOnFailure',
'TOTALBILLINGCYCLES' => $this->auto_renew ? 0 : 1
);
if ( $this->auto_renew ) {
if ( $this->initial_amount >= 0 ) {
$args['INITAMT'] = $this->initial_amount;
}
}
if ( $this->auto_renew && ! empty( $this->subscription_start_date ) ) {
// Set profile start date.
$args['PROFILESTARTDATE'] = date( 'Y-m-d\TH:i:s', strtotime( $this->subscription_start_date, current_time( 'timestamp' ) ) );
unset( $args['INITAMT'] );
}
$request = wp_remote_post( $this->api_endpoint, array( 'timeout' => 45, 'sslverify' => false, 'httpversion' => '1.1', 'body' => apply_filters( 'rcp_paypal_pro_args', $args, $this ) ) );
$body = wp_remote_retrieve_body( $request );
$code = wp_remote_retrieve_response_code( $request );
$message = wp_remote_retrieve_response_message( $request );
if( is_wp_error( $request ) ) {
$this->error_message = $request->get_error_message();
do_action( 'rcp_registration_failed', $this );
do_action( 'rcp_paypal_pro_signup_payment_failed', $request, $this );
$error = '<p>' . __( 'An unidentified error occurred.', 'rcp' ) . '</p>';
$error .= '<p>' . $request->get_error_message() . '</p>';
wp_die( $error, __( 'Error', 'rcp' ), array( 'response' => '401' ) );
} elseif ( 200 == $code && 'OK' == $message ) {
if( is_string( $body ) ) {
wp_parse_str( $body, $body );
}
if( false !== strpos( strtolower( $body['ACK'] ), 'failure' ) ) {
$this->error_message = $body['L_LONGMESSAGE0'];
do_action( 'rcp_registration_failed', $this );
do_action( 'rcp_paypal_pro_signup_payment_failed', $request, $this );
$error = '<p>' . __( 'PayPal subscription creation failed.', 'rcp' ) . '</p>';
$error .= '<p>' . __( 'Error message:', 'rcp' ) . ' ' . $body['L_LONGMESSAGE0'] . '</p>';
$error .= '<p>' . __( 'Error code:', 'rcp' ) . ' ' . $body['L_ERRORCODE0'] . '</p>';
wp_die( $error, __( 'Error', 'rcp' ), array( 'response' => '401' ) );
} else {
// Successful signup
if ( isset( $body['PROFILEID'] ) ) {
$this->membership->set_gateway_subscription_id( $body['PROFILEID'] );
}
if ( isset( $body['TRANSACTIONID'] ) && false !== strpos( strtolower( $body['ACK'] ), 'success' ) ) {
// Confirm a one-time payment. Updating the payment activates the account.
$payment_data = array(
'payment_type' => 'Credit Card One Time',
'transaction_id' => sanitize_text_field( $body['TRANSACTIONID'] ),
'status' => 'complete'
);
$rcp_payments_db->update( $this->payment->id, $payment_data );
}
wp_redirect( esc_url_raw( rcp_get_return_url() ) ); exit;
exit;
}
} else {
do_action( 'rcp_registration_failed', $this );
wp_die( __( 'Something has gone wrong, please try again', 'rcp' ), __( 'Error', 'rcp' ), array( 'back_link' => true, 'response' => '401' ) );
}
}
/**
* Add credit card form
*
* @since 2.1
* @return string
*/
public function fields() {
ob_start();
rcp_get_template_part( 'card-form', 'full' );
return ob_get_clean();
}
/**
* Validate additional fields during registration submission
*
* @access public
* @since 2.1
* @return void
*/
public function validate_fields() {
if( ! rcp_has_paypal_api_access() ) {
$this->add_error( 'no_paypal_api', __( 'You have not configured PayPal API access. Please configure it in Restrict &rarr; Settings', 'rcp' ) );
}
if( empty( $_POST['rcp_card_address'] ) ) {
$this->add_error( 'missing_card_address', __( 'The address you have entered is invalid', 'rcp' ) );
}
if( empty( $_POST['rcp_card_city'] ) ) {
$this->add_error( 'missing_card_city', __( 'The city you have entered is invalid', 'rcp' ) );
}
if( empty( $_POST['rcp_card_state'] ) ) {
$this->add_error( 'missing_card_state', __( 'The state you have entered is invalid', 'rcp' ) );
}
if( empty( $_POST['rcp_card_country'] ) ) {
$this->add_error( 'missing_card_country', __( 'The country you have entered is invalid', 'rcp' ) );
}
if( empty( $_POST['rcp_card_number'] ) ) {
$this->add_error( 'missing_card_number', __( 'The card number you have entered is invalid', 'rcp' ) );
}
if( empty( $_POST['rcp_card_cvc'] ) ) {
$this->add_error( 'missing_card_code', __( 'The security code you have entered is invalid', 'rcp' ) );
}
if( empty( $_POST['rcp_card_zip'] ) ) {
$this->add_error( 'missing_card_zip', __( 'The zip / postal code you have entered is invalid', 'rcp' ) );
}
if( empty( $_POST['rcp_card_name'] ) ) {
$this->add_error( 'missing_card_name', __( 'The card holder name you have entered is invalid', 'rcp' ) );
}
if( empty( $_POST['rcp_card_exp_month'] ) ) {
$this->add_error( 'missing_card_exp_month', __( 'The card expiration month you have entered is invalid', 'rcp' ) );
}
if( empty( $_POST['rcp_card_exp_year'] ) ) {
$this->add_error( 'missing_card_exp_year', __( 'The card expiration year you have entered is invalid', 'rcp' ) );
}
}
/**
* Process webhooks
*
* @access public
* @since 2.1
* @return void
*/
public function process_webhooks() {
// These are processed through PayPal Express gateway
}
}