/** * Calls upon the PayPal API, and returns the response. * * @package optimizeMember\PayPal * @since 3.5 * * @param array $post_vars An array of variables to send through the PayPal API call. * @return array An array of variables returned by the PayPal API. * * @todo Optimize this routine with ``empty()`` and ``isset()``. * @todo Possibly integrate this API: {@link http://msdn.microsoft.com/en-us/library/ff512417.aspx}. */ public static function paypal_api_response($post_vars = FALSE) { global $current_site, $current_blog; /**/ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;'); do_action("ws_plugin__optimizemember_before_paypal_api_response", get_defined_vars()); unset($__refs, $__v); /**/ $url = "https://" . ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["paypal_sandbox"] ? "api-3t.sandbox.paypal.com" : "api-3t.paypal.com") . "/nvp"; /**/ $post_vars = apply_filters("ws_plugin__optimizemember_paypal_api_post_vars", $post_vars, get_defined_vars()); $post_vars = is_array($post_vars) ? $post_vars : array(); /**/ $post_vars["VERSION"] = "71.0"; $post_vars["USER"] = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["paypal_api_username"]; $post_vars["PWD"] = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["paypal_api_password"]; $post_vars["SIGNATURE"] = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["paypal_api_signature"]; /**/ foreach ($post_vars as $_key => &$_value) { $_value = c_ws_plugin__optimizemember_paypal_utilities::paypal_api_nv_cleanup($_key, $_value); } unset($_key, $_value); /**/ $input_time = date("D M j, Y g:i:s a T"); /**/ $nvp = trim(c_ws_plugin__optimizemember_utils_urls::remote($url, $post_vars, array("timeout" => 20))); /**/ $output_time = date("D M j, Y g:i:s a T"); /**/ wp_parse_str($nvp, $response); $response = c_ws_plugin__optimizemember_utils_strings::trim_deep($response); /**/ if (!$response["ACK"] || !preg_match("/^(Success|SuccessWithWarning)\$/i", $response["ACK"])) { if (strlen($response["L_ERRORCODE0"]) || $response["L_SHORTMESSAGE0"] || $response["L_LONGMESSAGE0"]) { /* translators: Exclude `%2$s` and `%3$s`. These are English details returned by PayPal. Replace `%2$s` and `%3$s` with: `Unable to process, please try again`, or something to that affect. Or, if you prefer, you could Filter ``$response["__error"]`` with `ws_plugin__optimizemember_paypal_api_response`. */ $response["__error"] = sprintf(_x('Error #%1$s. %2$s. %3$s.', "s2member-front", "s2member"), $response["L_ERRORCODE0"], rtrim($response["L_SHORTMESSAGE0"], "."), rtrim($response["L_LONGMESSAGE0"], ".")); } else { /* Else, generate an error messsage - so something is reported back to the Customer. */ $response["__error"] = _x("Error. Please contact Support for assistance.", "s2member-front", "s2member"); } } /**/ $logv = c_ws_plugin__optimizemember_utilities::ver_details(); $logm = c_ws_plugin__optimizemember_utilities::mem_details(); $log4 = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] . "\nUser-Agent: " . $_SERVER["HTTP_USER_AGENT"]; $log4 = is_multisite() && !is_main_site() ? ($_log4 = $current_blog->domain . $current_blog->path) . "\n" . $log4 : $log4; $log2 = is_multisite() && !is_main_site() ? "paypal-api-4-" . trim(preg_replace("/[^a-z0-9]/i", "-", $_log4), "-") . ".log" : "paypal-api.log"; /**/ if (isset($post_vars["ACCT"]) && strlen($post_vars["ACCT"]) > 4) { $post_vars["ACCT"] = str_repeat("*", strlen($post_vars["ACCT"]) - 4) . substr($post_vars["ACCT"], -4); } /**/ if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["gateway_debug_logs"]) { if (is_dir($logs_dir = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["logs_dir"])) { if (is_writable($logs_dir) && c_ws_plugin__optimizemember_utils_logs::archive_oversize_log_files()) { if ($log = "-------- Input vars: ( " . $input_time . " ) --------\n" . var_export($post_vars, true) . "\n") { if ($log .= "-------- Output string/vars: ( " . $output_time . " ) --------\n" . $nvp . "\n" . var_export($response, true)) { file_put_contents($logs_dir . "/" . $log2, $logv . "\n" . $logm . "\n" . $log4 . "\n" . $log . "\n\n", FILE_APPEND); } } } } } /**/ return apply_filters("ws_plugin__optimizemember_paypal_api_response", c_ws_plugin__optimizemember_paypal_utilities::_paypal_api_response_filters($response), get_defined_vars()); }