You are here

function paypal_payment_ec_test_api in PayPal for Payment 7

Responds to API requests.

Parameters

bool $success:

1 string reference to 'paypal_payment_ec_test_api'
paypal_payment_ec_test_menu in paypal_payment_ec_test/paypal_payment_ec_test.module
Implements hook_menu().

File

paypal_payment_ec_test/paypal_payment_ec_test.module, line 89
Contains hook implementations and global functions.

Code

function paypal_payment_ec_test_api($success) {
  $controller = payment_method_controller_load('PayPalPaymentECPaymentMethodController');
  $nvp_request = $controller
    ->NVPAPIParseResponse(file_get_contents('php://input'));
  $nvp_response = array();
  if ($success && isset($nvp_request['METHOD'])) {
    if ($nvp_request['METHOD'] == 'SetExpressCheckout' && isset($nvp_request['RETURNURL']) && valid_url($nvp_request['RETURNURL'], TRUE) && isset($nvp_request['CANCELURL']) && valid_url($nvp_request['CANCELURL'], TRUE)) {
      variable_set('paypal_payment_ec_test_return_url', $nvp_request['RETURNURL']);
      variable_set('paypal_payment_ec_test_cancel_url', $nvp_request['CANCELURL']);
      $datetime = new DateTime();
      $nvp_response = array(
        'TIMESTAMP' => $datetime
          ->format(DateTime::ISO8601),
        'TOKEN' => paypal_payment_ec_test_token(),
      );
    }
    elseif ($nvp_request['METHOD'] == 'GetExpressCheckoutDetails' && isset($nvp_request['TOKEN'])) {
      $payer_id = substr(drupal_get_hash_salt(), 0, 13);
      variable_set('paypal_payment_ec_test_payer_id', $payer_id);
      $nvp_response = array(
        'PAYERID' => $payer_id,
      );
    }
    elseif ($nvp_request['METHOD'] == 'doExpressCheckoutPayment' && isset($nvp_request['PAYERID']) && $nvp_request['PAYERID'] === variable_get('paypal_payment_ec_test_payer_id') && isset($nvp_request['TOKEN'])) {
      $authentication = $controller::loadAuthentication($nvp_request['TOKEN'], 'token');
      $payment = entity_load_single('payment', $authentication->pid);
      if ($payment->method->controller_data['capture'] == $controller::CAPTURE_AUTOMATIC) {
        $nvp_response = array(
          'PAYMENTINFO_0_PAYMENTSTATUS' => 'Completed',
        );
      }
      elseif ($payment->method->controller_data['capture'] == $controller::CAPTURE_MANUAL) {
        $nvp_response = array(
          'PAYMENTINFO_0_PAYMENTSTATUS' => 'Pending',
          'PAYMENTINFO_0_PENDINGREASON' => 'authorization',
        );
      }
    }
  }
  if ($nvp_response) {
    $nvp_response['ACK'] = 'Success';
  }
  else {
    $nvp_response['ACK'] = 'Failure';
  }
  array_walk($nvp_response, function (&$value, $key) {
    $value = $key . '=' . urlencode($value);
  });
  print implode('&', $nvp_response);
  drupal_exit();
}