function commerce_paypal_wpp_request in Commerce PayPal 7
Submits a PayPal WPP API request to PayPal.
Parameters
$payment_method: The payment method instance array associated with this API request.
$nvp: The set of name-value pairs describing the transaction to submit.
2 calls to commerce_paypal_wpp_request()
- commerce_paypal_wpp_capture_form_submit in modules/
wpp/ includes/ commerce_paypal_wpp.admin.inc - Submit handler: process a prior authorization capture via WPP.
- commerce_paypal_wpp_submit_form_submit in modules/
wpp/ commerce_paypal_wpp.module - Payment method callback: checkout form submission.
File
- modules/
wpp/ commerce_paypal_wpp.module, line 463 - Implements PayPal Website Payments Pro in Drupal Commerce checkout.
Code
function commerce_paypal_wpp_request($payment_method, $nvp = array(), $order = NULL) {
// Get the API endpoint URL for the method's transaction mode.
$url = commerce_paypal_wpp_server_url($payment_method['settings']['server']);
// Add the default name-value pairs to the array.
$nvp += array(
// API credentials
'USER' => $payment_method['settings']['api_username'],
'PWD' => $payment_method['settings']['api_password'],
'SIGNATURE' => $payment_method['settings']['api_signature'],
'VERSION' => '76.0',
);
// Allow modules to alter parameters of the API request.
drupal_alter('commerce_paypal_wpp_request', $nvp, $order);
// Log the request if specified.
if ($payment_method['settings']['log']['request'] == 'request') {
// Mask the credit card number and CVV.
$log_nvp = $nvp;
$log_nvp['PWD'] = str_repeat('X', strlen($log_nvp['PWD']));
$log_nvp['SIGNATURE'] = str_repeat('X', strlen($log_nvp['SIGNATURE']));
if (!empty($log_nvp['ACCT'])) {
$log_nvp['ACCT'] = str_repeat('X', strlen($log_nvp['ACCT']) - 4) . substr($log_nvp['ACCT'], -4);
}
if (!empty($log_nvp['CVV2'])) {
$log_nvp['CVV2'] = str_repeat('X', strlen($log_nvp['CVV2']));
}
watchdog('commerce_paypal', 'PayPal WPP request to @url: !param', array(
'@url' => $url,
'!param' => '<pre>' . check_plain(print_r($log_nvp, TRUE)) . '</pre>',
), WATCHDOG_DEBUG);
}
// Prepare the name-value pair array to be sent as a string.
$pairs = array();
foreach ($nvp as $key => $value) {
$pairs[] = $key . '=' . urlencode($value);
}
// Setup the cURL request.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, implode('&', $pairs));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_NOPROGRESS, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
$result = curl_exec($ch);
// Log any errors to the watchdog.
if ($error = curl_error($ch)) {
watchdog('commerce_paypal', 'cURL error: @error', array(
'@error' => $error,
), WATCHDOG_ERROR);
return FALSE;
}
curl_close($ch);
// Make the response an array.
$response = array();
foreach (explode('&', $result) as $nvp) {
list($key, $value) = explode('=', $nvp);
$response[urldecode($key)] = urldecode($value);
}
// Log the response if specified.
if ($payment_method['settings']['log']['response'] == 'response') {
watchdog('commerce_paypal', 'PayPal WPP response: !param', array(
'!param' => '<pre>' . check_plain(print_r($response, TRUE)) . '</pre>',
WATCHDOG_DEBUG,
));
}
return $response;
}