| @@ -263,10 +263,10 @@ | ||
| 263 | 263 | echo '<h3>One Button Does It All For Cancellations (copy/paste)</h3>' . "\n"; |
| 264 | 264 | echo '<p>Since all recurring charges are associated with a PayPal Subscription; and every PayPal Subscription is associated with a PayPal Account; your Members will always have a PayPal Account of their own, which is tied to their Membership with you. So... a Member can simply log into their own PayPal account and cancel their Subscription(s) with you at anytime, all on their own. However, some Customers do not realize this. So, if you would like to make it clearer (easier) for Members to cancel their own Subscription(s), you can provide this Cancellation Button for them on your Login Welcome Page, or somewhere in the support section of your website. Note... you don\'t have to use this Cancellation Button at all, if you don\'t want to. It\'s completely optional.</p>' . "\n"; |
| 265 | 265 | echo '<p><em><strong>Cancellation Process:</strong> Very simple. A Member clicks the Cancellation Button. PayPal asks them to log into their PayPal account. Once they\'re logged in, PayPal will display a list of all active Subscriptions they have with you. They choose which ones they want to cancel, and s2Member is notified silently behind-the-scenes, through the PayPal IPN service.</em></p>' . "\n"; |
| 266 | 266 | echo '<p><em><strong>Understanding Cancellations:</strong> It\'s important to realize that a Cancellation is not an EOT (End Of Term). All that happens during a Cancellation event, is that billing is stopped, and it\'s understood that the Customer is going to lose access, at some point in the future. This does NOT mean, that access will be revoked immediately. A separate EOT event will automatically handle a (demotion or deletion) later, at the appropriate time; which could be several days, or even a year after the Cancellation took place.</em></p>' . "\n"; |
| 267 | - echo '<p><em><strong>Some Hairy Details:</strong> There might be times whenever you notice that a Member\'s Subscription has been cancelled through PayPal... but, s2Member continues allowing the User access to your site as a paid Member. Please don\'t be confused by this... in 99.9% of these cases, the reason for this is legitimate. s2Member will only remove the User\'s Membership privileges when an EOT (End Of Term) is processed, a refund occurs, a chargeback occurs, or when a cancellation occurs - which would later result in a delayed Auto-EOT by s2Member.</em></p>' . "\n"; | |
| 268 | - echo '<p><em>s2Member will not process an EOT (End Of Term) until the User has completely used up the time they paid for. In other words, if a User signs up for a monthly Subscription on Jan 1st, and then cancels their Subscription on Jan 15th; technically, they should still be allowed to access the site for another 15 days, and then on Feb 1st, the time they paid for has completely elapsed. At that time, s2Member will remove their Membership privileges; by either demoting them to a Free Subscriber, or applying the configured Delete behavior. s2Member also calculates one extra day (24 hours) into its equation, just to make sure access is not removed sooner than a Customer might expect.</em></p>' . "\n"; | |
| 267 | + echo '<p><em><strong>Some Hairy Details:</strong> There might be times whenever you notice that a Member\'s Subscription has been cancelled through PayPal... but, s2Member continues allowing the User access to your site as a paid Member. Please don\'t be confused by this... in 99.9% of these cases, the reason for this is legitimate. s2Member will only process the membership EOT when an EOT (End Of Term) is reached, a refund occurs, a chargeback occurs, or when a cancellation later results in a delayed Auto-EOT by s2Member.</em></p>' . "\n"; | |
| 268 | + echo '<p><em>s2Member will not process an EOT (End Of Term) until the User has completely used up the time they paid for. In other words, if a User signs up for a monthly Subscription on Jan 1st, and then cancels their Subscription on Jan 15th; technically, they should still be allowed to access the site for another 15 days, and then on Feb 1st, the time they paid for has completely elapsed. At that time, s2Member will process their membership EOT by either assigning the role selected under Demote To Role or applying the configured Delete behavior. s2Member also calculates one extra day (24 hours) into its equation, just to make sure access is not removed sooner than a Customer might expect.</em></p>' . "\n"; | |
| 269 | 269 | do_action("ws_plugin__s2member_during_paypal_buttons_page_during_left_sections_during_cancellation_buttons", get_defined_vars ()); |
| 270 | 270 | |
| 271 | 271 | echo '<table class="form-table">' . "\n"; |
| 272 | 272 | echo '<tbody>' . "\n"; |
| @@ -568,19 +568,27 @@ | ||
| 568 | 568 | echo '<li><code>cc="USD"</code> 3 character Currency Code. Not valid when <code>cancel="1"</code>.</li>' . "\n"; |
| 569 | 569 | echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '<li><code>ccaps="music,videos"</code> A comma-delimited list of Custom Capabilities. Only valid w/ Membership Level Access and/or Independent Custom Capabilities.</li>' . "\n" : ''; |
| 570 | 570 | echo '<li><code>custom="' . esc_html ($_SERVER["HTTP_HOST"]) . '"</code> must start with your domain. Additional values can be piped in (ex: <code>custom="' . esc_html ($_SERVER["HTTP_HOST"]) . '|cv1|cv2|cv3|etc"</code>). Not valid when <code>cancel="1"</code>.</li>' . "\n"; |
| 571 | 571 | echo '<li><code>desc="Gold Membership"</code> A brief purchase Description. Not valid when <code>cancel="1"</code>.</li>' . "\n"; |
| 572 | - echo '<li><code>dg="0"</code> The Digital Goods directive. s2Member will eventually be integrated with <a href="http://s2member.com/r/paypal-express-checkout-digitals/" target="_blank" rel="external">Digital Goods</a> for inline Express Checkout. But for now, this should always be <code>0</code>.</li>' . "\n"; | |
| 572 | + //260920.0141 PayPal Checkout has no separate Digital Goods flow; dg=1 only forces the existing no-shipping behavior. | |
| 573 | + echo '<li><code>dg="0"</code> Digital Goods directive. Leave this at <code>0</code> for normal use. Setting <code>dg="1"</code> forces <code>ns="1"</code> so that no shipping address is requested.</li>' . "\n"; | |
| 573 | 574 | echo '<li><code>exp="72"</code> Access Expires (in hours). Only valid when <code>sp="1"</code> for Specific Post/Page Access.</li>' . "\n"; |
| 574 | 575 | echo '<li><code>ids="14"</code> A Post/Page ID#, or a comma-delimited list of IDs. Only valid when <code>sp="1"</code> for Specific Post/Page Access.</li>' . "\n"; |
| 575 | - echo '<li><code>image="default"</code> Button Image Location. Possible values: <code>default</code> = use the default PayPal Button, <code>http://...</code> = location of your custom Image. Note: With PayPal Checkout (Beta), a custom <code>image=</code> only applies to <code>output="anchor"</code> / <code>output="url"</code>; <code>output="button"</code> is rendered by PayPal and ignores custom images.</li>' . "\n"; | |
| 576 | - echo '<li><code>lang=""</code> Optional 5 character Button Language Code <em>(ake: Locale Code—ex: <code>en_US</code>)</em>. This controls the interface language of the PayPal Button itself. If unspecified, the language defaults to English (i.e., <code>en_US</code>; or to the value set by an optional MO translation file; which translates s2Member overall). See <a href="http://s2member.com/r/paypal-locale-codes/" target="_blank" rel="external">this list of possible Locale Codes</a>.</li>' . "\n"; | |
| 577 | - echo '<li><code>lc=""</code> Optional 2 character Country/Locale Code <em>(i.e., Country Code—ex: <code>US</code>)</em>. This controls the interface language used at PayPal during checkout. If unspecified, the language is determined by PayPal when possible, defaulting to <code>US</code> <em>english</em> when not possible. See <a href="http://s2member.com/r/paypal-locale-codes/" target="_blank" rel="external">this list of possible Country Codes</a>. Not valid when <code>cancel="1"</code>.</li>' . "\n"; | |
| 576 | + //260920.0000 Clarify which PayPal Checkout output modes actually render and use the shortcode's image attribute. | |
| 577 | + echo '<li><code>image="default"</code> Button Image. Possible values: <code>default</code> = use the default PayPal image where an image is rendered, <code>https://...</code> = use your custom image. With PayPal Checkout, <code>image=</code> applies to <code>output="anchor"</code>. <code>output="button"</code> is rendered by PayPal and does not use this image; <code>output="url"</code> returns only a URL and renders no image.</li>' . "\n"; | |
| 578 | + //260920.0141 PayPal Checkout can select its own locale when lang is blank; anchor output still uses en_US for the default PayPal image. | |
| 579 | + echo '<li><code>lang=""</code> Optional PayPal Locale Code (ex: <code>en_US</code>). With PayPal Checkout <code>output="button"</code>, this controls the PayPal interface language; leave it blank to let PayPal choose automatically. With <code>output="anchor"</code>, it controls the language of the default PayPal image and defaults to <code>en_US</code>.</li>' . "\n"; | |
| 580 | + //260920.0141 lc is a country/locale hint in PayPal Checkout, not a guaranteed checkout-language setting with a US-English fallback. | |
| 581 | + echo '<li><code>lc=""</code> Optional 2 character Country Code (ex: <code>US</code>). With PayPal Checkout <code>output="button"</code>, this can be used as a country/locale hint; when left blank, PayPal determines the buyer\'s locale automatically. Not valid when <code>cancel="1"</code>.</li>' . "\n"; | |
| 578 | 582 | echo '<li><code>level="1"</code> Membership Level [1-4] <em>(or, up to the number of configured Levels)</em>. Only valid for Buttons providing paid Membership Level Access.' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' Or, with Independent Custom Capabilities this MUST be set to <code>level="*"</code>, and <code>ccaps=""</code> must NOT be empty <em>(i.e., <code>level="*" ccaps="music,videos"</code>)</em>.') . '</li>' . "\n"; |
| 579 | - echo '<li><code>modify="0"</code> Modification directive. Only valid w/ Membership Level Access. Possible values: <code>0</code> = allows Customers to only create a new Subscription. Values <code>1</code> and <code>2</code> are <a href="https://developer.paypal.com/docs/paypal-payments-standard/integration-guide/Appx-websitestandard-htmlvariables/#deprecated-variables" target="_blank" rel="external">no longer valid</a>.</li>' . "\n"; | |
| 580 | - echo '<li><code>ns="0"</code> The <em>no_shipping</em> directive. Possible values: <code>0</code> = prompt for an address, but do not require one, <code>1</code> = do not prompt for a shipping address, <code>2</code> = prompt for an address, and require one. Not valid when <code>cancel="1"</code>.</li>' . "\n"; | |
| 581 | - echo '<li><code>output="button"</code> Output Type. Possible values: <code>button</code> = PayPal Button w/hidden inputs, <code>anchor</code> = PayPal Button ( <a> anchor tag ) URL w/ ?query string, <code>url</code> = raw URL w/ ?query string.</li>' . "\n"; | |
| 582 | - echo '<li><code>ps="paypal"</code> PayPal checkout Page Style. Not valid when <code>cancel="1"</code>.</li>' . "\n"; | |
| 583 | + //260920.0141 PayPal deprecated the old modification modes and s2Member now always normalizes modify to 0. | |
| 584 | + echo '<li><code>modify="0"</code> Legacy PayPal modification directive. PayPal no longer supports the old <code>1</code> and <code>2</code> values, so s2Member always uses <code>0</code>.</li>' . "\n"; | |
| 585 | + //260920.0141 Match the shortcode's actual ns=1 default and distinguish PayPal Checkout behavior from the legacy PayPal Standard values. | |
| 586 | + echo '<li><code>ns="1"</code> Shipping Address directive. <code>1</code> = do not request a shipping address. With legacy PayPal Standard, <code>0</code> requests an optional address and <code>2</code> requires one. With PayPal Checkout one-time payments, values other than <code>1</code> allow PayPal to use the buyer\'s shipping address. Not valid when <code>cancel="1"</code>.</li>' . "\n"; | |
| 587 | + //260919.2346 Explain modern PayPal Checkout output modes in plain language, including the different cancellation behavior for logged-in vs. logged-out visitors. | |
| 588 | + echo '<li><code>output="button"</code> Output Type. Possible values: <code>button</code> = display the normal PayPal button on your page; for Cancellation Buttons, this can cancel the logged-in member\'s PayPal subscription on-site. <code>anchor</code> = display a clickable PayPal image/link that sends the visitor to PayPal. <code>url</code> = return only the destination URL, so you can build your own link or button. For Cancellation Buttons, <code>output="button"</code> requires the member to be logged in; <code>output="anchor"</code> and <code>output="url"</code> can be used while logged out and send the visitor to PayPal\'s subscription-management page.</li>' . "\n"; | |
| 589 | + //260920.0141 Checkout Page Style is used by legacy PayPal Standard; the PayPal Checkout flow does not consume this attribute. | |
| 590 | + echo '<li><code>ps="paypal"</code> Legacy PayPal Standard Page Style. PayPal Checkout ignores this attribute. Not valid when <code>cancel="1"</code>.</li>' . "\n"; | |
| 583 | 591 | echo '<li><code>ra="0.01"</code> Regular, Buy Now, and/or Recurring Amount. Must be >= <code>0.01</code>. Not valid when <code>cancel="1"</code>.</li>' . "\n"; |
| 584 | 592 | echo '<li><code>rp="1"</code> Regular Period. Only valid w/ Membership Level Access' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' and/or Independent Custom Capabilities') . '. Must be >= <code>1</code> (ex: <code>1</code> Week, <code>2</code> Months, <code>1</code> Month, <code>3</code> Days).</li>' . "\n"; |
| 585 | 593 | echo '<li><code>rt="M"</code> Regular Term. Only valid w/ Membership Level Access' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' and/or Independent Custom Capabilities') . '. Possible values: <code>D</code> = Days, <code>W</code> = Weeks, <code>M</code> = Months, <code>Y</code> = Years, <code>L</code> = Lifetime.</li>' . "\n"; |
| 586 | 594 | echo '<li><code>rr="1"</code> Recurring directive. Only valid w/ Membership Level Access' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' and/or Independent Custom Capabilities') . '. Possible values: <code>0</code> = non-recurring "Subscription" with possible Trial Period for free, or at a different Trial Amount; <code>1</code> = recurring "Subscription" with possible Trial Period for free, or at a different Trial Amount; <code>BN</code> = non-recurring "Buy Now" functionality, no Trial Period possible.</li>' . "\n"; |