%PDF- %PDF-
Direktori : /proc/19851/cwd/wp-content/plugins/event-tickets/src/Tribe/Commerce/PayPal/Handler/ |
Current File : //proc/19851/cwd/wp-content/plugins/event-tickets/src/Tribe/Commerce/PayPal/Handler/PDT.php |
<?php class Tribe__Tickets__Commerce__PayPal__Handler__PDT implements Tribe__Tickets__Commerce__PayPal__Handler__Interface { /** * Set up hooks for PDT transaction handling * * @since 4.7 */ public function hook() { add_action( 'template_redirect', array( $this, 'check_response' ) ); } /** * Checks the request to see if payment data was communicated * * @since 4.7 */ public function check_response() { if ( ! isset( $_GET['tx'] ) ) { return; } /** @var Tribe__Tickets__Commerce__PayPal__Main $paypal */ $paypal = tribe( 'tickets.commerce.paypal' ); /** @var Tribe__Tickets__Commerce__PayPal__Gateway $gateway */ $gateway = tribe( 'tickets.commerce.paypal.gateway' ); $results = $this->validate_transaction( $_GET['tx'] ); if ( false === $results ) { return false; } $gateway->set_transaction_data( $gateway->parse_transaction( $results ) ); // since the purchase has completed, reset the invoice number $gateway->reset_invoice_number(); // this will redirect to the success page $paypal->generate_tickets(); } /** * Validates a PayPal transaction ensuring that it is authentic * * @since 4.7 * * @param string $transaction * * @return array|bool */ public function validate_transaction( $transaction = null ) { /** * Allows short-circuiting the validation of a transaction with the PayPal server. * * Returning a non `null` value in this will prevent any request for validation to * the PayPal server from being sent. * * @since 4.7 * * @param bool $validated * @param string|null $transaction The transaction ID (hash) if available; the transaction data * might be in the $_GET superglobal. */ $validated = apply_filters( 'tribe_tickets_commerce_paypal_validate_transaction', null, $transaction ); if ( null !== $validated ) { return $validated; } $gateway = tribe( 'tickets.commerce.paypal.gateway' ); $args = array( 'httpversion' => '1.1', 'timeout' => 60, 'user-agent' => 'EventTickets/' . Tribe__Tickets__Main::VERSION, 'body' => array( 'cmd' => '_notify-synch', 'tx' => $transaction, 'at' => $gateway->identity_token, ), ); $response = wp_safe_remote_post( $gateway->get_cart_url(), $args ); if ( is_wp_error( $response ) || ! ( 0 === strpos( $response['body'], 'SUCCESS' ) ) ) { return false; } return $this->parse_transaction_body( $response['body'] ); } /** * Parses flat transaction text * * @since 4.7 * * @param string $transaction * * @return array */ public function parse_transaction_body( $transaction ) { $results = array(); $body = explode( "\n", $transaction ); foreach ( $body as $line ) { if ( ! trim( $line ) ) { continue; } $line = explode( '=', $line ); $var = array_shift( $line ); $results[ $var ] = urldecode( implode( '=', $line ) ); } return $results; } /** * Returns the configuration status of the handler. * * @since 4.7 * * @param string $field Which configuration status field to return, either `slug` or `label` * @param string $slug Optionally return the specified field for the specified status. * * @return bool|string The current, or specified, configuration status slug or label * or `false` if the specified field or slug was not found. */ public function get_config_status( $field = 'slug', $slug = null ) { return _x( 'incomplete', 'a PayPal configuration status', 'event-tickets' ); } }