Skip to content
Snippets Groups Projects
PxIPN.php 2.73 KiB
Newer Older
  • Learn to ignore specific revisions
  • <?php
    /**
     * PxIPN controller class.
     *
     * PxPay IPN endpoint, replacement for CiviCRM's 'extern/pxIPN.php'.
     *
     * @since 0.1
     */
    
    namespace CiviCRM_WP_REST\Controller;
    
    class PxIPN extends Base {
    
    	/**
    	 * The base route.
    	 *
    	 * @since 0.1
    	 * @var string
    	 */
    	protected $rest_base = 'pxIPN';
    
    	/**
    	 * Registers routes.
    	 *
    	 * @since 0.1
    	 */
    	public function register_routes() {
    
    		register_rest_route( $this->get_namespace(), $this->get_rest_base(), [
    			[
    				'methods' => \WP_REST_Server::ALLMETHODS,
    				'callback' => [ $this, 'get_item' ]
    			]
    		] );
    
    	}
    
    	/**
    	 * Get items.
    	 *
    	 * @since 0.1
    	 * @param WP_REST_Request $request
    	 */
    	public function get_item( $request ) {
    
    		/**
    		 * Filter payment processor params.
    		 *
    		 * @since 0.1
    		 * @param array $params
    		 * @param WP_REST_Request $request
    		 */
    		$params = apply_filters(
    			'civi_wp_rest/controller/pxIPN/params',
    			$this->get_payment_processor_args( $request ),
    			$request
    		);
    
    		// log notification
    		\Civi::log()->alert( 'payment_notification processor_name=Payment_Express', $params );
    
    		try {
    
    			$result = \CRM_Core_Payment_PaymentExpressIPN::main( ...$params );
    
    		} catch ( \CRM_Core_Exception $e ) {
    
    			\Civi::log()->error( $e->getMessage() );
    			\Civi::log()->error( 'error data ', [ 'data' => $e->getErrorData() ] );
    			\Civi::log()->error( 'REQUEST ', [ 'params' => $params ] );
    
    			return $this->civi_rest_error( $e->getMessage() );
    
    		}
    
    		return rest_ensure_response( $result );
    
    	}
    
    	/**
    	 * Get payment processor necessary params.
    	 *
    	 * @since 0.1
    	 * @param WP_REST_Resquest $request
    	 * @return array $args
    	 */
    	public function get_payment_processor_args( $request ) {
    
    		// get payment processor types
    		$payment_processor_types = civicrm_api3( 'PaymentProcessor', 'getoptions', [
    			'field' => 'payment_processor_type_id'
    		] );
    
    		// payment processor params
    		$params = apply_filters( 'civi_wp_rest/controller/pxIPN/payment_processor_params', [
    			'user_name' => $request->get_param( 'userid' ),
    			'payment_processor_type_id' => array_search(
    				'DPS Payment Express',
    				$payment_processor_types['values']
    			),
    			'is_active' => 1,
    			'is_test' => 0
    		] );
    
    		// get payment processor
    		$payment_processor = civicrm_api3( 'PaymentProcessor', 'get', $params );
    
    		$args = $payment_processor['values'][$payment_processor['id']];
    
    		$method = empty( $args['signature'] ) ? 'pxpay' : 'pxaccess';
    
    		return [
    			$method,
    			$request->get_param( 'result' ),
    			$args['url_site'],
    			$args['user_name'],
    			$args['password'],
    			$args['signature']
    		];
    
    	}
    
    	/**
    	 * Item schema.
    	 *
    	 * @since 0.1
    	 * @return array $schema
    	 */
    	public function get_item_schema() {}
    
    	/**
    	 * Item arguments.
    	 *
    	 * @since 0.1
    	 * @return array $arguments
    	 */
    	public function get_item_args() {}
    
    }