 So hi everyone and welcome to the digital commerce ecosystem. My name is Bon Jovanovic, and this is David Kitchen So And we don't have a picture for David. I'm sorry. You'll just have to take a really good look at him So I'm Bojan and I was the lead developer for a commerce kickstart v2 I've also worked on many contrib modules some of them like views use bulk operations in an entity form and Among others I've worked on commerce license and commerce license billing, which we will be seeing today Hi, I'm David kitchen. I'm the technically of commerce guys in the UK And I've worked on a range of our modules as well including commerce VAT commerce funds and more as the commerce checkout Ajax We work for a commerce guys We are the company behind Drupal commerce with about 60 people in offices in Paris, France London, England and Ann Arbor, Michigan We provide a wide range of services around Drupal commerce including consulting and support and since recently a new cloud hosting platform called platform dot sh So what is digital commerce? This really covers anything that's not a physical product something that's a service or a product that's delivered electronically So this could be downloads like e-books or some premium content that you're giving access to on your website Support services or some subscription to a product or service on your website This could be one time or recurring So we first had this use case while we were developing the commerce guys marketplace We had we had a wide range of partners such as PayPal and PayMail and hosted PCI and many others and The idea was to allow people to check out a product for a for example PayPal and then at the end of checkout provision the account for them and then show the credentials so that they can enter that in their payment module configuration And we quickly realized that the workflow is the same for each one. So we need some kind of an entity that shows The what we just created it needs to store the credentials and also each of the partners Sometimes had additional requirements for additional information to be gathered during checkout So you we would need to ask for example for the user's address or email or any kind of question We would store that and then when provisioning the account We would send that information once we got the credentials We would store all that on the entity. So that was our first use case As you can see it makes sense to have some kind of a bundle for each of the partners and to have Some kind of synchronization code for each of those partners But the concept is the same and then we started selling support tickets And the idea here is that you would go to our turbo tickets page and you would enter what's bothering you So you would provide a title and a body you would add the product to cart and when you checked out and paid us $99 we would create the tickets on our Zendesk system Save the ID and then show you the link so you can follow along as our support people help you go Through your problem. So once again, we gather information at the beginning at the end We provision something and we save the return information so we can show it to you later on in an email or in your user pages and then we started doing cloud hosting and that has a Similar flow if you want to have your own commerce platform You would start checkout check the zone where you would want the platform to be provisioned for instance Europe And then at the end of checkout we would create your commerce platform in the cloud and you would get a link So you can access that later on you are able to see all of your platforms that you have So a platform for each of your sites and at the end of each month We would charge you for that platform. So in this case, it's no longer a one-time thing We are actually going to charge you every month, of course, which is the recurring use case So the question is how do we track all of this in Drupal and Drupal commerce? And we need something that's going to be the resource that we're subscribing to or buying or selling to the user So what we needed was a new entity to provide this So we work from our line item that we create in our original checkout and as we add a product that's got to the Subscription or service to we create a license and this is the entity storing all of our information And this refers to the original products that was added to the cart and the user that has access to the license The license then has all of the field information So we can add fields just a fieldable entity to refer to the product that's been Sold on the third-party service or what access level they've got what their API key is or any port of information for their license So here comes an interesting detail We use a module called entity bundle plugin which we developed for a client named Cartier back in the day And what it allows us to do is to have a different entity class for each entity bundle So let's take nodes as an example You would you have multiple node types for example a blog post and a page in this case a Blog would be an instance of one class But the page would be an instance of another class This is great because it allows both of them to implement the same interface and To have the same methods, but of course different code in those methods So you can see how that's useful in the commerce example because if we ask for the access details meaning Tell the user how to access the thing that he just bought A file license type can provide the link to the file So for example the link to the e-book that was just purchased But the platform license type can provide a link to the platform that was just provisions to him And this also allows us to have an easy way to create fields that are specific to those bundles to those license types We have Fields function that's returned just the field definitions and entity bundle plugin make sure to create and maintain those fields It's called entity bundle plugin because we use see tools plugins to discover those classes And it's a pretty common way of doing this kind of a thing in triple seven and Now you know what we've built we've built commerce license commerce license is that framework for selling access to a local or a Remote resource that's represented by a product and it provides the license entity type Which can have multiple bundles depending on what you're selling and there's the API for activating a license expiring or revoking it and Everything around is that needs to happen in the checkout flow and afterwards a License can be time limited. So when I create the product for what I'm selling I can say that it's valid for only a specific amount of days or only one month So if I sold you an e-book the access can be revoked after a month or whenever and that is automatically expired by cron, of course a License can be configurable which means that it has some fields that the user must Enter before checkout is complete and we provide two ways to do that either you will Install in line entity form and get those fields on the add to cart form You can see the turbo ticket example where we ask for the title and the phone number and the description on the add to cart form What you're doing here is actually editing the license which has been created at that moment or we provide Checkout paint that does the same thing in the middle of checkout. So it's your choice And this allows us to gather the information that we need So I will ask for the ticket information or I will ask for the platform location and anything else that business dictates and A license can be Synchronizable which means that as the end of checkout it needs to provision an account or contact a remote service So once I finish checkout The synchronization is queued. It's added to a queue and we have a trash worker that processes the licenses one by one Calling the synchronized method on the license So at that point the license contacts the remote service creates the account and then stores the returns credentials or IDs To be able to show it to the user now At checkout complete we have this special checkout pane that keeps refreshing the license until the queue gets processed So the user sees loading screen saying we are provisioning your product and As soon as that's complete that is replaced with the actual credentials So the user can see click here to access your platform or we've created your support ticket Go here to see it or anything else that needs to happen And we also support automatically retry functionality So if by any chance the the remote service is temporarily unavailable We will tell the user that provisioning will happen later And that he will be contacted and we will continue to retry in the background and this is all done completely for you So we have three example modules built in that you can use for different License use cases in Drupal the first is commerce license role This use case would be the premium membership where you're giving access to a role and then Configuring that role around different levels of access using something like node access or role level access field access already existing in Drupal as You create a product you can associate this with a particular role and whether the access is limited or Unlimited for length periods and how it renews We also have commerce file This is For the download case, so you're providing access to files. This could be ebooks music videos The products again created has a file field. You can upload multiple files. So that's product Files can be updated after the customer's purchase the product and they'll get access to those new files as they go online Through the checkout process as they come to the end of the checkout in that license information They get their products to download straight away or they can come back to their file download page on their my account and The detail that I really like is that the checkout Confirmation thing works even if you're in anonymous checkout So even if I'm not logged in when I complete checkout I will be able to download the files that I've seen and of course the Downloads can be limited in case we want to preserve bandwidth So if we're providing a streaming service, we can do this with the display formatter using something like media Js to format the music file into something that you can play Or you can also use the next one Full integration with Amazon s3 for storing the files off-site So if you've got very large files and you want to keep those off your server you can store them here and Reference them and the downloads is provided through a one-use one-time link Which is going to preserve our downloads limits as well So that allows you to track and restrict access making sure that only those with the license to access file actually can get to it Our final use case is commerce licensed node This is for giving permission to create content So this example use case might be a classified ads website where you want to license the permission to create a single or Nodes that is the advert and give that a limited life or charge in a regular basis for how long the user wants to keep that advert active So we've seen how we can use commerce license to implement many kinds of e-commerce use cases So we are able to implement premium membership or we can implement Downloads sites or we can implement a classified site and so far We've assumed that this is a one-time purchase the user pays and he gets his access and Possibly once that access is done. He can pay again to get some more But of course we want to keep getting the money out of the user So we want to have recurring billing and we want to be able to charge the user for those licenses Every once in a while. So how does recurring work in Drupal in general? Well to start with you need to have payment module that implements card on file support And commerce card on file is a module that provides an API for the tokenization services that the payment gateways offer so many payment gateways like stripe like brain tree like Paymail authorize dot net Allow to store the card. So once you pay on their servers, they will store your card And they will send us a token that represents that card And then we can use that token to make further purchases instead of asking you for your card Of course, it also sends additional identifying information. So that is safe to store We get the last four digits of the cards We get the card holders name and expiration and we can show this information so that the customer is able to identify the cards that is being used and Research shows that more than 50% of e-commerce sites globally use a feature like this Because it makes check out much faster and therefore much more likely to complete The user doesn't need to re-enter his card. You can just click and go ahead So card on file provides an entity type that stores that safe information as well as an API that can be used To charge a cart and it knows how to distinguish between a heart and a soft decline So a soft decline is when you've reached the daily limit on your card Meaning that we should probably be able to retry soon But the hard decline means that your card is effectively dead either revoked or expired and cannot be used at all for further purchases and You do know that many of the payment solutions actually offer some kind of a recurring API and our goal is to avoid it at all costs because they are The the features that they offer are spotty and they can often not offer metered billing and all of those advanced use cases so by avoiding that API by just using the tokenization every decision is on us and Our code does all the work Allowing you to offer allowing us to offer you a consistent experience and a consistent user set and Feature set across all of the options that we have so tomorrow you can change from authorized that Authorized out next to pay mill and we will still offer the same features, which is really convenient So unfortunately all of my images that I've added aren't gonna work Can you switch to it locally rather than from yeah, let's not do it otherwise all of the images are gonna work So what we want to talk about is physical subscriptions First so this use case would be the example of someone ordering something that they're gonna get delivered regularly to them You buy it the first time and check out you pay and it gets shipped to you And then you've picked to get that delivered to you every month every month after that on the same date You're gonna get the item is recurred you're gonna get billed for it, and then it's gonna get shipped to you in this case example we're talking about prepay billing that is where the payment is taken before the service is provided and The important use case here is also a synchronous Subscriptions that is that the subscription takes place on the same day of every month based on the user's choice of when they subscribe And this is where Commerce recurring was developed. So commerce recurring is a UK Development, it's ideal for the physical subscription producing new orders every month in an asynchronous process But when you look at the digital subscriptions, you will realize that it's quite different So take a look for example at your mobile subscription your mobile plan So the first thing that we notice is that we have a concept of a plan we have two plans or Possibly more and we are able to switch from them when desired Also, there is metered billing which means that I have some kind of usage That is given to me in my plan and if I use more than that I'm charged some kind of a fee per unit So if I got a thousand messages to send in my plan, but I sense 2000 then the other thousand will be charged using what is called the overage fee So we have plans and we have usage Additionally, no matter when I subscribe I'm always charged on the first of the month and this is called the synchronous billing cycle because no matter when you subscribe We will always bill you on the same day and this is something that Digital subscriptions usually follow Additionally, if you subscribed In the middle of the previous month, for example That means that you've had the service only for half of the month You will only pay half of the plan price and this is called prorating You also notice that we are not paying for next month. We are paying for the previous month and this is called post billing post payment and This is important whenever you have any kind of metered billing, of course because if you're doing Pre-payment, then you wouldn't you won't be able to know how much the user will actually Spend and owe you and when you look at any kind of a SAS product, you will see that they follow the exact same models They have multiple plans. They always have some kind of Usage that is included in those plans and you are able to switch the plans as needed you are billed on the first of the month for the previous month and you can cancel at any time and When we looked at commerce recurring, it was pretty clear that it was optimized for physical recurring and that it could not be used for this case because it is the exact exact opposite So it's synchronous instead of a synchronous. It's Posts paid instead of prepaid and so on and this is why we developed commerce license billing and commerce license billing is Our answer to this problem. It specifically deals only with charging for the licenses You have some kind of a billing cycle at the end of that billing cycle We get all of your active licenses for your premium membership or your Platform account and we charge for that we calculate the usage and the cost of that we charge for that as well And our goal is to support any kind of a payment plan So no matter what your CFO tells you it should be possible to click a few checkboxes and radio buttons and have the module Do the rest handle all of the hard parts in a way that's easy to use and completely covered by tests So the first important feature that we have of course is plans a plan is just a product So you can easily track which plans are being used at the moment You will remember that each license References the current product which means it references its current plan and we can change the product of the license Therefore changing the plan Prorating works in this case. So if in the middle of the month, I switch from a $60 products To a $80 product or a $80 plan Then I will pay half of the first one the $30 and I will pay half of the second one the $40 and If I want to as an admin I can configure to postpone the license changes So this is usually how your mobile plans work if you require if you request a change of a plan or even a Cancellation that will only happen at the end of the billing cycle. Therefore avoiding the prorating we also support metered billing and By default we support two different kinds of metered billing and those are counters and gauges a counter is Always charged in total. So a good example of that is Bandwidth for example, so as you continue to use a subscription You keep using up a bandwidth or sending emails and as the end of the month all of your usage is told The free usage is deducted and the rest is priced you get One light an item for the usage for and for the resources that you consumed Now the second variant is a gauge and a gauge tracks the Distinct values over time. So let's imagine that you had in a hosting company Development environments or servers So if I used to have and use to development environments and then I switched to having three Development environments the system cannot just charge me for five. That would be kind of awkward Instead we would prorate the price for the two environments Depending on how long it was used and then we would prorate the price of the three environments And I would always get a line item for each of those I would get a line item saying you used two environments from this date to this date and a line item saying you use three environments from these days to this date and If I used the free quantity for a while So for example, let's say that's two environments were included in my plan then of course that's not priced and that line item is not added and The good news is that these two are provided by plugins. So you can easily Provide your own plugin that Overrides one of these or does something completely new and the plugin is the one that controls both the counting and the pricing So if you need any kind of custom pricing logic that is very easy to implement and plug plug into the system Of course, we support both pre payment and post payment and In the case of post payment, of course the flow is that the first checkout is free Why because you will pay at the end of the month So you went through checkout you just inputted your credit card so we can charge you later and you completed This is at this point the better payment gateways will usually do a zero authorization meaning that no amount was actually authorized and The less good ones will do a $1 authorization for example now the UX here is important I am checking out and I'm giving my credit card and I have no idea how much I will be charged at the end So this is why we support What's on the screen? It's it's an estimation feature which looks just like a card And it says if you had Normal usage with the plan that you selected. This is how much you would pay at the end of the month therefore reassuring me and We use pricing rules for everything So a pricing rule will set the price of the products to zero if it's postpaid if it's pre-paid then it will Prorate it so the user will actually see how much he is paying and so on and Postpaid is actually our default use case since it's the most common for these Sass use cases Now we support Different kinds of billing cycles We already defined what the synchronous and an asynchronous billing cycle is again The billing cycles are pluggable and the plugin will generate them We have a default one where you can configure your period so you can say that you have One hour billing cycle great for testing or one day one week one month Half a year a year that's up to you and you can select whether it's a synchronous Meaning that it always lasts the same number of days or it's synchronous meaning that the user is always built on The same day and the great thing about it being pluggable is that you can always plug your own So I saw this cute tweet a few months ago that says How great it is that a certain internet internet service provider had this lunar option where the customer is charged each full moon And if you want to implement this you will just register a new plugin and in 10 lines of code This will be possible so you too can be cute We also have a really nice billing dashboard powered by views mega row and if you ever use kickstart You will you probably saw this pattern. You can see a row and click a link That says analyze or view or whatever and then the row will expand and below it you will get information that's easy to scan and In this case for each of your recurring orders You can see which billing cycle it uses when it started when it ends You can see all of the active licenses that are in that recurring order being charged for you can see when they were Activated for example, you can see if one platform was created six months ago But another one was activated three months ago and you can see the plan history showing all of the plans that the user used and for how long and You can see the actual usage how much is the current usage and whether the order can actually be closed Because we have this really nice feature where we won't close the previous billing cycle until we know the usage Because it's common for you to do billing for an external application and it needs to calculate the usage and post back to your Drupal install And in that case we will and let's say that it is the second of March So we will open the billing cycle for for March while waiting for February to be computed and charged Of course people often ask How they can do discounts? It's common to say the first month is free or you got 10% offer the first two months and We have this easy ability to discount any number of billing cycles The trick is in the fact that we just use normal price calculation for the recurring order that we create and charge So all of your pricing rules still run and you can see in plain English But with tokens how such a rule would look like so let's say that if I have a recurring line item That's being calculated and the number of renewals on the license is zero meaning that this is our first billing cycle We'll just add a 100% discount and make that first billing cycle free and That way you can still use all of your normal discount rules and discuss tools that you're used to and Don't need to do anything special So what happens? during the recurring process and the Users car user can't pay so Their cards is declined We've developed a module called commerce stunning and this handles this process A card can have or payment can come up with two types of decline and the way that you handle those can Change depending on that decline a hard decline for those cars that have been canceled or closed The card has expired or a soft decline where the user doesn't have the money to pay in their account It's come back to say this card is so valid, but it just doesn't have the money We start off a process where we're gonna Inform the user that they can't pay and then schedule new Retries to take their card payments giving the user the opportunity to update their card details through card and file So at this future actions, we hopefully we're going to be able to take the payment if we don't Through the schedule that might be five seven and then ten days and after this they still haven't paid We can then kick off the process using rules to cancel their subscription close their account and Stop their access to the service This is Really important For the the post-pay service where you're relying on the card and file working and another part within the Dunning management is also Pre-notifications, so if a card is about to expire you can notify the user to make sure that they update it before This gets to this point and hopefully you're using the message module to handle all of your emails because it allows you to define your Email templates separately from rules and then easily see which emails were sent and what they contained So this commerce dining has a sub module that defines all of the message types for every single kind of an email that we're sending Allowing you to easily customize them and later on see the dining notifications that were sent out so commerce funds is a useful module for working with the Situations where you need to provide credit or have credit for the user So this could be the use cases of the cancelled or closed accounts where they want to Close their service partway through a period and we need to give them credit for the store to spend on some other service Or where you want to use a prepay service or voucher So you're going to give your customers a voucher for fifty dollars worth of credit They can come along to the store deposit that into their credit Open their accounts and for their first billing period they can start using that credit and then start paying after that with their payment card details Commerce funds allows you to specify the funds account for the users in multiple currencies So they can hold it in multiple currencies as well as The default store currency So this is great if your service just launched and it's still kind of unstable So the service crashes and you tell the user we are really sorry here's $20 credit off your next order Finally relevant to all of this digital comments We want to talk about taxes and digital goods and services if you are looking at digital goods and services before They can be sold anywhere you've got a worldwide range of customers Previously when we were talking about just physical goods when you ship these out as UK customer if I buy something from America I get a big sticker on it saying you need to pay customs this much before you can get it but with digital goods lots of countries are now starting to take action against this and Implementing their own import duties effectively when you sell electronic services into customers in those countries So far there are 32 countries that have either already implemented or are implementing this process The most biggest being the whole of the EU which starts next year to work with this and general requirements for tax we've developed a commerce VAT module and This takes the tax calculation into a two-step process Firstly deciding the place of supply This is the country that the customer is in based on all of these tax laws to decide where they are and then a second stage Decide what rate they need to pay based on the type of product This is to develop through an API that allows easy definition of the country and that country can regularly be more than just a country or just parts of a country and What rates are available? Already supplied are the European Union and a number of other countries, but There's also opportunities for people to contribute One's particularly Canada is one that is needed as that say and VAT using country Okay, so we should be able to move to questions Do we have any? Yeah, sure really interesting by the way really impressive what you've done So I think of a couple questions, but the central one is this it's the use case where the The user's right to use the resource is controlled from you know outside your website or Drupal site or whatever And so I'm interested in how you can handle that and that that also sort of thinks of devise into two cases ones where the The external service that's going to determine whether the users allowed to continue using Service or not is connected. So a web service approach as possible the other cases where it's disconnected And you have to do something like an expiration date Whatever, can you just talk about how you would implement those things? Yeah, so it's all one it all depends on who the primary source of truth is if it's the Drupal site Then the flow always starts from Drupal and the license and then we trigger the synchronization process to do what's needed But if it's actually the external application then that application will contact the Drupal site through the API and then Modify the license in any way needed So it will register usage or expire a license or set an expiration date for the system to handle that automatically or whatever else is needed so basically you will you would provide an API for services and We still don't have one publicly, but we are prepared. We are preparing ourselves to share that and then that just works Yeah The originals of payment time an expiration date Yeah, so all of that is possible through the API that you would expose You probably using services and we can discuss smaller details after the talk So we've been building a couple sites using the recurly service And I'm really excited to see that we can actually rebuild them completely natively in Drupal commerce, which is which is fantastic. Thank you But one thing that I have a question about is prorating Upgrades so if we have a set of subscription services at different levels Can we handle the proration of accounts if they decide to upgrade in the midst of yes? That is done automatically for you You will either allow upgrades to happen automatically if you configure it that way in that case prorating must always happen Or you will specify that the upgrade will happen at the end of the cycle therefore avoiding the prorating and I really think that we have something great compared to recurly here because Especially if you're using metered billing recurly requires you to do all of the calculations yourself The only thing you can do is tell recurly this is my line item and it's this much for usage But in our case we actually track and calculate the usage for you So you you can do one API call and we will do all the rest for you So the integration is actually significantly simpler and just sort of the same question, but have you Figured out how to handle the use case of downgrades. Is it is it a similar thing where you could use commerce funds to Take back. Yeah. Yeah, so in case you're doing post-paid then you don't even need credits that prorating will just happen and In case you're using prepaid then yes, you can just award the user Funds using commerce funds or once again, you can postpone that change to the next cycle. Thank you First of all, thanks. Thanks for such a great framework. It's awesome I've got a question around commerce card on file and just security implications around that Are there any extra considerations you need in terms of PCI compliance when using tokens, yeah, so I Whenever I answer a PCI question. I first mentioned Drupal PCI compliance reports I hope you've all read it and if not, please do so as soon as possible So according to the PCI standards We are safe to store the four digits of the card and the card holder name and expiration without any kind of encryption that is allowed and then What remains are the usual PCI considerations of the different payment gateways and as you know Depending on your choice of the payment gateway, you will fall into different categories of the PCI compliance standards So for example, authorized does net actually sends the credit card numbers for your own server which puts you into C but Stripe and pay mail and brain tree communicate directly with the other server Putting you into PCI compliance category a which is significantly simpler I apologize if I missed it. What about Doing a partial refund for a user say you purchased something and you know like a 30-day subscription And they want to refund halfway through. Can you reverse a charge or partially reverse a charge? Or is that only supported? Yeah, right now we have no ability to actually issue an actual refund we can either avoid doing anything or provide store credit and refund actual refunds are a future step probably by integrating with the commerce RMA module, which is the one that does the return of right authorizations It would be Possible depending on the payment gateway some offer some payment gateways offer partial refunds on the initial transaction But it would be a manual process Like you're going to PayPal or going to authorize that net and doing it from there So for example with authorized on net you can do that in Drupal You can refit do a partial refund on a transaction from the original transaction But it would be a manual process of going in saying how much to refund from that original is that on the payments tab Can you do it directly from the payments tab of the order? Yeah, you go into the payment section of the order Yeah, right awesome, and now sorry one other question I Saw you you have the the products which were the licenses, you know It's set terms that you create is it possible to have a dynamic product that you manually enter Start and stop date. I guess what I'm thinking of is not the user checking out, but somebody Taking a manual purchase. Maybe they did it offline Maybe they did with cash or check and then a user would manually enter that for a specified time Is that yes? So technically it should be possible for you to manually create an order and the line item and and Just complete that process, but as far as I know there are still a few bugs remaining there is an issue in the queue about one of them and Before we release our C1. I will make sure that that works without problems. So yeah, that's definitely something We want to support any in its entirely. Thank you. I actually have a follow-up question on the PCI A question over there So if I change payment gateways Does that mean that my users have to enter payment information? Yes So the way card and file works is that it all it's always tied to one payment gateway Because the tokens cannot be transferred some payment gateway support some kind of an import expert But it's really really specific to them and not all of them do it So we need to tie ourselves to only one. It's payment gateways don't want you to move So they make it as hard as possible Yeah, but recurly is PCI level one compliant which costs more than a hundred thousand dollars If you give us that money, we'll add the future Second question about so you can you're turning hard decline or soft decline But that's essentially at the processing level. Do you guys have any type of risk management before he gets there? So like if it's somebody who continues to rent a fragile information. Yeah, no So that would be a great feature, but right now we don't it's it's something that you could all potentially build through rules So if they're repeating if their transactions repeat to fail from the payment gateway Depending on your payment gateway depends on what feedback you get for their initial transaction So with some payment gateways you get levels of risk against the card the address and how much they're paying So you can pull all that information into your rules or flag your orders or your users based on how many failed transactions They've had but it's that's all going to depend on the the business process that you want to implement to monitor that if you're only dealing with a 399 a dollar a month subscription or a 399 dollar a month subscription your choice of how you manage that might be different So one more question about taxation of digital goods in the United States As you probably know, this is a mess Very state-by-state and by particulars of the digital good and changes all the time and interacts with nexus Any plans anybody working on dealing with this problem? Could you make a deal with Avallero or somebody like that? So we have I'd suggest using a third-party service that's gonna do this for you It's the US sales taxes is actually much more complicated than for deciding what rate to charge than the European VAT is we have to exacter and Avertax in our marketplace Earlier you had mentioned that Authorized on that was a PCI level C You gave a list of level a's and I couldn't write down fast enough all the yeah So if you open Drupal PCI compliance talk in the report you have all of the levels what that means And you have how all of the big payment gateways source basically and where they belong and the author is Actually updating that for the new standard that will be valued from 2015 as well So it's really a great resource to follow the general advice is always do see if you can because that's keeping it safe But you should be able to target a With certain payment providers therefore lowering the amount of work that you need to do A lot of great modules. Thanks by the way Was wondering about the Release status on the four or five that you talked about are they in dev or they're stable Are there ones that you recommend that we don't use in production yet or where where they at? Yeah, so commerce license has had a stable release for more than six months now Maybe even maybe even more it has had multiple stable releases. It's completely stable Commerce license building has a beta 2 currently and I will be tagging a release candidate in the next two weeks We are running it in production as are several other people and it has complete test coverage Which makes it a bit safer? Of course our use case is postpaid I've noticed there are still some smaller issues with prepaid billing Which we are working to fix in the next week before the RC one is tagged So you should be good on that front Carden file recently saw major work. I tagged the beta but Also very soon we will have an actual final release I can say that right now It's in really good shape and the only reason why it's still in beta is because it's missing a few features that I would Like to see especially around the UI Commerce funds is still in in beta as well or there is dev. Yeah That's still got some There's been a process of moving that over from To an entity based system and there's still some work to do on things like escrow payments That say you can also use funds for if you're building a marketplace or that type of environment the Commerce the license role is within commerce license. Yeah, so that's released and commerce license node is still in dev as well Yeah, commerce file doesn't have a final release yet It's in beta because we don't have an upgrades path for one dot tax But judging by the lack of interest and contributors in that regard. I'm just going to go ahead and tag a stable release Okay, any other questions Yeah Right Yeah, I really don't know this is the digital talk so we Yeah, we would need to ask someone so please come by our stand the commerce guy stand and we will see what we can find We do have some but I can't remember what they are off stuff my head here as well Yeah, so some of them are built in some are not but we are trying to see which ones we are still missing so whatever you find That's missing open an issue and we'll add that one as well or even better create the rule Yeah, I Can talk about fulfillment options afterwards if you're interested sit right in front of you I was just going to say that I wrote the uber card recurring module once upon a time and Ended up having to support a variety of customers who were retaining plain text credit card information in their database And of course weren't actually having Recurring charges be processed at all and this represents like a tremendous improvement of what we've ever had in The Drupal world before so I just wanted to say bravo like this is really really solid stuff. So thanks for showing us Thank you So as I said, we are at the commerce guys booth all day every day If you have any follow-up questions or just want to chat drop by and we'll see you And don't forget to review the session Right. Okay. So yeah, this is the commerce village and please provide feedback so we can improve and feel good about what we've done Thank you