Skip to content
Snippets Groups Projects
PxIPN.php 2.96 KiB
Newer Older
  • Learn to ignore specific revisions
  • <?php
    /**
     * PxIPN controller class.
     *
     * PxPay IPN endpoint, replacement for CiviCRM's 'extern/pxIPN.php'.
     *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
     * @since 5.25
    
     */
    
    namespace CiviCRM_WP_REST\Controller;
    
    class PxIPN extends Base {
    
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
      /**
       * @var string
       * The base route.
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       * @since 5.25
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       */
      protected $rest_base = 'pxIPN';
    
      /**
       * Registers routes.
       *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       * @since 5.25
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       */
      public function register_routes() {
    
        register_rest_route($this->get_namespace(), $this->get_rest_base(), [
          [
            'methods' => \WP_REST_Server::ALLMETHODS,
            'permission_callback' => '__return_true',
            'callback' => [$this, 'get_item'],
          ],
        ]);
    
      }
    
      /**
       * Get items.
       *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       * @since 5.25
       *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       * @param WP_REST_Request $request
       */
      public function get_item($request) {
    
        /**
         * Filter payment processor params.
         *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
         * @since 5.25
         *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
         * @param array $params
         * @param WP_REST_Request $request
         */
        $params = apply_filters(
          'civi_wp_rest/controller/pxIPN/params',
          $this->get_payment_processor_args($request),
          $request
        );
    
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
        // Log notification.
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
        \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.
       *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       * @since 5.25
       *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       * @param WP_REST_Resquest $request
       * @return array $args
       */
      public function get_payment_processor_args($request) {
    
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
        // Get payment processor types.
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
        $payment_processor_types = civicrm_api3('PaymentProcessor', 'getoptions', [
          'field' => 'payment_processor_type_id',
        ]);
    
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
        // Payment processor params.
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
        $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,
        ]);
    
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
        // Get payment processor.
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
        $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.
       *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       * @since 5.25
       *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       * @return array $schema
       */
      public function get_item_schema() {}
    
      /**
       * Item arguments.
       *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       * @since 5.25
       *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       * @return array $arguments
       */
      public function get_item_args() {}