Charge Changelog

2019-08-22

3.0.0-beta.1

Added

  • Stripe SCA support

Changed

  • exp:charge:form is now 100% ajax
  • Charge JS has been changed to use new Stripe Elements
  • Stripe API version has been updated to the latest

Fixed

  • Undefined index error when listing saved cards
2019-04-25

2.3.4

Changed

  • Tag exp:charge:stripe_js no longer references a local copy of the Stripe JS file

Removed

  • Outdated local stripe.js file
2019-01-17

2.3.3

Fixed

  • Fixed PHP5 parse error from short array notation.
  • Fixed xss_clean deprecated error
  • Fixed EE2 PHP fatal error when creating entries
2018-11-26

2.3.2

Fixed

  • Changed foundation helpers folder name to prevent name conflict with EE helpers folder
2018-11-26

2.3.1

Fixed

  • EE2: Fixed failure to load namespaced class files properly
2018-11-21

2.3.0

Added

  • ExpressionEngine 5 support
2018-08-09

2.2.0

Added

  • Added exp:charge:has_active_recurring tag
2018-08-07

2.1.2

Fixed

  • Fixed issue using more than 1 set length subscription with a single customer
2018-02-14

2.1.1

Fixed

  • Fixed issue using plan_coupon in the update_plan_form tag
2018-02-09

2.1.0

Added

  • EE4 Compatibility!
  • Coupon codes can now be validated before submitting the form!
2017-12-07

2.0.22

Fixed

  • Fixed an issue with trying to type a namespaced variable to an integer
2017-11-27

2.0.21

Fixed

  • Fixed issue where using an action with update_plan_form wasn't working
2017-11-09

2.0.20

Fixed

  • Fixed undefined notice error when using discounts
2017-10-26

2.0.19

Fixed

  • Fixed issue with Charge data not being sent properly with charge_action_create_entry_start and charge_action_create_entry_end hooks
2017-09-29

2.0.18

Fixed

  • Fixed missing exp:charge:info tags
2017-03-21

2.0.17

Fixed

  • Fixed rare bug when trying to cancel a recurring payment that caused it to fail silently
2017-02-28

2.0.16

Fixed

  • Fixed metadata not being passed on Subscription object for recurring charges
2017-02-02

2.0.15

Added

  • Added plan_full_amount_formatted, plan_full_amount_currency_formatted, plan_discount_formatted, plan_discount_currency_formatted to the exp:charge:customer {charges}{/charges} tag
2017-02-02

2.0.14

Fixed

  • Fixed undefined variable in exp:charge:customer {charges} tag
2017-01-31

2.0.13

Fixed

  • Fixed missing fieldtype record when upgrading from an older version of Charge
2017-01-19

2.0.12

Fixed

  • Fixed issue with missing CSRF column on EE installs before 2.7
2017-01-06

2.0.11

Fixed

  • Fixed issue upgrading from Charge 1.10.0 to Charge 2.x in MySQL strict mode
2017-01-03

2.0.10

Fixed

  • Fixed EE3 issue where updating the module would still show the old version and update button.
  • Fixed issue with Subscription BCC emails not firing from webhook calls.
2017-01-02

2.0.9

Fixed

  • Fixed issue with ee() not being declared in older EE installs.
2016-12-09

2.0.8

Fixed

  • Fixed issue with undefined Stripe key notices
2016-12-09

2.0.7

Fixed

  • Fixed JS issue when submitting Charge form a 2nd time after validation fail
  • Fixed issue with PCRE validation on some older PHP installs
2016-11-28

2.0.6

Added

  • Added javascript for AJAX transactions

Fixed

  • Fixed issue submitting exp:charge:form tags with no additional parameters
2016-11-14

2.0.5

Added

  • Added "Delete Test Transactions" button to control panel settings page.

Fixed

  • Fixed EE3 CSS issue on dashboard when there are no transactions
2016-11-07

2.0.4

Added

  • update_plan_form now requires current_plan hash

Changed

  • Cleaned up EE3 dashboard layout
  • Cleaned up Log page view. Extended data now shows full width below the log entry you're viewing.

Fixed

  • update_plan_form now properly updates an existing user's subscription
  • Fixed issue with some installs having a double slash issue with action urls
  • Fixed rare card_type not being set error
2016-10-12

2.0.3

Fixed

  • Fixed issue when trying to add a Grid field threw PHP errors
2016-10-03

2.0.2

Fixed

  • Fixed issue with legacy transactions not showing in Charge dashboard
2016-09-19

2.0.1

Fixed

  • Fixed issue with incorrect file reference in ft.charge.php
2016-09-19

2.0.0

Added

  • Charge channel fieldtype now allows entering all Charge tag parameters in any Channel Entry
  • exp:charge:field tag allows pulling specific field from any Channel Entry with the Charge fieldtype
  • Customers can now have multiple active Stripe subscriptions (previously was limited to 1)
  • exp:charge:coupons now lists coupons setup inside Charge
  • Added current_period_end for cancelled subscriptions that haven't expired yet
  • Added email template examples
  • Added demo templates for most all Charge implementations
  • PHP7 compatibility
  • MySQL 5.7 compatibility
  • Coupons can now be restricted by start/end date and to a specific Channel Entry (that has the Charge fieldtype)
  • Stripe connection test in Charge Settings
  • Stripe TLS 1.2 support test added

Changed

  • Customer name validation error message is now more descriptive
  • Documentation for {subscriptions} loop had incorrect tag {name}, changed to correct {subscription_name}
  • Upgrade to Charge Logs to display events and errors more clearly
  • Removed member email from being appended to screen_name during member creation
  • exp:charge:js now loads third-party URL for Stripe JS instead of local copy
  • exp:charge:customer {subscriptions} loop now returns both active and inactive subscriptions
  • Charge settings are now stored in their own table
  • Webhook error messages are less hyperbolic and log warnings instead of fatal exceptions for non-breaking situations (like no matching customer if implementation isn't using subscriptions)
  • Number of years in credit card expiration loop increased to 10 years
  • Stripe Library upgraded to latest version

Fixed

  • Customer names containing apostrophes or hyphens failed validation
  • Required fields validation was failing if it received null instead of empty string
  • Theme path not being access correctly in some instances
  • Update file used ambiguous function names that could cause collisions with future versions
  • exp:charge:api tag didn't return correct data format for some calls
  • exp:charge:act cancel recurring used incorrect variable for legacy subscriptions
  • Cancel recurring didn't pass Stripe error through if it was something other than 'already cancelled' or 'no matching subscription'
  • Version compare issue in update file
  • Charge Logs Show Extended sometimes didn't display content
  • exp:charge:info {amount} now shows precision, was rounding decimals off
  • plan_balance now creates an invoice item instead of setting the actual plan_balance on the Stripe Customer which sets the immutable currency value to the default set in the Stripe account
2015-10-29

1.10.0

Added

  • Saved Cards. Now you can let your customers save their cards for future purchases with just a few simple new tags.
  • Update Plan options. Enabled your customers to change their recurring payments and subscriptions mid-cycle. Great if you're offering multiple membership subscription tiers or recurring donations. Just make use of the exp:charge:updateplanform and all the same options for actions and subscriptions
  • Subscription Updated email option on subscriptions. This new email class is triggered only when a subscriber moves between an existing subscription, to a new subscription level, as triggered from the exp:charge:updateplanform tag.
  • Added a new customer fetch ability as part of the exp:charge:form tag. Now if the user is logged in, Charge will attempt to fetch their up to date customer information so you can populate the form and offer contextual info - saved cards, previous purchases etc..
  • Added Webhook error debug logging. Now when a web hook fails the cause for the fail is logged in the CP logs to help developer see the issues
  • Added new options to adjust the level of log retention and triggering. Will default to a moderate level but logs can be fully disabled, or increased in sensitivity as required
  • Added the ability to truncate logs and free up some db rows on more active installs
  • Added a new saved card handling to the payment forms, along with new {haspaymentsource} tags, {savedcard..} variables and more.

Changed

  • Updated Member subscription CP views. Now massively more useable, we list member info, real names, and more
  • Updated log views with a new threaded view to help diagnose issues and trace options

Fixed

  • Fixed an issue where extended card address details wouldn't correctly save to a customer
  • Fixed an issue that could cause some payment records to fail to properly save due to a mysql config issue on some strict setups
  • Fixed an bug in the CP views where a php error would show if a user had been removed at the EE level but their subscription was still active
  • Fixed a possible issue where an escaped web hook wouldn't be fully parsed if the body was invalid, but where we'd still send an accepted header back to Stripe, preventing a future web hook reattempt.
  • Fixed a range of other minor bugs
2015-10-02

1.9.8

Added

  • Added the ability to export all possible charge payments with the built in export function. Previously this was limited to EE's native row limit.

Fixed

  • Fixed a bug where the built in CSRF exempt checks for web hook actions would fail on EE 2.10+
  • Fixed a bug where when upgrading from a legacy EE version the proper CSRF flag may not have been properly set
2015-08-28

1.9.6

Fixed

  • a bug where payment error messages wouldn't be properly retained in the flash data, and so the error_info tag wouldn't show the full error details on redirect.‚Äč
  • a mysql strict error on install
2015-07-31

1.9.5

Added

  • Support for unlimited length set length plans, when used with recurring payments. The 12 months limit still applies when used with one-time payments

Fixed

  • A bug where some exception states would throw decoding errors depending on the exact error condition
  • A bug related to using recurring plans and set length plans together but not specifying the default plan interval
  • A bug related to using Coupons on single time payments, but with a set length that was hitting an internal safety check when it was in a valid state
  • Documentation of all hooks usage to include full parameter details and more examples
  • Handling of error edge cases to be more resilient
  • A php error that would be thrown when used with very old php versions on strict mode
  • A error condition when used on php 5.6+ and with errors on strict, due to some legacy <5.2 handling code.
2015-06-05

1.9.4

Added

  • Created or updated entries are now tracked against the source payment event. Access this via the new 'connectedentryid' variable on all charges.
  • The ability to pass open ended extra data tags on the form tags. Use the syntax of 'data-foo="bar"' to add any extra parameters to the generated form tags
  • The ordering of triggered action items. Emails are now always sent last to prevent some situations where an action that was triggering entry or member changes would send an email before that had actually completed

Fixed

  • An uncaught fatal error that could occur on the latest version of EE
  • Some minor breaks introduced in EE 2.10.1 where return exception type handling has changed
  • A bug that'd allow empty meta data values through validation when being passed as part of a larger validation set, which could upset meta data when passed to the stripe api
2015-04-25

1.9.2

Changed

  • Naming of recurringcount to countrecurring for consistency and to avoid parsing error

Fixed

  • Handling of webhook update data on event parsing to fix possible out of date data being passed on email triggers
2015-03-13

1.9.0

Added

  • New storage of the stripe customer id after purchases. Available as {customer_id}
  • New storage of the stripe payment id after payments. Available as {payment_id} only on one-time payments
  • CP views to expose direct links to the Stripe dashboard for relevant customer details

Changed

  • Charge now will search for an existing customer record for logged in member payments. If found will reuse that existing stripe customer rather than creating a new one, updating the logged details in the process
  • When an entry is created as a result of a triggered action the author for that entry is set to the logged in member id

Fixed

  • A bug in the action triggers that could cause the create entry action to be skipped if triggered along with the update entry action
2015-02-13

1.8.13

Added

  • Support for dynamic subscription date info on the payment object

Fixed

  • A bug where trialling subscriptions wouldn't be fully updated when the trial period ended
  • A bug where trial periods could be cancelled early and revoke the user's access immediately
  • A bug where a valid webhook event wouldn't be fully registered if the body contents contained unexpected attributes
2015-02-06

1.8.12

Added

  • Added 4 new hooks for entry action control - chargeactionupdateentrystart,chargeactionupdateentryend, chargeactioncreateentrystart, and chargeactioncreateentryend

Fixed

  • A bug where trial end dates wouldn't be properly recorded and updated when a new trial period began
  • A bug where coupons that were one-time would sometimes throw an error when configured with a specific combination of settings
  • A bug where a new recurring payment using the default fallback for interval length wouldn't be able to apply a recurring coupon
  • A bad reference to the template parser in the headless action trigger that would silently fail if an entry was updated out of flow from a payment
2015-01-23

1.8.11

Added

  • Support for Trailing states on subscriptions, along with state swapping when a trailing subscription activates, a user cancels during a trail, and reactivates a cancelled trail
  • Extra logging within the action classes for simpler debugging and a clearer view of any action failures
  • Better exception handling for actions that are triggered in a bad state
  • Support for triggering multiple actions on a single payment event by passing multiple action names, separated by a pipe

Changed

  • An issue with random email EE comment strings being included in some emails. (Would look like {!-- ra:... --} within the emails)
2014-12-17

1.8.10

Fixed

  • A bug where subscriptions customer ids could be lost from legacy setups, with the webhooks configured in a non-default config
  • A bug the export process that stopped the export early and sometimes wouldn't return the complete csv
  • A bug in the subscriptions email where a left over EE template parser comment would be output due to a bug in the core EE render function
  • A bug in the chargepostpayment hook that reference a non-existant stripe variable that would cause an error
2014-11-10

1.8.9

Fixed

  • A missing card image for Discover cards
  • A bug in subscriptions where customer_ids wouldn't be properly recorded for some setups
  • A bug that affected installs running in mysql strict mode
2014-11-07

1.8.8

Added

  • An extra csrf_exempt direct check within the MCP views. Now will directly verify all the settings are correct when the index is viewed

Changed

  • Better error language on missing card_token errors to indicate javascript is required for the payment form

Fixed

  • A bug where EE conditional comments left over from the TMPL parser would be output to generated emails
2014-10-21

1.8.7

Changed

  • The return handling for zero value invoices. Now returns a 200 header to the Stripe webhook to prevent repeat attempted triggers from the Stripe side
  • The meta and stripe variable handling during action trigger processing. Meta data now is dynamically unpacked as required

Fixed

  • A possible situation where a php notice would be thrown when invalid meta data is passed to an action trigger
2014-10-09

1.8.6

Added

  • Full meta data parsing for all actions. You can now use all meta data in your updated and created entries

Changed

  • CSRF handling for 2.8+ installs

Fixed

  • A possible legacy issue for older installs there have been updated where the webhook callback may not have been set to be csrf exempt
2014-08-01

1.8.5

Added

  • Hooks. 4 (yes four) new hooks for member subscription : chargesubscriptionstartaddmember, chargesubscriptionendaddmember, chargesubscriptionstartremovemember and chargesubscriptionendremovemember. Use them to take complete control over your member subscription actions

Fixed

  • A bug that let some hooks trigger when they should have been disabled
  • A Stripe library bug that would affect some older php versions
  • A minor compatibility issue in the CP on EE 2.9.0
2014-07-11

1.8.4

Changed

  • The bundled js to pull the supplied payment card's 'Brand' attribute, over their 'Type', which is more consistent across account settings
  • The bundled readme to directly reference the included Charge assets
  • The language on the Force SSL setting to indicate it also applies to Charge assets

Fixed

  • The paths to respect custom third party theme locations
2014-06-27

1.8.3

Added

  • Hook chargeactionstart that fires when a user action is triggered, ie. a user cancels or reactivates their subscription via the exp:charge:act tag
  • A new 'plansetname' optional parameter on the exp:charge:form to optionally let you give your payment plans a defined name in the Stripe api, instead of the automatically generated name based on the plan parameters

Fixed

  • Fixed a bug affecting member subscriptions on EE versions below 2.6, where the member group model doesn't exist
2014-06-20

1.8.2

Added

  • Hook chargewebhookreceived_start that fires against all validated inbound Stripe webhook events. The full details of the event are available for custom implemenations beyond standard webhook handling.

Changed

  • Updated made some previously private webhook methods public to allow for external reuse on some cases. Methods like chargewebhook->extractcustomerid() and chargewebhook->extractinvoiceamount()are now available
  • Updated the handling of fixed cost coupons in multiple currencies for better fallbacks
  • Updated the wording on some error messages to make it clearer the cause of the issue

Fixed

  • Fixed an install bug on EE versions less than 2.7 where the actions were attempting to set to be CSRF exempt
  • Fixed a bug where the status of a stripe return value wasn't properly collected
  • Fixed a bug in the webhook method that was detecting the value of a paid invoice
2014-06-12

1.8.1

Fixed

  • a javascript bug in the bundled jquery library where classes weren't properly adjusted on error
2014-06-06

1.8.0

Added

  • Added full Coupon support. Coupons can be used for both one-time and recurring payments, and can be fixed value or percentage based. For recurring payments extra options like maxium usages, how long they repeat and more are available

Changed

  • More robust handling for fixed length plans, working around some edge cases
  • The webhook input in the settings is no longer disabled to allow for direct copy/paste

Fixed

  • An install bug for some setups with unusual paths
  • support for upcoming EE2.9.0 changes
  • A case where api calls would fail on some setups
2014-05-02

1.7.2

Added

  • Added 'chargecustomercreated' hook, which fires after a customer record has been created on stripe
  • an optional 'required' paramater to the form tag to allow for extra custom validation options. Also works with the open ended meta fields. Super if you need to set extra fields to be required for payments.
  • a missing card style in the CP for JCB card types
  • how webhooks deal with trial period ends, so the final charge element now inherits the updated stripe object data

Fixed

  • an email parsing bug to catch some bad tag usages more gracefully
  • some legacy update queries for a better update process from older versions
  • a bug for some mysql strict setups
2014-04-11

1.7.1

Added

  • A messages block to the charge record, for returning non-fatal information to customers, along with a new variable pair in the :info tag to view that data
  • A variable to expose the card_fingerprint for transactions. Useful if you need to check to see if repeat payments are being paid across duplicate cards
  • Added a exp:charge:cards tag to list all the cards for a customer, direct from the Stripe api

Changed

  • Reworked how customers are created on plans with trials to allow for dynamic readjustments

Fixed

  • A flashdata bug on some nginx configurations that would return a bad gateway error after some validation cases
  • An error where we'd return a generic error message to exp:charge:error_info, when we had a valid error message to show
2014-02-07

1.6.0

Added

  • Added the exp:charge:updatecardform tag to let customers change their payment cards directly on the site.
  • Added a exp:charge:cards tag to list all the cards for a customer, direct from the Stripe api
  • New progress indicator option for the built in jquery library

Fixed

  • A bug in exp:charge:info so it'll now properly return no_results conditions if the passed transaction hash is invalid
2014-01-24

1.5.0

Added

  • Added a new exp:charge:act tag, to let users cancel their plans
  • {recurring}..{/recurring} and {subscriptions}..{/subscriptions} variable loops to the :customer tag. Great if you want to pair with the new exp:charge:act tag. You can now let user's self-service their recurring payments and cancel direct from the front-end.
  • Plans now support Trial periods. Simply add a parameter of 'plantrialdays' to the charge:form tag.
  • Export option in the CP
  • Option to prevent any metadata being passed to Stripe. Everything will still be recorded locally

Fixed

  • A bug when passing more than 10 metadata items would hit the Stripe api limit of 10 meta keys per item. In cases where 10 or more items are passed, we now only attempt to pass the first 10, but store all of the data locally
  • A bug where the log viewer would throw an error when there were no logged items
  • A bug where settings weren't being properly saved on MSM installs
2014-01-16

1.4.0

Added

  • Subscriptions enabled for all. Checkout what you can do with subscriptions.
  • Member Creation. You can now optionally create members during checkout by simply passing a create_member="yes" param on the :form tag
  • Added new tag exp:charge:customer for displaying information about all of a customer's transactions and subscriptions.
  • Added 'chargecreatemember' hook
  • Meta fields now are passed direct to the new Stripe meta data objects.

Fixed

  • A bug in meta field handling where very long meta data would be truncated.
  • An issue that would prevent some emails sending on some servers
  • A CP formatting issue
  • An issue where some webhook callbacks wouldn't be received properly
  • A bug where validation could fail but the error messages were suppressed
  • A bug where errors in an external class were not being suppressed and were disrupting validation
2014-01-02

1.3.0

Added

  • Added new hooks - chargeprepayment hook and chargepostpayment hooks. Add your own custom validation or specific payment data using the pre hook, or add your own extra record event handling or notifications using the post hook.
  • New config option chargeforcessl. Normally the https/http setting will automatically reflected based on the current path, but if it's not you can use this setting to force the paths to be https
  • Added a fallback for some server configs where http_refferer isn't always available

Fixed

  • A bug on some setups where the fallback currency wouldn't be correctly set
  • Minor CP view inconsistencies
2013-12-13

1.2.0

Added

  • exp:charge:api_call You can call any Stripe api endpoint. Great if you need to pull direct data about a payment or customer (ie. next due payment)
  • Extra currencies for all of Stripe's public and testing currencies. Currently covering : usd, gbp, eur, cad, aud, hkd, sek, dkk, pen, and jpy. Check Stripe to see what's supported for your account
  • Card expmonth and expyear are now recorded on transactions for use in the exp:charge:info tag

Changed

  • underscores in Action names are now allowed
  • Action shortnames now default to '_' instead of '-' in place of invalid characters
  • Charge log view now has a cleaner look, member info and icons and state makers
  • Charge now fallsback to 'usd' if no default currency is set in the settings and none passed as part of the payment form

Fixed

  • Some links in the demo templates and docs were pointing to development urls
  • Logged payments will now be recorded in test mode if there were no mode settings
2013-11-19

1.1.1

Added

  • an error that would wipe out site preferences on some installs
2013-11-19

1.1.0

Added

  • Added Actions - Actions can be used to update entries, trigger emails.
  • Added Subscriptions - Subscriptions are a simple way to manage member groups that are dependent on payments recurring and one-off.
  • Added webhook callbacks to receive data back from Stripe on about recurring transactions. To use, you'll need to setup the webhooks urls in your Stripe account.
  • All payments now have Stripe customer created for them. (Previously only created for recurring transactions). Customers for one-off payments will have their card automatically removed immediately after payment
  • Full card holder information now displays in the CP
  • Added new catches for some occasions where a bad currency was passed

Changed

  • Charge.js now has better error handling and error messages
  • More resilient logging and cleaner interface
  • Added extra variables to the exp:charge:info tag
  • Increased the pagination limit on charges in the CP
  • Meta field information now displays in the CP

Fixed

  • Minor formatting issues on data transfered to Stripe
  • More robust exception handling for Stripe api timeouts and general errors
  • More usage examples and demo templates