I am trying to activate my GCP account by verifying the payment method but getting error. While 1 Rs. is getting debited from the bank account but failing to complete the process and verifying the account. Below is the attached screenshot of the error. I read somewhere "the Indian Government's payment policy is having 3 step validation and that can be the reason behind it."
Click here to view Screen Shot of Error
The error occurs because the card you're trying to use as a payment method doesn't support automatic recurring payments, which is required:
When you enter a debit card as your form of payment, Google checks
whether your issuing bank approves subscriptions or recurring payments
using that card. If your bank does not approve, this card will not
work for automatic recurring payments.
If you receive an error such as Your card does not support automatic
recurring payments or General decline of the card, please select a
different form of payment.
Related
We have been trying to integrate authorize.net payment gateway in one of our clients project based on Asp.net web API. We have few queries that we came across while implementing Recurring Planning scenarios.
Query 1
We checked the API’s for Creating Subscription, Getting Subscription, Updating Subscription. However once we have created subscription, is there any way we can update the amount in the subscription.
Let’s say for example.
We have a created a subscription for our user for 50$ amount on 01st Jan 2021 with 30 days interval.
And on 15th Jan 2021, our user wishes to purchase 1 more license which will cost him 10$ more.
Hence can we increase his billing cycle of subscription by updating the subscription?
We checked in Update Subscription API, & it is only allowing to update credit card info hence is there any way to update amount.
Query 2
Is there any way to implement Autorenewal, hence when a user wishes he/she can set auto renewal on/off for recurring billing.
Query 3
If there is any way to switch off auto renewal of recurring billing, then is there any link that we can generate & send them through which they can pay there next due.
Query 1: You cannot update a subscription amount. If the amount needs to change you either need to cancel the current subscription and create a new one for the new amount (being sure to prorate credit from the previous subscription payment) or use CIM to manage your subscription service which allows you to charge against their card at your discretion but requires you to also manage the subscription yourself.
Query 2: Not through Authorize.Net. If you want a subscription to start or end you need to explicitly do so through their API.
Query 3: Not through Authorize.Net. That application logic and, once again, you would be responsible for managing.
I'm assuming you are using or are aware of the API provided for Authorize.net here: https://github.com/AuthorizeNet/sdk-dotnet/tree/master/Authorize.NET/Api/Controllers
Query 1: As of now, there is a way to update the amount for a given subscription. You can use ARBSubscriptionType class. There is an amount property there you can set. Then you can create the request ARBUpdateSubscriptionRequest, passing in the ARBSubscriptionType class and the subscription Id.
Note: You might have to handle pro-rating.
Query 2: There isn't a built in renewal feature in Authorize.Net as far as I know. It seems like you could potentially update the totalOccurrences by some amount to act as a "renewal", when technically its an extension of the subscription. The method in which you check when to update, either a Modulo operation or a date check is up to you. You can use paymentScheduleType class to update totalOccurrences, passing it along to a ARBUpdateSubscriptionRequest.
Query 3: Authorize.Net does not have any in house link generation.
I use Stripes' webhooks and want to get notified, if the customer successfully "paid the bill". I came across two webhooks, which in my opinion both could do the job:
Webhook "invoice.paid" - According to Stripe doc: Occurs whenever an invoice payment attempt succeeds or an invoice is marked as paid out-of-band.
Webhook "checkout.session.completed" - According to Stripe doc: Occurs when a Checkout Session has been successfully completed.
My questions are:
I don't understand the second part of the "invoice.paid" webhook: "invoice is marked as paid out-of-band" -> What does "out-of-band" mean? Is this to be considered a successful payment?
Regarding "checkout.session.complete" -> This can also occur, if payment fails - correct?
Which webhooks shall I consider (or are there other webhooks) to see the status "customer paid the bill successfully"?
What is more, I don't really know if disputes should be considered as successful payments or not: On one hand, I get a invoice.paid webhook, on the other hand, I get a charge.dispute.created webhook. geeezus...
I appreciate your help! Thanks.
I don't understand the second part of the "invoice.paid" webhook: "invoice is marked as paid out-of-band" -> What does "out-of-band" mean? Is this to be considered a successful payment?
This is specifically referring to marking an invoice paid out of band (ie, the customer paid you outside of Stripe and you want to mark the Stripe invoice paid without collecting a payment). This will not involve an actual payment, but does transition the invoice to status=paid so this event fires.
Regarding "checkout.session.complete" -> This can also occur, if payment fails - correct?
This event signals only that the Checkout session is complete. Depending on the mode use for Checkout, this may or may not involve a payment. If an immediate payment is expected, the session will only complete if that payment is successful. For example mode=setup or mode=subscription with a free trial will not involve an immediate payment. A subscription with trial, though, will create a $0 invoice and fire invoice.paid.
Which webhooks shall I consider (or are there other webhooks) to see
the status "customer paid the bill successfully"?
This depends on what you mean by "paid" and "bill". If you mean specifically for invoices (whether related to subscriptions or not), then invoice.paid is a good choice. You can then filter for amounts greater than $0 etc to further constrain was "paid" means.
What is more, I don't really know if disputes should be considered as
successful payments or not: On one hand, I get a invoice.paid webhook,
on the other hand, I get a charge.dispute.created webhook.
Disputes are not payments, and should be an entirely separate discussion. You can only have a dispute after a payment. Suggest starting by reading the docs on disputes.
To summarize: What are you really trying to do? These events are related and sometimes overlap, but not always. It highly depends on what you're doing.
What's going on?
When you create a checkout session it will have an id, which you'll store in your database next to the user who started the checkout session.
When you receive an invoice.paid webhook event, it does not have any link back to the checkout session! (so you'll know someone paid, but you won't know who paid!)
checkout.session.completed solves this because it contains the id of the checkout session and the stripe customer id, which allows you to link the two, so you basically have a mapping from your customer ids to stripe's customer ids.
So simply grab the customer id from the checkout.session.completed event and store it in your database next to the relevant user, that way you'll be able to tell which one of your users is paying you when you receive an invoice.paid event!
How can this be implemented?
When a checkout session is started, store the checkout session id next to the user who started the session so you can look it up later
When you see checkout.session.completed, look at the accompanying JSON and take the stripe customer number and store it in your database (e.g. a column like stripe_id in users table). To figure out which of your users it's for, use the checkout session id to look it up in your database (i.e. the data you stored in step 1)
Now that you have the stripe customer id stored in your users table, whenever you see invoice.paid, look at the accompanying JSON, take the stripe customer number, look it up in your users table to find who paid, and update the expiry date of their subscription to 1 month into the future.
That's it!
Also good to know
Both checkout.session.completed and invoice.paid events are triggered when someone new subscribes, and only invoice.paid is triggered each month thereafter (presuming the user had enough funds and didn't cancel)
You can get to the stripe customer number in both webhook events like so (this is ruby, but should be similar with js or python):
payload = request.body.read
data = JSON.parse(payload, symbolize_names: true)
data.object.customer
=> "cus_Lvyv721cJGpYB1"
I can not find anywhere in the documentation where I can charge a credit card and associate it to an existing customer profile id without also having an existing customer payment profile id - in a single step.
Shouldn't I be able to simply charge a transaction against the customer profile without needing a payment profile?
Despite the down votes, this may be useful to others. It seems counter intuitive that a payment profile is required prior to charging a new credit card to an existing customer. However, I have confirmed this is indeed the case.
I have been using Stripe as a payment method. I need to implement ACH to pay back to the customer's bank account.
Here's the summarized business model.
We sell recurring subscriptions to our customers
With every subscription we deposit some amount as rewards in their account
At any point of time they can claim their reward money
We ask them if they want to get paid via check or ACH
Paying to customer via check has been completed.
For ACH, I talked to Stripe and came to know that Stripe only accept payments, but it does not hold funds and exchange them with other people.
I researched and found out that Paypal does this.
Is there any other way?
Thanks
I'm building a site on Rails using ActiveMerchant to clear payments through Authorize.net. We'd like to support paying for a subscription to the site using recurring credit card payments. The Authorize.net Gateway allows me to setup a schedule of recurring payments on a given interval from a specified date. I see (http://developer.authorize.net/tools/arberrorcodes/) that they will give me an error if the credit card's expiration date is before the start of the recurring payment period, or if the test transaction is not approved at the time that the recurring payment is setup.
What I'm unclear on is how best to handle transaction failures which may occur after the recurring payment has been setup. For example, what if the credit card used to setup the recurring payment is cancelled, or if the account has insufficient funds, before the end of the recurring period.
Should I be proactively checking the status of the subscriptions I have previously created in a cron job? Should I check the subscription status with Authorize.net each time my users login? Is there some other way in which I should expect to be notified if my previously valid subscriptions cease to be so?
Thanks.
Looks like the 'right' solution here is to support Authorize.net's 'Silent Post' callback. This will send transaction status on all cleared and failed transactions every night after they're run.
However, the status will only be sent once, so if it's not received for any reason, you'll still need to query subscription status through ARB proactively.