Esempio n. 1
0
 /**
  * Calls upon Authorize.Net AIM, and returns the response.
  *
  * @package optimizeMember\AuthNet
  * @since 1.5
  *
  * @param array $post_vars An array of variables to send through the Authorize.Net API call.
  * @return array An array of variables returned from the API call.
  *
  * @todo Continue optimizing this routine with ``empty()`` and ``isset()``.
  */
 public static function authnet_aim_response($post_vars = FALSE)
 {
     global $current_site, $current_blog;
     /* For Multisite support. */
     /**/
     $url = "https://" . ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["pro_authnet_sandbox"] ? "test.authorize.net" : "secure.authorize.net") . "/gateway/transact.dll";
     /**/
     $post_vars = is_array($post_vars) ? $post_vars : array();
     /* Must be in array format. */
     /**/
     $post_vars["x_version"] = "3.1";
     /* Configure the Authorize.Net transaction version. */
     $post_vars["x_login"] = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["pro_authnet_api_login_id"];
     $post_vars["x_tran_key"] = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["pro_authnet_api_trans_key"];
     /**/
     $post_vars["x_delim_data"] = "true";
     /* Yes, return a delimited string. */
     $post_vars["x_delim_char"] = ",";
     /* Fields delimitation character. */
     $post_vars["x_encap_char"] = '"';
     /* Field encapsulation character. */
     $post_vars["x_relay_response"] = "false";
     /* Always off for AIM. */
     /**/
     $post_vars["x_invoice_num"] = !empty($post_vars["x_invoice_num"]) ? substr($post_vars["x_invoice_num"], 0, 20) : "";
     $post_vars["x_description"] = !empty($post_vars["x_description"]) ? substr($post_vars["x_description"], 0, 255) : "";
     $post_vars["x_description"] = c_ws_plugin__optimizemember_utils_strings::strip_2_kb_chars($post_vars["x_description"]);
     /**/
     $input_time = date("D M j, Y g:i:s a T");
     /* Record input time for logging. */
     /**/
     $csv = 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");
     /* Now record after output time. */
     /**/
     $response = $csv ? c_ws_plugin__optimizemember_utils_strings::trim_dq_deep(preg_split("/\",\"/", $csv)) : array();
     $response = c_ws_plugin__optimizemember_utils_strings::trim_deep(stripslashes_deep($response));
     /**/
     foreach (array("response_code", "response_subcode", "response_reason_code", "response_reason_text", "authorization_code", "avs_response", "transaction_id", "invoice_number", "description", "amount", "method", "transaction_type", "customer_id", "first_name", "last_name", "company", "address", "city", "state", "zipcode", "country", "phone", "fax", "email", "ship_to_first_name", "ship_to_last_name", "ship_to_company", "ship_to_address", "ship_to_city", "ship_to_state", "ship_to_zipcode", "ship_to_country", "tax", "duty", "freight", "tax_exempt", "po_number", "md5_hash", "card_code_response", "cavv_response", "card_number", "card_type", "split_tender_id", "requested_amount", "balance_on_card") as $order => $field_name) {
         $response[$field_name] = isset($response[$order]) ? $response[$order] : null;
     }
     /**/
     if (empty($response["response_code"]) || $response["response_code"] !== "1") {
         if (strlen($response["response_reason_code"]) || $response["response_reason_text"]) {
             /* translators: Exclude `%2$s`. This is an English error returned by Authorize.Net. Please replace `%2$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_pro_authnet_aim_response`. */
             $response["__error"] = sprintf(_x('Error #%1$s. %2$s.', "s2member-front", "s2member"), $response["response_reason_code"], rtrim($response["response_reason_text"], "."));
         } 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");
         }
     }
     /*
     If debugging is enabled; we need to maintain a comprehensive log file.
     	Logging now supports Multisite Networking as well.
     */
     $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() ? "authnet-api-4-" . trim(preg_replace("/[^a-z0-9]/i", "-", $_log4), "-") . ".log" : "authnet-api.log";
     /**/
     if (strlen($post_vars["x_card_num"]) > 4) {
         /* Only log last 4 digits for security. */
         $post_vars["x_card_num"] = str_repeat("*", strlen($post_vars["x_card_num"]) - 4) . substr($post_vars["x_card_num"], -4);
     }
     /* Then display last 4 digits. */
     /**/
     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" . $csv . "\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_pro_authnet_aim_response", c_ws_plugin__optimizemember_pro_authnet_utilities::_authnet_aim_response_filters($response), get_defined_vars());
 }