"0", "exp" => "72", "level" => "1", "ccaps" => "", "desc" => "", "ps" => "paypal", "lc" => "", "lang" => "", "cc" => "USD", "dg" => "0", "ns" => "1", "custom" => $_SERVER["HTTP_HOST"], "ta" => "0", "tp" => "0", "tt" => "D", "ra" => "0.01", "rp" => "1", "rt" => "M", "rr" => "1", "rrt" => "", "rra" => "1", "modify" => "0", "cancel" => "0", "sp" => "0", "image" => "default", "output" => "button"), get_defined_vars ()), $attr); // "modify" has been deprecated. https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/Appx-websitestandard-htmlvariables/#deprecated-variables $attr["modify"] = "0"; $attr["lc"] = /* Locale code absolutely must be provided in upper-case format. Only after running shortcode_atts(). */ strtoupper ($attr["lc"]); $attr["tt"] = /* Term lengths absolutely must be provided in upper-case format. Only after running shortcode_atts(). */ strtoupper ($attr["tt"]); $attr["rt"] = /* Term lengths absolutely must be provided in upper-case format. Only after running shortcode_atts(). */ strtoupper ($attr["rt"]); $attr["rr"] = /* Must be provided in upper-case format. Numerical, or BN value. Only after running shortcode_atts(). */ strtoupper ($attr["rr"]); $attr["ccaps"] = /* Custom Capabilities must be typed in lower-case format. Only after running shortcode_atts(). */ strtolower ($attr["ccaps"]); $attr["ccaps"] = /* Custom Capabilities should not have spaces. */ str_replace(" ", "", $attr["ccaps"]); $attr["rr"] = /* Lifetime Subscriptions require Buy Now. Only after running shortcode_atts(). */ ($attr["rt"] === "L") ? "BN" : $attr["rr"]; $attr["rr"] = /* Independent Ccaps require Buy Now. Only after running shortcode_atts(). */ ($attr["level"] === "*") ? "BN" : $attr["rr"]; $attr["ns"] = /* No shipping directive must be 1 for digital items. After shortcode_atts(). */ ($attr["dg"] === "1") ? "1" : $attr["ns"]; $attr["ta"] = /*260228 Normalize trial amount to canonical 2-decimal currency format. */ number_format((float)$attr["ta"], 2, '.', ''); $attr["ra"] = /*260228 Normalize recurring/regular amount to canonical 2-decimal currency format. */ number_format((float)$attr["ra"], 2, '.', ''); //260811 Sanitize custom image URL. if($attr["image"] !== "default") $attr["image"] = esc_url_raw($attr["image"], array('http', 'https')); $force_notify_url_scheme = apply_filters("ws_plugin__s2member_during_sc_paypal_button_force_notify_url_scheme", null, get_defined_vars ()); $force_return_url_scheme = apply_filters("ws_plugin__s2member_during_sc_paypal_button_force_return_url_scheme", null, get_defined_vars ()); //260918.2104 TO-DO PayPal Checkout cache hardening: do not embed the one-hour, visitor-specific transaction token in rendered page HTML. // Render a cache-safe encrypted checkout definition instead, then mint the short-lived invoice/IP/user-context transaction token server-side // when checkout actually starts (output="button", "anchor", or "url"), preserving validation, idempotency, subscription context, and return/cancel behavior. // PayPal Checkout SDK memoization (per request; shared across all button variants). static $ppco_sdks = array(); foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v; do_action("ws_plugin__s2member_before_sc_paypal_button_after_shortcode_atts", get_defined_vars ()); unset($__refs, $__v); if /* Cancellation Buttons. */ ($attr["cancel"]) { //260114 PayPal Checkout (REST) cancellation override. // - output="button": on-site cancel via REST API (logged-in users only). // - output="anchor|url": link to PayPal subscription management UI (sandbox/live aware). // Falls back to legacy PayPal cancellation flow when user is not logged in or has no subscription id. if(c_ws_plugin__s2member_paypal_utilities::paypal_checkout_is_enabled() && in_array($attr["output"], array("button", "anchor", "url"), true) && is_user_logged_in()) { $user_id = (int)get_current_user_id(); $subscr_id = (string)get_user_option('s2member_subscr_id', $user_id); $ppco_sandbox = c_ws_plugin__s2member_paypal_utilities::paypal_checkout_is_sandbox(); $pp_manage_url = ($ppco_sandbox) ? 'https://www.sandbox.paypal.com/myaccount/autopay/connect/' : 'https://www.paypal.com/myaccount/autopay/'; //260218 // output="url|anchor": always link to PayPal subscription management UI. if(in_array($attr["output"], array("url", "anchor"), true)) { // output="url": return the PayPal management URL. if($attr["output"] === "url") { $code = $_code = $pp_manage_url; foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v; do_action("ws_plugin__s2member_during_sc_paypal_cancellation_button", get_defined_vars ()); unset($__refs, $__v); $code = c_ws_plugin__s2member_sc_paypal_button_e::sc_paypal_button_encryption ($code, get_defined_vars ()); return apply_filters("ws_plugin__s2member_sc_paypal_button", $code, get_defined_vars ()); } // output="anchor": real anchor tag to PayPal management UI (no JS). else if($attr["output"] === "anchor") { $default_image = "https://www.paypal.com/" . (($attr["lang"]) ? $attr["lang"] : _x ("en_US", "s2member-front paypal-button-lang-code", "s2member")) . "/i/btn/btn_unsubscribe_LG.gif"; if($attr["image"] && $attr["image"] !== "default") { $img_src = $attr["image"]; $code = $_code = 'PayPal'; } else { //260218 Match PayPal Checkout cancellation output="button" styling for output="anchor" (default image). $ppco_cancel_label = esc_html(_x('Unsubscribe', 'paypal cancellation button label', 's2member')); $ppco_a_id = 's2member_ppco_cancel_anchor_'.md5($user_id.$subscr_id); $code = ''."\n"; $code .= ''.$ppco_cancel_label.''; $_code = $code; } foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v; do_action("ws_plugin__s2member_during_sc_paypal_cancellation_button", get_defined_vars ()); unset($__refs, $__v); $code = c_ws_plugin__s2member_sc_paypal_button_e::sc_paypal_button_encryption ($code, get_defined_vars ()); return apply_filters("ws_plugin__s2member_sc_paypal_button", $code, get_defined_vars ()); } } if($subscr_id) { // output="button": if Paid Subscr. ID is not a subscription id, fall back to PayPal management UI. if($attr["output"] === "button" && !preg_match('/^I-[A-Z0-9]+$/', $subscr_id)) { $default_image = "https://www.paypal.com/" . (($attr["lang"]) ? $attr["lang"] : _x ("en_US", "s2member-front paypal-button-lang-code", "s2member")) . "/i/btn/btn_unsubscribe_LG.gif"; if($attr["image"] && $attr["image"] !== "default") { $img_src = $attr["image"]; $code = $_code = 'PayPal'; } else { //260218 Match PayPal Checkout cancellation output="button" styling for fallback output="anchor" (default image). $ppco_cancel_label = esc_html(_x('Unsubscribe', 'paypal cancellation button label', 's2member')); $ppco_a_id = 's2member_ppco_cancel_anchor_'.md5($user_id.$subscr_id); $code = ''."\n"; $code .= ''.$ppco_cancel_label.''; $_code = $code; } foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v; do_action("ws_plugin__s2member_during_sc_paypal_cancellation_button", get_defined_vars ()); unset($__refs, $__v); $code = c_ws_plugin__s2member_sc_paypal_button_e::sc_paypal_button_encryption ($code, get_defined_vars ()); return apply_filters("ws_plugin__s2member_sc_paypal_button", $code, get_defined_vars ()); } // output="button": REST cancel (modern-looking HTML button). $ppco_endpoint = home_url("/?s2member_paypal_checkout=1", $force_notify_url_scheme); // Token must satisfy the standard token validator (invoice/ip/item_number/checksum). $ppco_invoice = 'cancel-'.$user_id.'-'.$subscr_id; $ppco_token = array( 'exp' => time() + 3600, 'invoice' => $ppco_invoice, 'ip' => c_ws_plugin__s2member_utils_ip::current(), 'item_number' => $subscr_id, 'checksum' => md5($ppco_invoice.c_ws_plugin__s2member_utils_ip::current().$subscr_id), 'user_id' => $user_id, 'subscr_id' => $subscr_id, ); $ppco_token = urlencode(c_ws_plugin__s2member_utils_encryption::encrypt(serialize($ppco_token))); $ppco_nonce = wp_create_nonce('s2m_ppco_cancel_'.$user_id); $ppco_btn_id = 's2member_ppco_cancel_'.md5($user_id.$subscr_id); $ppco_msg_id = 's2member_ppco_cancel_msg_'.md5($user_id.$subscr_id); //260913.1946 Validate Pro's optional success URL before exposing it to cancellation JavaScript; shortcode attributes may be authored by Editors. $ppco_success_url = (c_ws_plugin__s2member_utils_conds::pro_is_installed() && !empty($attr["success"]) && is_string($attr["success"])) ? wp_validate_redirect($attr["success"], '') : ''; $ppco_success_json = wp_json_encode($ppco_success_url, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT); $code = ''."\n"; $code .= ''."\n"; //260218 $code .= ''."\n"; $code .= ''."\n"; $_code = $code; foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v; do_action("ws_plugin__s2member_during_sc_paypal_cancellation_button", get_defined_vars ()); unset($__refs, $__v); $code = c_ws_plugin__s2member_sc_paypal_button_e::sc_paypal_button_encryption ($code, get_defined_vars ()); return apply_filters("ws_plugin__s2member_sc_paypal_button", $code, get_defined_vars ()); } } else if(c_ws_plugin__s2member_paypal_utilities::paypal_checkout_is_enabled() && $attr["output"] === "button") { //260505 Guest output="button": show a disabled PayPal-styled button (no action). Guest output="anchor|url" falls through to the PayPal management link. $ppco_btn_id = 's2member_ppco_cancel_disabled_'.md5((string)microtime(true)); $code = ''."\n"; $code .= ''."\n"; //260218 $_code = $code; foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v; do_action("ws_plugin__s2member_during_sc_paypal_cancellation_button", get_defined_vars ()); unset($__refs, $__v); $code = c_ws_plugin__s2member_sc_paypal_button_e::sc_paypal_button_encryption ($code, get_defined_vars ()); return apply_filters("ws_plugin__s2member_sc_paypal_button", $code, get_defined_vars ()); } $default_image = "https://www.paypal.com/" . (($attr["lang"]) ? $attr["lang"] : _x ("en_US", "s2member-front paypal-button-lang-code", "s2member")) . "/i/btn/btn_unsubscribe_LG.gif"; $code = trim (c_ws_plugin__s2member_utilities::evl (file_get_contents (dirname (dirname (__FILE__)) . "/templates/buttons/paypal-cancellation-button.php"))); $code = preg_replace ("/%%images%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . "/src/images")), $code); $code = preg_replace ("/%%wpurl%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ())), $code); $endpoint_host = ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? "www.sandbox.paypal.com" : "www.paypal.com"; if(c_ws_plugin__s2member_paypal_utilities::paypal_checkout_is_enabled()) $endpoint_host = c_ws_plugin__s2member_paypal_utilities::paypal_checkout_is_sandbox() ? "www.sandbox.paypal.com" : "www.paypal.com"; $autopay_url = (strpos($endpoint_host, 'sandbox') !== false) ? "https://www.sandbox.paypal.com/myaccount/autopay/connect/" : "https://www.paypal.com/myaccount/autopay/"; //260218 $code = preg_replace ("/%%autopay_url%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($autopay_url)), $code); $code = preg_replace ("/%%paypal_business%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"])), $code); $code = preg_replace ("/%%paypal_merchant_id%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_merchant_id"])), $code); $code = $_code = ($attr["image"] && $attr["image"] !== "default") ? preg_replace ('/ src\="(.*?)"/', ' src="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["image"])) . '"', $code) : preg_replace ('/ src\="(.*?)"/', ' src="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($default_image)) . '"', $code); $code = ($attr["output"] === "anchor") ? /* Already in anchor format; `button` format is not used in Cancellations. */ $code : $code; if ($attr["output"] === "url" && preg_match ('/ href\="(.*?)"/', $code, $m) && ($href = $m[1])) $code = ($url = c_ws_plugin__s2member_utils_urls::n_amps ($href)); unset /* Just a little housekeeping */ ($href, $url, $m); foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v; do_action("ws_plugin__s2member_during_sc_paypal_cancellation_button", get_defined_vars ()); unset($__refs, $__v); } else if /* Specific Post/Page Buttons. */ ($attr["sp"]) { $default_image = "https://www.paypal.com/" . (($attr["lang"]) ? $attr["lang"] : _x ("en_US", "s2member-front paypal-button-lang-code", "s2member")) . "/i/btn/btn_xpressCheckout.gif"; $paypal_on0_input_value = ($referencing = c_ws_plugin__s2member_utils_users::get_user_subscr_or_wp_id ()) ? "Referencing Customer ID" : "Originating Domain"; $paypal_os0_input_value = /* Current User's Paid Subscr. ID, or WP User ID, or domain. */ ($referencing) ? $referencing : $_SERVER["HTTP_HOST"]; $paypal_on1_input_value = /* Identifies the Customer's IP Address for tracking purposes. */ "Customer IP Address"; $paypal_os1_input_value = /* Current User's IP Address for tracking purposes. */ c_ws_plugin__s2member_utils_ip::current(); $paypal_invoice_input_value = /* s2Member's Unique Code~IP combo. */ uniqid () . "~" . c_ws_plugin__s2member_utils_ip::current(); $attr["sp_ids_exp"] = /* Combined "sp:ids:expiration hours". */ "sp:" . $attr["ids"] . ":" . $attr["exp"]; $success_return_url = /* s2Member handles this all by itself. However, it can be Filtered. */ home_url ("/?s2member_paypal_return=1", $force_return_url_scheme); $success_return_url = apply_filters("ws_plugin__s2member_during_sc_paypal_button_success_return_url", $success_return_url, get_defined_vars ()); //260114 PayPal Checkout (REST) SP (Specific Post/Page) override. // Uses server-side create + server-side capture, then posts into existing IPN + Return handlers. if(c_ws_plugin__s2member_paypal_utilities::paypal_checkout_is_enabled()) { $ppco_sandbox = c_ws_plugin__s2member_paypal_utilities::paypal_checkout_is_sandbox(); $ppco_client_id = (string)$GLOBALS["WS_PLUGIN__"]["s2member"]["o"][($ppco_sandbox) ? "paypal_checkout_sandbox_client_id" : "paypal_checkout_client_id"]; $ppco_cc = strtoupper((string)$attr["cc"]); $ppco_intent = 'capture'; $ppco_sdk_key = (($ppco_sandbox) ? 'sandbox' : 'live').'|'.$ppco_cc.'|'.$ppco_intent; $ppco_sdk_just_loaded = false; if(empty($ppco_sdks[$ppco_sdk_key]) || !is_array($ppco_sdks[$ppco_sdk_key])) { $ppco_sdks[$ppco_sdk_key] = array( 'ns' => 's2m_ppco_'.substr(md5($ppco_sdk_key), 0, 10), 'id' => 's2member_ppco_sdk_'.substr(md5($ppco_sdk_key), 0, 10), ); $ppco_sdk_just_loaded = true; } $ppco_sdk_ns = (string)$ppco_sdks[$ppco_sdk_key]['ns']; $ppco_sdk_id = (string)$ppco_sdks[$ppco_sdk_key]['id']; $ppco_endpoint = home_url("/?s2member_paypal_checkout=1", $force_notify_url_scheme); $ppco_cancel = home_url("/"); $ppco_token = array( 'exp' => time() + 3600, 'invoice' => $paypal_invoice_input_value, 'ip' => c_ws_plugin__s2member_utils_ip::current(), 'item_name' => $attr["desc"], 'item_number' => $attr["sp_ids_exp"], 'custom' => $attr["custom"], 'amount' => $attr["ra"], 'cc' => $ppco_cc, 'ns' => $attr["ns"], 'rr' => 'BN', 'on0' => $paypal_on0_input_value, 'os0' => $paypal_os0_input_value, 'on1' => $paypal_on1_input_value, 'os1' => $paypal_os1_input_value, 'return' => $success_return_url, 'cancel' => $ppco_cancel, 'checksum' => md5($paypal_invoice_input_value.c_ws_plugin__s2member_utils_ip::current().$attr["sp_ids_exp"]), ); $ppco_token = urlencode(c_ws_plugin__s2member_utils_encryption::encrypt(serialize($ppco_token))); // output="anchor|url" support (no JS SDK; redirects through s2Member, then to PayPal approval URL). if($attr["output"] === "anchor" || $attr["output"] === "url") { $ppco_redirect_url = $ppco_endpoint.'&s2member_paypal_checkout_op=redirect&s2member_paypal_checkout_t='.$ppco_token; if($attr["output"] === "url") $code = $_code = $ppco_redirect_url; else // output="anchor" { $img_src = ($attr["image"] && $attr["image"] !== "default") ? $attr["image"] : $default_image; $code = $_code = 'PayPal'; } foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v; do_action("ws_plugin__s2member_during_sc_paypal_sp_button", get_defined_vars ()); unset($__refs, $__v); $code = c_ws_plugin__s2member_sc_paypal_button_e::sc_paypal_button_encryption ($code, get_defined_vars ()); return apply_filters("ws_plugin__s2member_sc_paypal_button", $code, get_defined_vars ()); } $ppco_div_id = 's2member_ppco_btn_'.md5($paypal_invoice_input_value.$attr["sp_ids_exp"]); $ppco_err_id = 's2member_ppco_err_'.md5($paypal_invoice_input_value.$attr["sp_ids_exp"]); $ppco_locale = ($attr["lang"]) ? (string)$attr["lang"] : ''; $ppco_lc = ($attr["lc"]) ? (string)$attr["lc"] : ''; if(!$ppco_locale && $ppco_lc) { $site_locale = (string)get_locale(); if(preg_match('/^([a-z]{2})[_-]/i', $site_locale, $m)) $ppco_locale = strtolower($m[1]).'_'.strtoupper($ppco_lc); else $ppco_locale = 'en_'.strtoupper($ppco_lc); } $ppco_locale_q = ($ppco_locale) ? '&locale='.rawurlencode($ppco_locale) : ''; $ppco_buyer_country_q = ($ppco_sandbox && $ppco_lc) ? '&buyer-country='.rawurlencode(strtoupper($ppco_lc)) : ''; $ppco_sdk_src = ($ppco_sandbox ? 'https://www.sandbox.paypal.com/sdk/js' : 'https://www.paypal.com/sdk/js'); //260114 !!! SP is capture-only; conditional subscription path below is dead code (cleanup/refactor later). if($ppco_intent === 'subscription') $ppco_sdk_src = $ppco_sdk_src.'?client-id='.rawurlencode($ppco_client_id).'¤cy='.rawurlencode($ppco_cc).'&vault=true&intent=subscription&disable-funding=card'.$ppco_buyer_country_q.$ppco_locale_q; else $ppco_sdk_src = $ppco_sdk_src.'?client-id='.rawurlencode($ppco_client_id).'¤cy='.rawurlencode($ppco_cc).'&intent=capture&commit=true&disable-funding=card'.$ppco_buyer_country_q.$ppco_locale_q; $code = '
'."\n"; $code .= ''."\n"; $ppco_sdk_src = apply_filters('ws_plugin__s2member_ppco_sdk_src', $ppco_sdk_src, get_defined_vars()); if($ppco_sdk_just_loaded) { $code .= ''."\n"; } $code .= ''."\n"; $_code = $code; foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v; do_action("ws_plugin__s2member_during_sc_paypal_sp_button", get_defined_vars ()); unset($__refs, $__v); $code = c_ws_plugin__s2member_sc_paypal_button_e::sc_paypal_button_encryption ($code, get_defined_vars ()); return apply_filters("ws_plugin__s2member_sc_paypal_button", $code, get_defined_vars ()); } $code = trim (c_ws_plugin__s2member_utilities::evl (file_get_contents (dirname (dirname (__FILE__)) . "/templates/buttons/paypal-sp-checkout-button.php"))); $code = preg_replace ("/%%images%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . "/src/images")), $code); $code = preg_replace ("/%%wpurl%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ())), $code); $code = preg_replace ("/%%endpoint%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? "www.sandbox.paypal.com" : "www.paypal.com")), $code); $code = preg_replace ("/%%paypal_business%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"])), $code); $code = preg_replace ("/%%paypal_merchant_id%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_merchant_id"])), $code); $code = preg_replace ("/%%cancel_return%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ("/"))), $code); $code = preg_replace ("/%%notify_url%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ("/?s2member_paypal_notify=1", $force_notify_url_scheme))), $code); $code = preg_replace ("/%%return%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($success_return_url)), $code); $code = preg_replace ("/%%custom%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["custom"])), $code); $code = preg_replace ('/ name\="lc" value\="(.*?)"/', ' name="lc" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["lc"])) . '"', $code); $code = preg_replace ('/ name\="no_shipping" value\="(.*?)"/', ' name="no_shipping" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["ns"])) . '"', $code); $code = preg_replace ('/ name\="item_name" value\="(.*?)"/', ' name="item_name" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["desc"])) . '"', $code); $code = preg_replace ('/ name\="item_number" value\="(.*?)"/', ' name="item_number" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["sp_ids_exp"])) . '"', $code); $code = preg_replace ('/ name\="page_style" value\="(.*?)"/', ' name="page_style" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["ps"])) . '"', $code); $code = preg_replace ('/ name\="currency_code" value\="(.*?)"/', ' name="currency_code" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["cc"])) . '"', $code); $code = preg_replace ('/ name\="custom" value\="(.*?)"/', ' name="custom" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["custom"])) . '"', $code); $code = preg_replace ('/ name\="invoice" value\="(.*?)"/', ' name="invoice" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($paypal_invoice_input_value)) . '"', $code); $code = preg_replace ('/ name\="on0" value\="(.*?)"/', ' name="on0" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($paypal_on0_input_value)) . '"', $code); $code = preg_replace ('/ name\="os0" value\="(.*?)"/', ' name="os0" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($paypal_os0_input_value)) . '"', $code); $code = preg_replace ('/ name\="on1" value\="(.*?)"/', ' name="on1" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($paypal_on1_input_value)) . '"', $code); $code = preg_replace ('/ name\="os1" value\="(.*?)"/', ' name="os1" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($paypal_os1_input_value)) . '"', $code); $code = preg_replace ('/ name\="amount" value\="(.*?)"/', ' name="amount" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["ra"])) . '"', $code); $code = $_code = ($attr["image"] && $attr["image"] !== "default") ? preg_replace ('/ src\="(.*?)"/', ' src="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["image"])) . '"', $code) : preg_replace ('/ src\="(.*?)"/', ' src="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($default_image)) . '"', $code); $code = ($attr["output"] === "anchor") ? 'PayPal' : $code; $code = ($attr["output"] === "url") ? c_ws_plugin__s2member_utils_forms::form_whips_2_url ($code) : $code; foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v; do_action("ws_plugin__s2member_during_sc_paypal_sp_button", get_defined_vars ()); unset($__refs, $__v); } else if /* Independent Custom Capabilities. */ ($attr["level"] === "*") { $default_image = "https://www.paypal.com/" . (($attr["lang"]) ? $attr["lang"] : _x ("en_US", "s2member-front paypal-button-lang-code", "s2member")) . "/i/btn/btn_xpressCheckout.gif"; $paypal_on0_input_value = ($referencing = c_ws_plugin__s2member_utils_users::get_user_subscr_or_wp_id ()) ? "Referencing Customer ID" : "Originating Domain"; $paypal_os0_input_value = /* Current User's Paid Subscr. ID, or WP User ID, or domain. */ ($referencing) ? $referencing : $_SERVER["HTTP_HOST"]; $paypal_on1_input_value = /* Identifies the Customer's IP Address for tracking purposes. */ "Customer IP Address"; $paypal_os1_input_value = /* Current User's IP Address for tracking purposes. */ c_ws_plugin__s2member_utils_ip::current(); $paypal_invoice_input_value = /* s2Member's Unique Code~IP combo. */ uniqid () . "~" . c_ws_plugin__s2member_utils_ip::current(); $attr["level_ccaps_eotper"] = ($attr["rr"] === "BN" && $attr["rt"] !== "L") ? $attr["level"] . ":" . $attr["ccaps"] . ":" . $attr["rp"] . " " . $attr["rt"] : $attr["level"] . ":" . $attr["ccaps"]; $attr["level_ccaps_eotper"] = /* Clean any trailing separators from this string. */ rtrim ($attr["level_ccaps_eotper"], ":"); $success_return_url = /* s2Member handles this all by itself. However, it can be Filtered. */ home_url ("/?s2member_paypal_return=1", $force_return_url_scheme); $success_return_url = apply_filters("ws_plugin__s2member_during_sc_paypal_button_success_return_url", $success_return_url, get_defined_vars ()); //260114 PayPal Checkout (REST) CCAPS (Independent Custom Capabilities) override. // Uses server-side create + server-side capture, then posts into existing IPN + Return handlers. if(c_ws_plugin__s2member_paypal_utilities::paypal_checkout_is_enabled()) { $ppco_sandbox = c_ws_plugin__s2member_paypal_utilities::paypal_checkout_is_sandbox(); $ppco_client_id = (string)$GLOBALS["WS_PLUGIN__"]["s2member"]["o"][($ppco_sandbox) ? "paypal_checkout_sandbox_client_id" : "paypal_checkout_client_id"]; $ppco_cc = strtoupper((string)$attr["cc"]); $ppco_intent = 'capture'; $ppco_sdk_key = (($ppco_sandbox) ? 'sandbox' : 'live').'|'.$ppco_cc.'|'.$ppco_intent; $ppco_sdk_just_loaded = false; if(empty($ppco_sdks[$ppco_sdk_key]) || !is_array($ppco_sdks[$ppco_sdk_key])) { $ppco_sdks[$ppco_sdk_key] = array( 'ns' => 's2m_ppco_'.substr(md5($ppco_sdk_key), 0, 10), 'id' => 's2member_ppco_sdk_'.substr(md5($ppco_sdk_key), 0, 10), ); $ppco_sdk_just_loaded = true; } $ppco_sdk_ns = (string)$ppco_sdks[$ppco_sdk_key]['ns']; $ppco_sdk_id = (string)$ppco_sdks[$ppco_sdk_key]['id']; $ppco_endpoint = home_url("/?s2member_paypal_checkout=1", $force_notify_url_scheme); $ppco_cancel = home_url("/"); $ppco_token = array( 'exp' => time() + 3600, 'invoice' => $paypal_invoice_input_value, 'ip' => c_ws_plugin__s2member_utils_ip::current(), 'item_name' => $attr["desc"], 'item_number' => $attr["level_ccaps_eotper"], 'custom' => $attr["custom"], 'amount' => $attr["ra"], 'cc' => $ppco_cc, 'ns' => $attr["ns"], 'rr' => 'BN', 'on0' => $paypal_on0_input_value, 'os0' => $paypal_os0_input_value, 'on1' => $paypal_on1_input_value, 'os1' => $paypal_os1_input_value, 'return' => $success_return_url, 'cancel' => $ppco_cancel, 'checksum' => md5($paypal_invoice_input_value.c_ws_plugin__s2member_utils_ip::current().$attr["level_ccaps_eotper"]), ); $ppco_token = urlencode(c_ws_plugin__s2member_utils_encryption::encrypt(serialize($ppco_token))); // output="anchor|url" support (no JS SDK; redirects through s2Member, then to PayPal approval URL). if($attr["output"] === "anchor" || $attr["output"] === "url") { $ppco_redirect_url = $ppco_endpoint.'&s2member_paypal_checkout_op=redirect&s2member_paypal_checkout_t='.$ppco_token; if($attr["output"] === "url") $code = $_code = $ppco_redirect_url; else // output="anchor" { $img_src = ($attr["image"] && $attr["image"] !== "default") ? $attr["image"] : $default_image; $code = $_code = 'PayPal'; } foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v; do_action("ws_plugin__s2member_during_sc_paypal_ccaps_button", get_defined_vars ()); unset($__refs, $__v); $code = c_ws_plugin__s2member_sc_paypal_button_e::sc_paypal_button_encryption ($code, get_defined_vars ()); return apply_filters("ws_plugin__s2member_sc_paypal_button", $code, get_defined_vars ()); } $ppco_div_id = 's2member_ppco_btn_'.md5($paypal_invoice_input_value.$attr["level_ccaps_eotper"]); $ppco_err_id = 's2member_ppco_err_'.md5($paypal_invoice_input_value.$attr["level_ccaps_eotper"]); $ppco_locale = ($attr["lang"]) ? (string)$attr["lang"] : ''; $ppco_lc = ($attr["lc"]) ? (string)$attr["lc"] : ''; if(!$ppco_locale && $ppco_lc) { $site_locale = (string)get_locale(); if(preg_match('/^([a-z]{2})[_-]/i', $site_locale, $m)) $ppco_locale = strtolower($m[1]).'_'.strtoupper($ppco_lc); else $ppco_locale = 'en_'.strtoupper($ppco_lc); } $ppco_locale_q = ($ppco_locale) ? '&locale='.rawurlencode($ppco_locale) : ''; $ppco_buyer_country_q = ($ppco_sandbox && $ppco_lc) ? '&buyer-country='.rawurlencode(strtoupper($ppco_lc)) : ''; $ppco_sdk_src = ($ppco_sandbox ? 'https://www.sandbox.paypal.com/sdk/js' : 'https://www.paypal.com/sdk/js'); //260114 !!! Independent CCAPS is capture-only; conditional subscription path below is dead code (cleanup/refactor later). if($ppco_intent === 'subscription') $ppco_sdk_src = $ppco_sdk_src.'?client-id='.rawurlencode($ppco_client_id).'¤cy='.rawurlencode($ppco_cc).'&vault=true&intent=subscription&disable-funding=card'.$ppco_buyer_country_q.$ppco_locale_q; else $ppco_sdk_src = $ppco_sdk_src.'?client-id='.rawurlencode($ppco_client_id).'¤cy='.rawurlencode($ppco_cc).'&intent=capture&commit=true&disable-funding=card'.$ppco_buyer_country_q.$ppco_locale_q; $code = '
'."\n"; $code .= ''."\n"; $ppco_sdk_src = apply_filters('ws_plugin__s2member_ppco_sdk_src', $ppco_sdk_src, get_defined_vars()); if($ppco_sdk_just_loaded) { $code .= ''."\n"; } $code .= ''."\n"; $_code = $code; foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v; do_action("ws_plugin__s2member_during_sc_paypal_ccaps_button", get_defined_vars ()); unset($__refs, $__v); $code = c_ws_plugin__s2member_sc_paypal_button_e::sc_paypal_button_encryption ($code, get_defined_vars ()); return apply_filters("ws_plugin__s2member_sc_paypal_button", $code, get_defined_vars ()); } $code = trim (c_ws_plugin__s2member_utilities::evl (file_get_contents (dirname (dirname (__FILE__)) . "/templates/buttons/paypal-ccaps-checkout-button.php"))); $code = preg_replace ("/%%images%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . "/src/images")), $code); $code = preg_replace ("/%%wpurl%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ())), $code); $code = preg_replace ("/%%endpoint%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? "www.sandbox.paypal.com" : "www.paypal.com")), $code); $code = preg_replace ("/%%paypal_business%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"])), $code); $code = preg_replace ("/%%paypal_merchant_id%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_merchant_id"])), $code); $code = preg_replace ("/%%cancel_return%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ("/"))), $code); $code = preg_replace ("/%%notify_url%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ("/?s2member_paypal_notify=1", $force_notify_url_scheme))), $code); $code = preg_replace ("/%%return%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($success_return_url)), $code); $code = preg_replace ("/%%custom%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["custom"])), $code); $code = preg_replace ('/ name\="lc" value\="(.*?)"/', ' name="lc" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["lc"])) . '"', $code); $code = preg_replace ('/ name\="no_shipping" value\="(.*?)"/', ' name="no_shipping" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["ns"])) . '"', $code); $code = preg_replace ('/ name\="item_name" value\="(.*?)"/', ' name="item_name" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["desc"])) . '"', $code); $code = preg_replace ('/ name\="item_number" value\="(.*?)"/', ' name="item_number" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["level_ccaps_eotper"])) . '"', $code); $code = preg_replace ('/ name\="page_style" value\="(.*?)"/', ' name="page_style" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["ps"])) . '"', $code); $code = preg_replace ('/ name\="currency_code" value\="(.*?)"/', ' name="currency_code" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["cc"])) . '"', $code); $code = preg_replace ('/ name\="custom" value\="(.*?)"/', ' name="custom" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["custom"])) . '"', $code); $code = preg_replace ('/ name\="invoice" value\="(.*?)"/', ' name="invoice" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($paypal_invoice_input_value)) . '"', $code); $code = preg_replace ('/ name\="on0" value\="(.*?)"/', ' name="on0" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($paypal_on0_input_value)) . '"', $code); $code = preg_replace ('/ name\="os0" value\="(.*?)"/', ' name="os0" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($paypal_os0_input_value)) . '"', $code); $code = preg_replace ('/ name\="on1" value\="(.*?)"/', ' name="on1" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($paypal_on1_input_value)) . '"', $code); $code = preg_replace ('/ name\="os1" value\="(.*?)"/', ' name="os1" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($paypal_os1_input_value)) . '"', $code); $code = preg_replace ('/ name\="amount" value\="(.*?)"/', ' name="amount" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["ra"])) . '"', $code); $code = $_code = ($attr["image"] && $attr["image"] !== "default") ? preg_replace ('/ src\="(.*?)"/', ' src="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["image"])) . '"', $code) : preg_replace ('/ src\="(.*?)"/', ' src="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($default_image)) . '"', $code); $code = ($attr["output"] === "anchor") ? 'PayPal' : $code; $code = ($attr["output"] === "url") ? c_ws_plugin__s2member_utils_forms::form_whips_2_url ($code) : $code; foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v; do_action("ws_plugin__s2member_during_sc_paypal_ccaps_button", get_defined_vars ()); unset($__refs, $__v); } else // Otherwise, we'll process this Button normally, using Membership routines. { $default_image = "https://www.paypal.com/" . (($attr["lang"]) ? $attr["lang"] : _x ("en_US", "s2member-front paypal-button-lang-code", "s2member")) . "/i/btn/btn_xpressCheckout.gif"; $paypal_on0_input_value = ($referencing = c_ws_plugin__s2member_utils_users::get_user_subscr_or_wp_id ()) ? "Referencing Customer ID" : "Originating Domain"; $paypal_os0_input_value = /* Current User's Paid Subscr. ID, or WP User ID, or domain. */ ($referencing) ? $referencing : $_SERVER["HTTP_HOST"]; $paypal_on1_input_value = /* Identifies the Customer's IP Address for tracking purposes. */ "Customer IP Address"; $paypal_os1_input_value = /* Current User's IP Address for tracking purposes. */ c_ws_plugin__s2member_utils_ip::current(); $paypal_invoice_input_value = /* s2Member's Unique Code~IP combo. */ uniqid () . "~" . c_ws_plugin__s2member_utils_ip::current(); $attr["desc"] = (!$attr["desc"]) ? $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $attr["level"] . "_label"] : $attr["desc"]; // PayPal Checkout: rr=0 with no trial/initial should behave like Buy Now (one-time), // so s2Member’s standard Buy Now/EOT routines run (mirrors other gateways). if(c_ws_plugin__s2member_paypal_utilities::paypal_checkout_is_enabled() && (string)$attr["rr"] === '0' && (float)$attr["ta"] <= 0 && (int)$attr["tp"] <= 0) { $attr["rr"] = 'BN'; } $attr["level_ccaps_eotper"] = ($attr["rr"] === "BN" && $attr["rt"] !== "L") ? $attr["level"] . ":" . $attr["ccaps"] . ":" . $attr["rp"] . " " . $attr["rt"] : $attr["level"] . ":" . $attr["ccaps"]; $attr["level_ccaps_eotper"] = /* Clean any trailing separators from this string. */ rtrim ($attr["level_ccaps_eotper"], ":"); $success_return_tra = array("ta" => $attr["ta"], "tp" => $attr["tp"], "tt" => $attr["tt"], "ra" => $attr["ra"], "rp" => $attr["rp"], "rt" => $attr["rt"], "rr" => $attr["rr"], "rrt" => $attr["rrt"], "rra" => $attr["rra"], "invoice" => $paypal_invoice_input_value, "checksum" => md5 ($paypal_invoice_input_value . c_ws_plugin__s2member_utils_ip::current() . $attr["level_ccaps_eotper"])); $success_return_url = /* s2Member handles this all by itself. However, it can be Filtered (see below). */ home_url ("/?s2member_paypal_return=1", $force_return_url_scheme); $success_return_url = add_query_arg ("s2member_paypal_return_tra", urlencode (c_ws_plugin__s2member_utils_encryption::encrypt (serialize ($success_return_tra))), $success_return_url); $success_return_url = apply_filters("ws_plugin__s2member_during_sc_paypal_button_success_return_url", $success_return_url, get_defined_vars ()); //260106 PayPal Checkout (REST) Buy Now (rr=BN) override. // Uses server-side create + server-side capture/confirm, then posts into existing IPN + Return handlers. if(c_ws_plugin__s2member_paypal_utilities::paypal_checkout_is_enabled()) { $ppco_sandbox = c_ws_plugin__s2member_paypal_utilities::paypal_checkout_is_sandbox(); $ppco_client_id = (string)$GLOBALS["WS_PLUGIN__"]["s2member"]["o"][($ppco_sandbox) ? "paypal_checkout_sandbox_client_id" : "paypal_checkout_client_id"]; $ppco_cc = strtoupper((string)$attr["cc"]); $ppco_intent = ($attr["rr"] === "BN") ? 'capture' : 'subscription'; $ppco_sdk_key = (($ppco_sandbox) ? 'sandbox' : 'live').'|'.$ppco_cc.'|'.$ppco_intent; $ppco_sdk_just_loaded = false; if(empty($ppco_sdks[$ppco_sdk_key]) || !is_array($ppco_sdks[$ppco_sdk_key])) { $ppco_sdks[$ppco_sdk_key] = array( 'ns' => 's2m_ppco_'.substr(md5($ppco_sdk_key), 0, 10), 'id' => 's2member_ppco_sdk_'.substr(md5($ppco_sdk_key), 0, 10), ); $ppco_sdk_just_loaded = true; } $ppco_sdk_ns = (string)$ppco_sdks[$ppco_sdk_key]['ns']; $ppco_sdk_id = (string)$ppco_sdks[$ppco_sdk_key]['id']; $ppco_endpoint = home_url("/?s2member_paypal_checkout=1", $force_notify_url_scheme); $ppco_cancel = home_url("/"); $ppco_token = array( 'exp' => time() + 3600, 'invoice' => $paypal_invoice_input_value, 'ip' => c_ws_plugin__s2member_utils_ip::current(), 'item_name' => $attr["desc"], 'item_number' => $attr["level_ccaps_eotper"], 'custom' => $attr["custom"], 'amount' => $attr["ra"], 'cc' => $ppco_cc, 'ns' => $attr["ns"], 'rr' => $attr["rr"], 'rp' => $attr["rp"], 'rt' => $attr["rt"], 'rrt' => $attr["rrt"], 'rra' => $attr["rra"], 'ta' => $attr["ta"], 'tp' => $attr["tp"], 'tt' => $attr["tt"], 'on0' => $paypal_on0_input_value, 'os0' => $paypal_os0_input_value, 'on1' => $paypal_on1_input_value, 'os1' => $paypal_os1_input_value, 'old__subscr_gateway' => get_user_option('s2member_subscr_gateway'), 'old__subscr_id' => get_user_option('s2member_subscr_id'), 'old__subscr_baid' => get_user_option('s2member_subscr_baid'), 'old__subscr_cid' => get_user_option('s2member_subscr_cid'), 'old__ipn_signup_vars' => c_ws_plugin__s2member_utils_users::get_user_ipn_signup_vars(), //260408 Capture the old context before PayPal/webhook processing can update the member's current profile. 'return' => $success_return_url, 'cancel' => $ppco_cancel, 'checksum' => md5($paypal_invoice_input_value.c_ws_plugin__s2member_utils_ip::current().$attr["level_ccaps_eotper"]), ); $ppco_token = urlencode(c_ws_plugin__s2member_utils_encryption::encrypt(serialize($ppco_token))); // output="anchor|url" support (no JS SDK; redirects through s2Member, then to PayPal approval URL). if($attr["output"] === "anchor" || $attr["output"] === "url") { $ppco_redirect_url = $ppco_endpoint.'&s2member_paypal_checkout_op=redirect&s2member_paypal_checkout_t='.$ppco_token; if($attr["output"] === "url") $code = $_code = $ppco_redirect_url; else // output="anchor" { $img_src = ($attr["image"] && $attr["image"] !== "default") ? $attr["image"] : $default_image; $code = $_code = 'PayPal'; } foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v; do_action("ws_plugin__s2member_during_sc_paypal_button", get_defined_vars ()); unset($__refs, $__v); $code = c_ws_plugin__s2member_sc_paypal_button_e::sc_paypal_button_encryption ($code, get_defined_vars ()); return apply_filters("ws_plugin__s2member_sc_paypal_button", $code, get_defined_vars ()); } $ppco_div_id = 's2member_ppco_btn_'.md5($paypal_invoice_input_value.$attr["level_ccaps_eotper"]); $ppco_err_id = 's2member_ppco_err_'.md5($paypal_invoice_input_value.$attr["level_ccaps_eotper"]); $ppco_locale = ($attr["lang"]) ? (string)$attr["lang"] : ''; $ppco_lc = ($attr["lc"]) ? (string)$attr["lc"] : ''; if(!$ppco_locale && $ppco_lc) { $site_locale = (string)get_locale(); if(preg_match('/^([a-z]{2})[_-]/i', $site_locale, $m)) $ppco_locale = strtolower($m[1]).'_'.strtoupper($ppco_lc); else $ppco_locale = 'en_'.strtoupper($ppco_lc); } $ppco_locale_q = ($ppco_locale) ? '&locale='.rawurlencode($ppco_locale) : ''; $ppco_buyer_country_q = ($ppco_sandbox && $ppco_lc) ? '&buyer-country='.rawurlencode(strtoupper($ppco_lc)) : ''; $ppco_sdk_src = ($ppco_sandbox ? 'https://www.sandbox.paypal.com/sdk/js' : 'https://www.paypal.com/sdk/js'); if($ppco_intent === 'subscription') $ppco_sdk_src = $ppco_sdk_src.'?client-id='.rawurlencode($ppco_client_id).'¤cy='.rawurlencode($ppco_cc).'&vault=true&intent=subscription&disable-funding=card'.$ppco_buyer_country_q.$ppco_locale_q; else $ppco_sdk_src = $ppco_sdk_src.'?client-id='.rawurlencode($ppco_client_id).'¤cy='.rawurlencode($ppco_cc).'&intent=capture&commit=true&disable-funding=card'.$ppco_buyer_country_q.$ppco_locale_q; $code = '
'."\n"; $code .= ''."\n"; $ppco_sdk_src = apply_filters('ws_plugin__s2member_ppco_sdk_src', $ppco_sdk_src, get_defined_vars()); if($ppco_sdk_just_loaded) { $code .= ''."\n"; } $code .= ''."\n"; $_code = $code; foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v; do_action("ws_plugin__s2member_during_sc_paypal_button", get_defined_vars ()); unset($__refs, $__v); $code = c_ws_plugin__s2member_sc_paypal_button_e::sc_paypal_button_encryption ($code, get_defined_vars ()); return apply_filters("ws_plugin__s2member_sc_paypal_button", $code, get_defined_vars ()); } $code = trim (c_ws_plugin__s2member_utilities::evl (file_get_contents (dirname (dirname (__FILE__)) . "/templates/buttons/paypal-checkout-button.php"))); $code = preg_replace ("/%%images%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . "/src/images")), $code); $code = preg_replace ("/%%wpurl%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ())), $code); $code = preg_replace ("/%%endpoint%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? "www.sandbox.paypal.com" : "www.paypal.com")), $code); $code = preg_replace ("/%%paypal_business%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"])), $code); $code = preg_replace ("/%%paypal_merchant_id%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_merchant_id"])), $code); $code = preg_replace ("/%%level_label%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $attr["level"] . "_label"])), $code); $code = preg_replace ("/%%cancel_return%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ("/"))), $code); // This brings them back to Front Page. $code = preg_replace ("/%%notify_url%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr (home_url ("/?s2member_paypal_notify=1", $force_notify_url_scheme))), $code); $code = preg_replace ("/%%return%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($success_return_url)), $code); $code = preg_replace ("/%%custom%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["custom"])), $code); $code = preg_replace ("/%%level%%/", c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["level"])), $code); $code = preg_replace ('/ \<\!--(\)--\>/', " $1", $code); $code = ($attr["rr"] === "BN") ? preg_replace ('/ (\)/', " $1_xclick$3", $code) : $code; $code = ($attr["rr"] === "BN") ? preg_replace ('/ (\)/', " ", $code) : $code; $code = ($attr["rr"] === "BN" || !$attr["tp"]) ? preg_replace ('/ (\)/', " ", $code) : $code; $code = ($attr["rr"] !== "BN") ? preg_replace ('/ (\)/', " $1_xclick-subscriptions$3", $code) : $code; $code = ($attr["rr"] !== "BN") ? preg_replace ('/ (\)/', " ", $code) : $code; $code = preg_replace ('/ name\="lc" value\="(.*?)"/', ' name="lc" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["lc"])) . '"', $code); $code = preg_replace ('/ name\="no_shipping" value\="(.*?)"/', ' name="no_shipping" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["ns"])) . '"', $code); $code = preg_replace ('/ name\="item_name" value\="(.*?)"/', ' name="item_name" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["desc"])) . '"', $code); $code = preg_replace ('/ name\="item_number" value\="(.*?)"/', ' name="item_number" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["level_ccaps_eotper"])) . '"', $code); $code = preg_replace ('/ name\="page_style" value\="(.*?)"/', ' name="page_style" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["ps"])) . '"', $code); $code = preg_replace ('/ name\="currency_code" value\="(.*?)"/', ' name="currency_code" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["cc"])) . '"', $code); $code = preg_replace ('/ name\="custom" value\="(.*?)"/', ' name="custom" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["custom"])) . '"', $code); $code = preg_replace ('/ name\="invoice" value\="(.*?)"/', ' name="invoice" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($paypal_invoice_input_value)) . '"', $code); $code = preg_replace ('/ name\="on0" value\="(.*?)"/', ' name="on0" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($paypal_on0_input_value)) . '"', $code); $code = preg_replace ('/ name\="os0" value\="(.*?)"/', ' name="os0" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($paypal_os0_input_value)) . '"', $code); $code = preg_replace ('/ name\="on1" value\="(.*?)"/', ' name="on1" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($paypal_on1_input_value)) . '"', $code); $code = preg_replace ('/ name\="os1" value\="(.*?)"/', ' name="os1" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($paypal_os1_input_value)) . '"', $code); $code = preg_replace ('/ name\="modify" value\="(.*?)"/', ' name="modify" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["modify"])) . '"', $code); $code = preg_replace ('/ name\="amount" value\="(.*?)"/', ' name="amount" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["ra"])) . '"', $code); $code = preg_replace ('/ name\="src" value\="(.*?)"/', ' name="src" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["rr"])) . '"', $code); $code = preg_replace ('/ name\="srt" value\="(.*?)"/', ' name="srt" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["rrt"])) . '"', $code); $code = preg_replace ('/ name\="sra" value\="(.*?)"/', ' name="sra" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["rra"])) . '"', $code); $code = preg_replace ('/ name\="a1" value\="(.*?)"/', ' name="a1" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["ta"])) . '"', $code); $code = preg_replace ('/ name\="p1" value\="(.*?)"/', ' name="p1" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["tp"])) . '"', $code); $code = preg_replace ('/ name\="t1" value\="(.*?)"/', ' name="t1" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["tt"])) . '"', $code); $code = preg_replace ('/ name\="a3" value\="(.*?)"/', ' name="a3" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["ra"])) . '"', $code); $code = preg_replace ('/ name\="p3" value\="(.*?)"/', ' name="p3" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["rp"])) . '"', $code); $code = preg_replace ('/ name\="t3" value\="(.*?)"/', ' name="t3" value="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["rt"])) . '"', $code); $code = $_code = ($attr["image"] && $attr["image"] !== "default") ? preg_replace ('/ src\="(.*?)"/', ' src="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["image"])) . '"', $code) : preg_replace ('/ src\="(.*?)"/', ' src="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($default_image)) . '"', $code); $code = ($attr["output"] === "anchor") ? 'PayPal' : $code; $code = ($attr["output"] === "url") ? c_ws_plugin__s2member_utils_forms::form_whips_2_url ($code) : $code; foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v; ($attr["modify"]) ? do_action("ws_plugin__s2member_during_sc_paypal_modification_button", get_defined_vars ()) : do_action("ws_plugin__s2member_during_sc_paypal_button", get_defined_vars ()); unset($__refs, $__v); } $code = c_ws_plugin__s2member_sc_paypal_button_e::sc_paypal_button_encryption ($code, get_defined_vars ()); return apply_filters("ws_plugin__s2member_sc_paypal_button", $code, get_defined_vars ()); } } }