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();
}