コード例 #1
0
 /**
  * Handles ClickBank® IPN URL processing.
  *
  * @package optimizeMember\ClickBank
  * @since 1.5
  *
  * @attaches-to ``add_action("init");``
  *
  * @return null Or exits script execution after handling the Notification.
  */
 public static function clickbank_notify()
 {
     global $current_site, $current_blog;
     if (!empty($_GET["optimizemember_pro_clickbank_notify"]) && $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["pro_clickbank_username"]) {
         @ignore_user_abort(true);
         // Continue processing even if/when connection is broken by the sender.
         if (is_array($clickbank = c_ws_plugin__optimizemember_pro_clickbank_utilities::clickbank_postvars()) && ($_clickbank = $clickbank)) {
             $clickbank["optimizemember_log"][] = "IPN received on: " . date("D M j, Y g:i:s a T");
             $clickbank["optimizemember_log"][] = "optimizeMember POST vars verified with ClickBank®.";
             $s2vars = c_ws_plugin__optimizemember_pro_clickbank_utilities::clickbank_parse_s2vars($clickbank["cvendthru"], $clickbank["ctransaction"]);
             if (isset($s2vars["s2_p1"], $s2vars["s2_p3"]) && $s2vars["s2_p1"] === "0 D") {
                 $s2vars["s2_p1"] = $s2vars["s2_p3"];
             }
             $clickbank["s2vars"] = $s2vars;
             if (strcasecmp($clickbank["ccustfirstname"] . " " . $clickbank["ccustlastname"], $clickbank["ccustfullname"]) !== 0 && preg_match("/(?:[^ ]+)(?: +)(?:[^ ]+)/", $clickbank["ccustfullname"])) {
                 list($clickbank["ccustfirstname"], $clickbank["ccustlastname"]) = preg_split("/ +/", $clickbank["ccustfullname"], 2);
             }
             if (preg_match("/^(?:TEST_)?SALE\$/i", $clickbank["ctransaction"]) && preg_match("/^STANDARD\$/i", $clickbank["cprodtype"])) {
                 $clickbank["optimizemember_log"][] = "ClickBank® transaction identified as ( `SALE/STANDARD` ).";
                 $clickbank["optimizemember_log"][] = "IPN reformulated. Piping through optimizeMember's core/standard PayPal® processor as `txn_type` ( `web_accept` ).";
                 $clickbank["optimizemember_log"][] = "Please check PayPal® IPN logs for further processing details.";
                 $processing = $processed = true;
                 $ipn = array();
                 // Reset.
                 $ipn["txn_type"] = "web_accept";
                 $ipn["txn_id"] = $clickbank["ctransreceipt"];
                 $ipn["custom"] = $s2vars["s2_custom"];
                 $ipn["mc_gross"] = number_format($clickbank["corderamount"] / 100, 2, ".", "");
                 $ipn["mc_currency"] = strtoupper($clickbank["ccurrency"]);
                 $ipn["tax"] = number_format("0.00", 2, ".", "");
                 $ipn["payer_email"] = $clickbank["ccustemail"];
                 $ipn["first_name"] = ucwords(strtolower($clickbank["ccustfirstname"]));
                 $ipn["last_name"] = ucwords(strtolower($clickbank["ccustlastname"]));
                 $ipn["option_name1"] = $s2vars["s2_referencing"] ? "Referencing Customer ID" : "Originating Domain";
                 $ipn["option_selection1"] = $s2vars["s2_referencing"] ? $s2vars["s2_referencing"] : $_SERVER["HTTP_HOST"];
                 $ipn["option_name2"] = "Customer IP Address";
                 $ipn["option_selection2"] = $s2vars["s2_customer_ip"];
                 $ipn["item_number"] = $s2vars["s2_invoice"];
                 $ipn["item_name"] = $s2vars["s2_desc"];
                 $ipn["optimizemember_paypal_proxy"] = "clickbank";
                 $ipn["optimizemember_paypal_proxy_use"] = "standard-emails";
                 $ipn["optimizemember_paypal_proxy_verification"] = c_ws_plugin__optimizemember_paypal_utilities::paypal_proxy_key_gen();
                 c_ws_plugin__optimizemember_utils_urls::remote(site_url("/?optimizemember_paypal_notify=1"), $ipn, array("timeout" => 20));
             } else {
                 if (preg_match("/^(?:TEST_)?SALE\$/i", $clickbank["ctransaction"]) && preg_match("/^RECURRING\$/i", $clickbank["cprodtype"])) {
                     $clickbank["optimizemember_log"][] = "ClickBank® transaction identified as ( `SALE/RECURRING` ).";
                     $clickbank["optimizemember_log"][] = "IPN reformulated. Piping through optimizeMember's core/standard PayPal® processor as `txn_type` ( `subscr_signup` ).";
                     $clickbank["optimizemember_log"][] = "Please check PayPal® IPN logs for further processing details.";
                     $processing = $processed = true;
                     $ipn = array();
                     // Reset.
                     $ipn["txn_type"] = "subscr_signup";
                     $ipn["subscr_id"] = $s2vars["s2_subscr_id"];
                     $ipn["recurring"] = $clickbank["cfuturepayments"] > 1 ? "1" : "0";
                     $ipn["txn_id"] = $clickbank["ctransreceipt"];
                     $ipn["custom"] = $s2vars["s2_custom"];
                     $ipn["period1"] = $s2vars["s2_p1"];
                     $ipn["period3"] = $s2vars["s2_p3"];
                     $ipn["mc_amount1"] = number_format($clickbank["corderamount"] / 100, 2, ".", "");
                     $ipn["mc_amount3"] = number_format($clickbank["crebillamnt"] / 100, 2, ".", "");
                     $ipn["mc_gross"] = preg_match("/^[1-9]/", $ipn["period1"]) ? $ipn["mc_amount1"] : $ipn["mc_amount3"];
                     $ipn["mc_currency"] = strtoupper($clickbank["ccurrency"]);
                     $ipn["tax"] = number_format("0.00", 2, ".", "");
                     $ipn["payer_email"] = $clickbank["ccustemail"];
                     $ipn["first_name"] = ucwords(strtolower($clickbank["ccustfirstname"]));
                     $ipn["last_name"] = ucwords(strtolower($clickbank["ccustlastname"]));
                     $ipn["option_name1"] = $s2vars["s2_referencing"] ? "Referencing Customer ID" : "Originating Domain";
                     $ipn["option_selection1"] = $s2vars["s2_referencing"] ? $s2vars["s2_referencing"] : $_SERVER["HTTP_HOST"];
                     $ipn["option_name2"] = "Customer IP Address";
                     $ipn["option_selection2"] = $s2vars["s2_customer_ip"];
                     $ipn["item_number"] = $s2vars["s2_invoice"];
                     $ipn["item_name"] = $s2vars["s2_desc"];
                     $ipn["optimizemember_paypal_proxy"] = "clickbank";
                     $ipn["optimizemember_paypal_proxy_use"] = "standard-emails";
                     $ipn["optimizemember_paypal_proxy_use"] .= $ipn["mc_gross"] > 0 ? ",subscr-signup-as-subscr-payment" : "";
                     $ipn["optimizemember_paypal_proxy_verification"] = c_ws_plugin__optimizemember_paypal_utilities::paypal_proxy_key_gen();
                     c_ws_plugin__optimizemember_utils_urls::remote(site_url("/?optimizemember_paypal_notify=1"), $ipn, array("timeout" => 20));
                 } else {
                     if (preg_match("/^(?:TEST_)?BILL\$/i", $clickbank["ctransaction"]) && preg_match("/^RECURRING\$/i", $clickbank["cprodtype"])) {
                         $clickbank["optimizemember_log"][] = "ClickBank® transaction identified as ( `BILL/RECURRING` ).";
                         $clickbank["optimizemember_log"][] = "IPN reformulated. Piping through optimizeMember's core/standard PayPal® processor as `txn_type` ( `subscr_payment` ).";
                         $clickbank["optimizemember_log"][] = "Please check PayPal® IPN logs for further processing details.";
                         $processing = $processed = true;
                         $ipn = array();
                         // Reset.
                         $ipn["txn_type"] = "subscr_payment";
                         $ipn["subscr_id"] = $s2vars["s2_subscr_id"];
                         $ipn["txn_id"] = $clickbank["ctransreceipt"];
                         $ipn["custom"] = $s2vars["s2_custom"];
                         $ipn["mc_gross"] = number_format($clickbank["corderamount"] / 100, 2, ".", "");
                         $ipn["mc_currency"] = strtoupper($clickbank["ccurrency"]);
                         $ipn["tax"] = number_format("0.00", 2, ".", "");
                         $ipn["payer_email"] = $clickbank["ccustemail"];
                         $ipn["first_name"] = ucwords(strtolower($clickbank["ccustfirstname"]));
                         $ipn["last_name"] = ucwords(strtolower($clickbank["ccustlastname"]));
                         $ipn["option_name1"] = $s2vars["s2_referencing"] ? "Referencing Customer ID" : "Originating Domain";
                         $ipn["option_selection1"] = $s2vars["s2_referencing"] ? $s2vars["s2_referencing"] : $_SERVER["HTTP_HOST"];
                         $ipn["option_name2"] = "Customer IP Address";
                         $ipn["option_selection2"] = $s2vars["s2_customer_ip"];
                         $ipn["item_number"] = $s2vars["s2_invoice"];
                         $ipn["item_name"] = $s2vars["s2_desc"];
                         $ipn["optimizemember_paypal_proxy"] = "clickbank";
                         $ipn["optimizemember_paypal_proxy_use"] = "standard-emails";
                         $ipn["optimizemember_paypal_proxy_verification"] = c_ws_plugin__optimizemember_paypal_utilities::paypal_proxy_key_gen();
                         c_ws_plugin__optimizemember_utils_urls::remote(site_url("/?optimizemember_paypal_notify=1"), $ipn, array("timeout" => 20));
                     } else {
                         if (preg_match("/^(?:TEST_)?(?:RFND|CGBK|INSF)\$/i", $clickbank["ctransaction"])) {
                             $clickbank["optimizemember_log"][] = "ClickBank® transaction identified as ( `RFND|CGBK|INSF` ).";
                             $clickbank["optimizemember_log"][] = "IPN reformulated. Piping through optimizeMember's core/standard PayPal® processor as `payment_status` ( `refunded|reversed` ).";
                             $clickbank["optimizemember_log"][] = "Please check PayPal® IPN logs for further processing details.";
                             $processing = $processed = true;
                             $ipn = array();
                             // Reset.
                             $ipn["payment_status"] = preg_match("/^(?:TEST_)?RFND\$/", $clickbank["ctransaction"]) ? "refunded" : "reversed";
                             $ipn["parent_txn_id"] = preg_match("/^RECURRING\$/i", $clickbank["cprodtype"]) && $s2vars["s2_subscr_id"] ? $s2vars["s2_subscr_id"] : $clickbank["ctransreceipt"];
                             $ipn["custom"] = $s2vars["s2_custom"];
                             $ipn["mc_fee"] = "-" . number_format("0.00", 2, ".", "");
                             $ipn["mc_gross"] = "-" . number_format(abs($clickbank["corderamount"]) / 100, 2, ".", "");
                             $ipn["mc_currency"] = strtoupper($clickbank["ccurrency"]);
                             $ipn["tax"] = "-" . number_format("0.00", 2, ".", "");
                             $ipn["payer_email"] = $clickbank["ccustemail"];
                             $ipn["first_name"] = ucwords(strtolower($clickbank["ccustfirstname"]));
                             $ipn["last_name"] = ucwords(strtolower($clickbank["ccustlastname"]));
                             $ipn["option_name1"] = $s2vars["s2_referencing"] ? "Referencing Customer ID" : "Originating Domain";
                             $ipn["option_selection1"] = $s2vars["s2_referencing"] ? $s2vars["s2_referencing"] : $_SERVER["HTTP_HOST"];
                             $ipn["option_name2"] = "Customer IP Address";
                             $ipn["option_selection2"] = $s2vars["s2_customer_ip"];
                             $ipn["item_number"] = $s2vars["s2_invoice"];
                             $ipn["item_name"] = $s2vars["s2_desc"];
                             $ipn["optimizemember_paypal_proxy"] = "clickbank";
                             $ipn["optimizemember_paypal_proxy_use"] = "standard-emails";
                             $ipn["optimizemember_paypal_proxy_verification"] = c_ws_plugin__optimizemember_paypal_utilities::paypal_proxy_key_gen();
                             c_ws_plugin__optimizemember_utils_urls::remote(site_url("/?optimizemember_paypal_notify=1"), $ipn, array("timeout" => 20));
                         }
                     }
                 }
             }
             if (preg_match("/^(?:TEST_)?(?:SALE|BILL)\$/i", $clickbank["ctransaction"]) && preg_match("/^RECURRING\$/i", $clickbank["cprodtype"]) && (preg_match("/^COMPLETED\$/i", $clickbank["crebillstatus"]) || $clickbank["cfuturepayments"] <= 0) || preg_match("/^(?:TEST_)?CANCEL-REBILL\$/i", $clickbank["ctransaction"]) && preg_match("/^RECURRING\$/i", $clickbank["cprodtype"])) {
                 $clickbank["optimizemember_log"][] = "ClickBank® transaction identified as ( `RECURRING/COMPLETED` or `CANCEL-REBILL` ).";
                 $clickbank["optimizemember_log"][] = "IPN reformulated. Piping through optimizeMember's core/standard PayPal® processor as `txn_type` ( `subscr_cancel` ).";
                 $clickbank["optimizemember_log"][] = "Please check PayPal® IPN logs for further processing details.";
                 $processing = $processed = true;
                 $ipn = array();
                 // Reset.
                 $ipn["txn_type"] = "subscr_cancel";
                 $ipn["subscr_id"] = $s2vars["s2_subscr_id"];
                 $ipn["custom"] = $s2vars["s2_custom"];
                 $ipn["period1"] = $s2vars["s2_p1"];
                 $ipn["period3"] = $s2vars["s2_p3"];
                 $ipn["payer_email"] = $clickbank["ccustemail"];
                 $ipn["first_name"] = ucwords(strtolower($clickbank["ccustfirstname"]));
                 $ipn["last_name"] = ucwords(strtolower($clickbank["ccustlastname"]));
                 $ipn["option_name1"] = $s2vars["s2_referencing"] ? "Referencing Customer ID" : "Originating Domain";
                 $ipn["option_selection1"] = $s2vars["s2_referencing"] ? $s2vars["s2_referencing"] : $_SERVER["HTTP_HOST"];
                 $ipn["option_name2"] = "Customer IP Address";
                 $ipn["option_selection2"] = $s2vars["s2_customer_ip"];
                 $ipn["item_number"] = $s2vars["s2_invoice"];
                 $ipn["item_name"] = $s2vars["s2_desc"];
                 $ipn["optimizemember_paypal_proxy"] = "clickbank";
                 $ipn["optimizemember_paypal_proxy_use"] = "standard-emails";
                 $ipn["optimizemember_paypal_proxy_verification"] = c_ws_plugin__optimizemember_paypal_utilities::paypal_proxy_key_gen();
                 c_ws_plugin__optimizemember_utils_urls::remote(site_url("/?optimizemember_paypal_notify=1"), $ipn, array("timeout" => 20));
             }
             if (!$processed) {
                 // If nothing was processed, here we add a message to the logs indicating the IPN was ignored.
                 $clickbank["optimizemember_log"][] = "Ignoring this IPN request. The transaction does NOT require any action on the part of optimizeMember.";
             }
         } else {
             $clickbank["optimizemember_log"][] = "Unable to verify POST vars. This is most likely related to an invalid ClickBank® configuration. Please check: optimizeMember -› ClickBank® Options.";
             $clickbank["optimizemember_log"][] = "If you're absolutely SURE that your ClickBank® configuration is valid, you may want to run some tests on your server, just to be sure \$_POST variables are populated, and that your server is able to connect to ClickBank® over an HTTPS connection.";
             $clickbank["optimizemember_log"][] = "optimizeMember uses the WP_Http class for remote connections; which will try to use cURL first, and then fall back on the FOPEN method when cURL is not available. On a Windows® server, you may have to disable your cURL extension. Instead, set allow_url_fopen = yes in your php.ini file. The cURL extension (usually) does NOT support SSL connections on a Windows® server.";
             $clickbank["optimizemember_log"][] = var_export($_REQUEST, true);
             // Recording _POST + _GET vars for analysis and debugging.
         }
         /*
         If debugging/logging is enabled; we need to append $clickbank to the log file.
         	Logging now supports Multisite Networking as well.
         */
         $logt = c_ws_plugin__optimizemember_utilities::time_details();
         $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() ? "clickbank-ipn-4-" . trim(preg_replace("/[^a-z0-9]/i", "-", $_log4), "-") . ".log" : "clickbank-ipn.log";
         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()) {
                     file_put_contents($logs_dir . "/" . $log2, "LOG ENTRY: " . $logt . "\n" . $logv . "\n" . $logm . "\n" . $log4 . "\n" . c_ws_plugin__optimizemember_utils_logs::conceal_private_info(var_export($clickbank, true)) . "\n\n", FILE_APPEND);
                 }
             }
         }
         status_header(200);
         // Send a 200 OK status header.
         header("Content-Type: text/plain; charset=UTF-8");
         // Content-Type text/plain with UTF-8.
         while (@ob_end_clean()) {
         }
         // Clean any existing output buffers.
         exit;
         // Exit now.
     }
 }
コード例 #2
0
 /**
  * Handles ClickBank® Return URL processing.
  *
  * @package optimizeMember\ClickBank
  * @since 1.5
  *
  * @attaches-to ``add_action("init");``
  *
  * @return null Or exits script execution after redirection.
  */
 public static function clickbank_return()
 {
     global $current_site, $current_blog;
     if (!empty($_GET["optimizemember_pro_clickbank_return"]) && $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["pro_clickbank_username"]) {
         if (is_array($clickbank = c_ws_plugin__optimizemember_pro_clickbank_utilities::clickbank_postvars()) && ($_clickbank = $clickbank)) {
             $clickbank["optimizemember_log"][] = "Return-Data received on: " . date("D M j, Y g:i:s a T");
             $clickbank["optimizemember_log"][] = "optimizeMember POST vars verified with ClickBank®.";
             $clickbank["optimizemember_log"][] = "Sleeping for 5 seconds. Giving ClickBank® a chance to finalize processing.";
             sleep(5);
             $clickbank["optimizemember_log"][] = "Awake. It's " . date("D M j, Y g:i:s a T") . ". Processing will continue.";
             if (is_array($order = json_decode(c_ws_plugin__optimizemember_utils_urls::remote("https://api.clickbank.com/rest/1.3/orders/" . $clickbank["cbreceipt"], false, array_merge(c_ws_plugin__optimizemember_pro_clickbank_utilities::clickbank_api_headers(), array("timeout" => 20))), true)) && ($order = $order["orderData"])) {
                 if (isset($order[0]) && is_array($order[0])) {
                     $order = $order[0];
                 }
                 // If there is more than one, we only want the first one.
                 $clickbank["optimizemember_log"][] = "Order API variables have been obtained from ClickBank®.";
                 $s2vars = c_ws_plugin__optimizemember_pro_clickbank_utilities::clickbank_parse_s2vars(http_build_query($clickbank, null, "&"), $order["txnType"]);
                 if (isset($s2vars["s2_p1"], $s2vars["s2_p3"]) && $s2vars["s2_p1"] === "0 D") {
                     $s2vars["s2_p1"] = $s2vars["s2_p3"];
                 }
                 $clickbank["s2vars"] = $s2vars;
                 if (strcasecmp($order["firstName"] . " " . $order["lastName"], $order["customerDisplayName"]) !== 0 && preg_match("/([^ ]+)( +)([^ ]+)/", $order["customerDisplayName"])) {
                     list($order["firstName"], $order["lastName"]) = preg_split("/ +/", $order["customerDisplayName"], 2);
                 }
                 if (preg_match("/^(TEST_)?SALE\$/i", $order["txnType"]) && !isset($s2vars["s2_p1"], $s2vars["s2_p3"])) {
                     $clickbank["optimizemember_log"][] = "ClickBank® transaction identified as ( `SALE/STANDARD` ).";
                     $clickbank["optimizemember_log"][] = "Return-Data reformulated. Piping through optimizeMember's core/standard PayPal® processor as `txn_type` ( `web_accept` ).";
                     $clickbank["optimizemember_log"][] = "Please check PayPal® RTN logs for further processing details.";
                     $rtn = array();
                     // Reset.
                     $rtn["txn_type"] = "web_accept";
                     $rtn["txn_id"] = $order["receipt"];
                     $rtn["custom"] = $s2vars["s2_custom"];
                     $rtn["mc_gross"] = number_format($order["amount"], 2, ".", "");
                     $rtn["mc_currency"] = strtoupper($order["currency"]);
                     $rtn["tax"] = "0.00";
                     // No tax.
                     $rtn["payer_email"] = $order["email"];
                     $rtn["first_name"] = ucwords(strtolower($order["firstName"]));
                     $rtn["last_name"] = ucwords(strtolower($order["lastName"]));
                     $rtn["option_name1"] = $s2vars["s2_referencing"] ? "Referencing Customer ID" : "Originating Domain";
                     $rtn["option_selection1"] = $s2vars["s2_referencing"] ? $s2vars["s2_referencing"] : $_SERVER["HTTP_HOST"];
                     $rtn["option_name2"] = "Customer IP Address";
                     $rtn["option_selection2"] = $s2vars["s2_customer_ip"];
                     $rtn["item_number"] = $s2vars["s2_invoice"];
                     $rtn["item_name"] = $s2vars["s2_desc"];
                     $rtn_q = "&optimizemember_paypal_proxy=clickbank&optimizemember_paypal_proxy_use=standard-emails";
                     if (!empty($_GET["optimizemember_pro_clickbank_return_success"])) {
                         $rtn_q .= "&optimizemember_paypal_return_success=" . rawurlencode(trim(stripslashes($_GET["optimizemember_pro_clickbank_return_success"])));
                     }
                     $rtn_r = add_query_arg(urlencode_deep($rtn), site_url("/?optimizemember_pro_clickbank_return&optimizemember_paypal_return=1" . $rtn_q));
                     $rtn_r = c_ws_plugin__optimizemember_utils_urls::add_optimizemember_sig($rtn_r, "optimizemember_paypal_proxy_verification");
                     $clickbank["optimizemember_log"][] = $rtn_r;
                     wp_redirect($rtn_r);
                 } else {
                     if (preg_match("/^(TEST_)?SALE\$/i", $order["txnType"]) && isset($s2vars["s2_p1"], $s2vars["s2_p3"])) {
                         $clickbank["optimizemember_log"][] = "ClickBank® transaction identified as ( `SALE/RECURRING` ).";
                         $clickbank["optimizemember_log"][] = "Return-Data reformulated. Piping through optimizeMember's core/standard PayPal® processor as `txn_type` ( `subscr_signup` ).";
                         $clickbank["optimizemember_log"][] = "Please check PayPal® RTN logs for further processing details.";
                         $rtn = array();
                         // Reset.
                         $rtn["txn_type"] = "subscr_signup";
                         $rtn["subscr_id"] = $s2vars["s2_subscr_id"];
                         $rtn["recurring"] = $order["futurePayments"] > 1 ? "1" : "0";
                         $rtn["txn_id"] = $order["receipt"];
                         $rtn["custom"] = $s2vars["s2_custom"];
                         $rtn["period1"] = $s2vars["s2_p1"];
                         $rtn["period3"] = $s2vars["s2_p3"];
                         $rtn["mc_amount1"] = number_format($order["amount"], 2, ".", "");
                         $rtn["mc_amount3"] = @number_format($order["rebillAmount"], 2, ".", "");
                         $rtn["mc_currency"] = strtoupper($order["currency"]);
                         $rtn["tax"] = "0.00";
                         // No tax.
                         $rtn["payer_email"] = $order["email"];
                         $rtn["first_name"] = ucwords(strtolower($order["firstName"]));
                         $rtn["last_name"] = ucwords(strtolower($order["lastName"]));
                         $rtn["option_name1"] = $s2vars["s2_referencing"] ? "Referencing Customer ID" : "Originating Domain";
                         $rtn["option_selection1"] = $s2vars["s2_referencing"] ? $s2vars["s2_referencing"] : $_SERVER["HTTP_HOST"];
                         $rtn["option_name2"] = "Customer IP Address";
                         $rtn["option_selection2"] = $s2vars["s2_customer_ip"];
                         $rtn["item_number"] = $s2vars["s2_invoice"];
                         $rtn["item_name"] = $s2vars["s2_desc"];
                         $rtn_q = "&optimizemember_paypal_proxy=clickbank&optimizemember_paypal_proxy_use=standard-emails";
                         if (!empty($_GET["optimizemember_pro_clickbank_return_success"])) {
                             $rtn_q .= "&optimizemember_paypal_return_success=" . rawurlencode(trim(stripslashes($_GET["optimizemember_pro_clickbank_return_success"])));
                         }
                         $rtn_r = add_query_arg(urlencode_deep($rtn), site_url("/?optimizemember_pro_clickbank_return&optimizemember_paypal_return=1" . $rtn_q));
                         $rtn_r = c_ws_plugin__optimizemember_utils_urls::add_optimizemember_sig($rtn_r, "optimizemember_paypal_proxy_verification");
                         $clickbank["optimizemember_log"][] = $rtn_r;
                         wp_redirect($rtn_r);
                     } else {
                         $clickbank["optimizemember_log"][] = "Unexpected txnType. The ClickBank® txnType did not match a required action.";
                         $clickbank["optimizemember_log"][] = "Redirecting Customer to the Home Page, due to an error that occurred.";
                         echo '<script type="text/javascript">' . "\n";
                         echo "alert('" . c_ws_plugin__optimizemember_utils_strings::esc_js_sq(_x("ERROR: Unexpected txnType. Please contact Support for assistance.\n\nThe ClickBank® txnType did not match a required action.", "optimizemember-front", "optimizemember")) . "');" . "\n";
                         echo "window.location = '" . c_ws_plugin__optimizemember_utils_strings::esc_js_sq(home_url("/")) . "';";
                         echo '</script>' . "\n";
                     }
                 }
             } else {
                 $clickbank["optimizemember_log"][] = "Unable to obtain API vars. The ClickBank® API may NOT have data for this order yet. Or, your ClickBank® API Keys are NOT configured properly under `optimizeMember -› ClickBank® Options`.";
                 $clickbank["optimizemember_log"][] = var_export($_REQUEST, true);
                 // Recording ``$_POST`` + ``$_GET`` vars for analysis and debugging.
                 $clickbank["optimizemember_log"][] = "Return-Data reformulated. Piping through optimizeMember's core/standard PayPal® processor with `proxy_use` ( `ty-email` ).";
                 $clickbank["optimizemember_log"][] = "Please check PayPal® RTN logs for further processing details.";
                 $rtn_q = "&optimizemember_paypal_proxy=clickbank&optimizemember_paypal_proxy_use=standard-emails,ty-email";
                 if (!empty($_GET["optimizemember_pro_clickbank_return_success"])) {
                     $rtn_q .= "&optimizemember_paypal_return_success=" . rawurlencode(trim(stripslashes($_GET["optimizemember_pro_clickbank_return_success"])));
                 }
                 $rtn_r = site_url("/?optimizemember_pro_clickbank_return&optimizemember_paypal_return=1" . $rtn_q);
                 $rtn_r = c_ws_plugin__optimizemember_utils_urls::add_optimizemember_sig($rtn_r, "optimizemember_paypal_proxy_verification");
                 $clickbank["optimizemember_log"][] = $rtn_r;
                 wp_redirect($rtn_r);
             }
         } else {
             $clickbank["optimizemember_log"][] = "Unable to verify POST vars. This is most likely related to an invalid ClickBank® configuration. Please check: optimizeMember -› ClickBank® Options.";
             $clickbank["optimizemember_log"][] = "If you're absolutely SURE that your ClickBank® configuration is valid, you may want to run some tests on your server, just to be sure \$_POST variables are populated, and that your server is able to connect to ClickBank® over an HTTPS connection.";
             $clickbank["optimizemember_log"][] = "optimizeMember uses the WP_Http class for remote connections; which will try to use cURL first, and then fall back on the FOPEN method when cURL is not available. On a Windows® server, you may have to disable your cURL extension. Instead, set allow_url_fopen = yes in your php.ini file. The cURL extension (usually) does NOT support SSL connections on a Windows® server.";
             $clickbank["optimizemember_log"][] = var_export($_REQUEST, true);
             // Recording _POST + _GET vars for analysis and debugging.
             $clickbank["optimizemember_log"][] = "Redirecting Customer to the Home Page, due to an error that occurred.";
             echo '<script type="text/javascript">' . "\n";
             echo "alert('" . c_ws_plugin__optimizemember_utils_strings::esc_js_sq(_x("ERROR: Unable to verify POST vars. Please contact Support for assistance.\n\nThis is most likely related to an invalid ClickBank® configuration. If you are the site owner, please check: optimizeMember -› ClickBank® Options.", "optimizemember-front", "optimizemember")) . "');" . "\n";
             echo "window.location = '" . c_ws_plugin__optimizemember_utils_strings::esc_js_sq(home_url("/")) . "';";
             echo '</script>' . "\n";
         }
         $logt = c_ws_plugin__optimizemember_utilities::time_details();
         $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() ? "clickbank-rtn-4-" . trim(preg_replace("/[^a-z0-9]/i", "-", $_log4), "-") . ".log" : "clickbank-rtn.log";
         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()) {
                     file_put_contents($logs_dir . "/" . $log2, "LOG ENTRY: " . $logt . "\n" . $logv . "\n" . $logm . "\n" . $log4 . "\n" . c_ws_plugin__optimizemember_utils_logs::conceal_private_info(var_export($clickbank, true)) . "\n\n", FILE_APPEND);
                 }
             }
         }
         exit;
         // Exit now.
     }
 }