PHP Stripe API: one time purchase plus subscription with 3D secure - php

Hello and nice day to everyone!
We are currently building stripe integration (PHP), but are facing problems regarding the valid approach.
The case is, that our e-commerce has business model, where you are buying some physical good (usually one item per purchase) and the you pick type of support plan for that item (subscription with trial).
Practically, it shall go like:
you pay one-time purchase
you subscribe to support plan with certain trial (30 days)
after 30 days you got charged
So in the same time you pay for the product and sign for subscription with trial period.
It shall be 3D secure protected, so our customers wont be bothered with authentication when trial ends.
Sadly, we didnt figured it out yet :(
What kind of approach shall we use? Thanks for any answer and your time

I think you need to specify a trial period(one month) when you set up the plan in stripe, then the money will be deducted automatically at that time.

Related

PayPal recurring payment "add-ons"

Requirement:
We want to have a base subscription which is X/month, done via recurring payments, and give clients the ability to choose extra "add-ons" as they please. An "add-on" will be Y/Month and should last the remainder of the base subscription. For example, the base subscription is 10/month and feature X is extra 5/month and feature Y is an extra 7/month. I choose to have the base subscription with feature X and Y so my total monthly payment for a year will be 22/month. Now, if I chose only the base subscription for the first 6 months and want to start using feature X for the final 6 months of my subscription, the final 6 months should be 15/month opposed to the previous 10/month. In further terms, add-on features subscription should last the duration of the base subscription.
Is there a simple way to do this via the PayPal API?
Actual recurring payments profiles (setup with Standard or Express Checkout) have a limit on how much you can raise the amount of a profile. You can only raise it by 20% every 180 days. If you create a recurring payments profile with Payments Pro, though, then there is no such limit and you can change the amount at any time to whatever you need. I wouldn't recommend going without EC, though, as lots of people prefer to pay with PayPal.
What you could do, though, instead of using the recurring payments APIs would be to use billing agreements / reference transactions. This way you'd save the billing agreement / auth ID in your database and then you can use the DoReferenceTransaction API to process any variable amount you need to at any time.
So in that case you would basically be building your own recurring payments system where you'll save the "next payment date" in your database, and then you'll have an automated script run each day to process all of the payments that are due that day via a reference transaction.
Reference transactions work with Payments Pro, too, so if you're using that everything would still work the same.
Since you're working with PHP I'd recommend taking a look at my class library for PayPal. It will make all of these API calls very simple for you.

Authorize.net - ARB - enabling/disabling subscription

So I am dealing with Authorize.net's ARB, and I have a situation where the user is applying for usage of our service for eg. 3 months. We charge the user for this period - 3 months, but we don't make a subscription immediately. The thing is, we don't want to automatically charge them again once the membership expires after 3 months, but only if they go to account settings and set that option (extend membership automatically). So if they don't select it, there is no need to establish a subscription, so that's why we aren't doing it in starting point, once the user applies for this service.
So the question is, should I create a new subscription once user selects "Yes" for that option, and delete the subscription when he selects "No" ?
Is there another way to do it?
It's really hard to find some answers by Google, and I was hoping someone with more experience will have an answer here.
Thanks in advance.
When the user selects "Yes" for the new subscription just create a new ARB subscription with a start date of three months past their three month trial period. The three month subscription will run its normal course and terminate after three months. Then the new subscription will start at that point.
But here's the catch with that solution: you need the customer's credit card information in order to recreate another subscription. Unless you store it somewhere (bad idea) you can do that. So you would need to ask for it again. That's a large hurdle to overcome and will negatively affect conversion rates.
Alternatively you can automatically create the three month subscription at the point where the user starts their three month trial. As they approach the end of the three month trial you should make them aware there subscription will automatically start unless they cancel it. This solves the creation of the subscription problem but isn't very popular with users as nobody likes being automatically enrolled in a subscription.
Third option is to use Authorize.Net's CIM API to create a payment account for that user. Then you can charge against their card whenever you want. The problem with that is CIM does not support subscriptions. So you'd have to write your own subscription engine to make this work.
So there is no ideal solution for this. You just need to pick the one that you think works best for you.

Change the amount paid per month of paypal recurring payment account

The situation is like this,
I have three kind of user registration on my site
$20/month
$30/month
$40/month
now, suppose a user registers with $30 amount and takes the 2nd registration...
next 2 months his $30 per month were deducted as per the recurring payment of paypal...working fine .:)
Now, he wants to upgrade to $40 i.e 3rd membership , so from next month his amount deduction should be $40... How to update paypal for this change in amount..
I DON'T WANT TO GO TO PAYPAL'S SITE FOR THIS...
Is there any API for this purpose.......
Any help would be appreciated....
First off, Paypal's API is not a simple or easy thing to use, but what you're asking can be done. It is simply a matter of canceling the existing 'recurring payment profile' via the API, and starting another recurring payment that ends at the same time.
The API methods themselves change depending on which system you are using. At my company, we use Paypal Website Payments Pro. This has a specific set of functions to perform actions. Without knowing which system you use, however, we can't give any further advice.
The below link shows a number of the methods for the different Paypal API's. Do your research, and try to ask specific questions. :)
https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/howto_api_reference
Daniel Moniz
I was able to do this, but first, this caveat from PayPal should be noted:
Note: For recurring payments with Express Checkout, the payment amount can be increased by no more than 20% every 180 days (starting when the profile is created).
Since I'm not using Express Checkout, POSTing this worked for me to change an amount from $75 to $200 (the credentials are fake):
TRXTYPE=R&TENDER=C&PARTNER=PayPal&VENDOR=Acme&USER=Acme&PWD=a1b2c3d4
&ACTION=M&AMT=200.00&ORIGPROFILEID=RP0000001234
The other caveat is that this is only one of I-don't-know-how-many APIs and I-don't-know-how-many-types-of-accounts (in this case Payflow) that PayPal has, and I don't know if something similar works for all of them. The above code is actually copied almost verbatim (credentials and amount changed) from https://developer.paypal.com/docs/classic/payflow/recurring-billing/.

Authorize.net ARB Questions

I am working on an application that provides a 30 day trial, then the option to have a monthly or yearly subscription (at two different prices).
I've used a lot of the info provided by John Conde on his site (thanks John), but want to be sure I've got the right idea about how all this works - my first time doing anything with Authorize.net or subscriptions...
So if I have a 30 day trial, and someone decides they want to pay today, they should not be billed for 60 days. I set the start date ahead 60 days, but should I see any kind of charge in Authorize.net showing it's pending?
Next, is part of the ARB service that it "watches" for the renewal, or am I supposed to do something to trigger the check on a regular basis. I'm pretty sure that's what ARB is, and I don't need cron to check each day, but I'd rather ask a dumb question now rather than have a bunch of missing charges later.
Finally, what information would you recommend I store in my local DB and what should I let the ARB service capture. Currently, I'm storing what the subscription item is, who the person who is making payment is (by id), the name on the card, the last four digits of the card in case they want to reference what was used, the expiration date of the card, so I can look for pending expirations (unless this is part of ARB as well) and the date the subscription starts, ends.
Any additional info is appreciated.
So if I have a 30 day trial, and
someone decides they want to pay
today, they should not be billed for
60 days. I set the start date ahead 60
days, but should I see any kind of
charge in Authorize.net showing it's
pending?
Use the AIM API to charge their initial payment and then set the start date in ARB to be in 60 days (when their first payment is). You won't get any notice that the subscription is "pending" but if a subscription ID is returned to you by the ARB API then it's safe to assume that first payment will be attempted in 60 days.
Next, is part of the ARB service that
it "watches" for the renewal, or am I
supposed to do something to trigger
the check on a regular basis. I'm
pretty sure that's what ARB is, and I
don't need cron to check each day, but
I'd rather ask a dumb question now
rather than have a bunch of missing
charges later.
You don't have to do anything. The "A" in ARB stands for Automated and it is completely automated. Once a payment is scheduled it will run automatically until the subscription ends, you cancel the subscription, or their card expires and you don't update it before the next scheduled bill date.
Finally, what information would you
recommend I store in my local DB and
what should I let the ARB service
capture. Currently, I'm storing what
the subscription item is, who the
person who is making payment is (by
id), the name on the card, the last
four digits of the card in case they
want to reference what was used, the
expiration date of the card, so I can
look for pending expirations (unless
this is part of ARB as well) and the
date the subscription starts, ends.
Send as much information to the ARB API as you can. It makes researching transactions in the Authnet control panel much easier as you can compare what you have captured to what they show in their transaction history.
It sounds like you're storing information that will be useful to you. I'd encrypt anything credit card related as to make it less useful if your DB gets hacked. You store enough information that a hacker could use it to convince your customers that they have their credit card number and then things get really ugly.
Well, in general you should avoid storing CC info (for security reason), so keeping everything at ARB would be better.
You should schedule the payments right when the user registers and set the startDate in the SOAP-call to 60 days later. Store the transaction key or however they call, so you can cancel the subscription at ARB anytime. If you do it that way, you can avoid handling payments at all and you just need to handle subscription and unsubscription.

Modify Subscriptions using PayPal vs Amazon FPS

I have been looking at setting up web applications that rely heavily on the ability for users to frequently and substantially modify subscriptions. I may be using marketplace features as well, and I need a system that supports both seamlessly.
I have seen multiple horror stories about the complexity of modifying subscriptions, including double billing, or cutting users off at the wrong time.
I sincerely hope, for instance, that this article http://talklikeaduck.denhaven2.com/2007/09/02/how-to-cure-the-paypal-subscription-blues
is out of date. The use cases that I have in mind are even more complex than the ones that he mentioned. For a sampling of what I would like to do:
Support multiple subscriptions and
subscription types/levels. For
instance one user might have 1 Plan A
billed monthly at $10 and 10 plan C
billed at $50 per month and 1 Plan D
billed at $100 per year.
Support changing of arbitrary payment amounts. For instance, user was on the $40 per month plan, but then changes that to a $100 per month plan. Then cancels, then signs up again at $50 per month before the $100 period was up. The user should still get $100 of service for the month that he paid $100 for, and then should change to the $40 per month plan.
Allow for payments of subscription amounts between my users. So one user might initiate a payment of 50% of whatever amount he has paid into the system so far. My application will be handling these types of marketplace style operations and these payments should work in the context of subscriptions...
It does not appear that there is an Open Source PHP library that does what I need either with Amazon or Paypal. So I am looking forward to coding this myself. (be glad to be proved wrong here, perhaps a Freemium for PHP?). I cannot use the various subscription services that are available. Because they generally do not support the features above, and because I need to have direct access to the PayPal or Amazon FPS API for later cleverness via marketplace issues.
Which brings me to my question. Which payment platform should I choose for ease of managing subscriptions? Please send me in the right direction, I only have so much time. But I also do not have time to make the wrong decision. Please provide evidence for your preferences, and if possible detail your work comparing the two systems. Google has the only other payment platform and currently their subscription system is in beta.. If you propose some other better system, please provider tons of good reasons, because I need a popular payment engine that people will feel comfortable with!
-FT
I see you asked this question back in December... if you haven't found an answer yet, I have some suggestions based on my experience with a business problem almost identical to yours.
Which PayPal API are you thinking of using? In using the PayFlow XML API, I found it was thousands of times easier to just roll my own subscription service. If the API you're using supports creating 'reference transactions' based on the previous successful transaction ID, you may save yourself a headache by keeping track of users' subscription amounts, keeping track of what's been paid, and creating a billing script that runs on a daily cronjob, checking each user to see if they need to pay (and how much), and then creating a reference sale for each of them.
Of course, don't forget that you have to explicitly ask for users' permission before you start billing them on a recurring basis, and there should be a good recurring billing and privacy policy. One trouble with this setup is that you pretty much need to create your own scripts to manage people's subscriptions and payments -- fortunately, I was tacking PayPal recurring billing onto a web app that already had subscriptions and accounting built-in.
Let me know if you need any suggestions on how to go about this!

Categories