How to set trial period in shopify app? - shopify

I have created shopify app and setting up billing Api. In the App, I want to apply trial period of 20 days. I have created the charge during the app installation and send customers to confirmation url so that they can accept or decline the charge.. So I want to know that if customer decline the payment charge, then can he uses the app featurs till trial period?

If a customer declines the subscription, you still get the confirmation URL callback. Examine the charge. The status will say declined. At this point you can kill off their DB token and destroy their session. This will ensure they cannot use your App as they declined the terms.
It is one bad aspect of the whole billing scenario. I have lots of customers that are faced with a question they don't read. So they assume the trial you offer for free is activated by declining the subscription. Silly customers... still cannot operate the Internet :)

Related

Migrate old subscriptions to stripe

We have an existing saas app where we used to handle payments for subscriptions offline in a manual way. (They pay us directly to our accounts and we update their subscription data in our database manually).
Now we are moving over to stripe so that customers can automatically add/renew their subscriptions on our platform (via stripe).
Since our app queries stripe to fetch the customers current subscription, we will have to somehow move all old subscriptions to stripe but I am not sure how to proceed with that.
What I expect at the end:
Add a subscription for all old customers to stripe WITHOUT charging the customers anything (as they have already paid to us outside of stripe).
Then when the subscription ends, let stripe proceed with its flow of auto-charging the customer.
I don't really care if the interval of the new subscription in stripe is from today to today+365days even though the customer purchased our services 3 months back (we don't mind giving him an extra 3 months for free)
What i tried and didn't work:
Create a subscription manually for the customer (via the api/dashboard) but stripe throws an error saying no payment method set for the customer which leads me to believe that stripe will want to charge for this subscription.
Approaches that I am evaluating:
Create a coupon with a 100% discount while creating a subscription for the old customers. But I am not really sure if this is the right way to approach this (what happens to stripe fees here?)
I would really appreciate it if someone can shed some light on what approach to take here?
Thanks!
I believe you can create a Subscription with a trial period. Ie. If your customer purchased your services 3 months back, you can create a Subscription with trial period = 9 months, or even 1 year if you don't mind giving them 3 months free until today + 365 days.
When a subscription is created with a trial period, it won't ask for a Payment Method. When its billing cycle is approaching, Stripe will send a trial_will_end webhook event for you to start collecting your customer payment method.
There is also a Stripe's official doc for trial Subscription.

Handling payments in react-native

So I am building an app with react-native (expo) where a user fixes appointment with some other person and to do so, he has pay the other person.
Now how can I handle payments here. What i want is the user makes the payment and the receiver should be the other person but how much i understood the payment gateways, the payment is received by the app owner or in simple words, receiver is a single person.
I also tried deep linking to directly take the user to some UPI app like google pay or paytm but it seems that those apps require some special type of account (merchant account) to make the transaction if we access them using deep links (which is a problem as it is not necessary that every user will have a merchant account).
As I said, it is always better that you have your own payment gateway account, and all the transaction goes through your gateway, meaning you get the money and you build a system which will forward the payment to the receiver. I have worked on 2 such apps:
1: Where we have our own razorpay account, and we get the payment first, and then we forward it.
2: Where in we were directly having transaction between 2 users, but not through app, instead we display them the account details of the receiver and give them 48hrs time to pay that account. But we had to manually handle this scenario since one cannot know if the user has paid to the said account, since it's not your account.
3: There is one more method where in payment gateway has a webhook which consists of a virtual account number, and every user that lands on your app, you can create a virtual account number for him/her and store the user-virtual account number relationship in your db, whenever there is a payment, you can find out about the user through this virtual account number. Read about this.
The deep link is a good idea, but again, as you mentioned, it will require the end user to be a merchant user(have a merchant account), you can find more details here
Maybe you can ask your users to create a merchant account, which again I am not sure if it's possible, and if it's possible, if it's feasible?
The best way according to me is, you handle this through your payment gateway, and instantly forward it to the user who should have received it. Again there are some rules and clause to it(some commission is taken by those payment gateway,etc), check those things out.
I think the most close answer to my question is to use razorpay routes where we can link multiple accounts with our account and transfer money accordingly.
More details here

Shopify / Paypal Express: Shipping cost not showing until after payment

Ok so I got the following problem with my Shopify shop: Because my shipping varies based on weight paypal does not show the shipping rate until after the customer has logged in and paid for it. It then gets send back to Shopify where it receives the message that it will be billed an additional $10 for shipping, which already got me some complaints.
So what I want is that it will already shows the shipping cost before the customer logs in and pays for it. I imagined that more people had this problem and perhaps found a solution to fix this?
Thank you
There are a number of ways to handle this with the PayPal system, but I'm not sure if Shopify is open enough for you to make any changes. You'll probably need to ask them how it's configured and see if you have any option to adjust it.
The standard flow for Express Checkout is that you would show the user their cart and any fees you've gathered at that point so you can generate the subtotal. Then you send them over to PayPal where they login and agree, and are then sent back to your site. Back at your site you would obtain the shipping address from PayPal and you could then display a final review page that breaks down any additional shipping, tax, etc. that might be applied now that you know their shipping address. No money would actually be charged until they approve this final review page.
In order to skip the additional review page on your own site, PayPal introduced the Instant Update API a few years ago. This gives you the ability to generate a web service that PayPal's review page will call and send the shipping address so that the service can calculate shipping and tax and return it back to PayPal. The PayPal review would then update accordingly so the buyer can choose their shipping option and see the grand total on the PayPal review page. That way they can finalize and would still be returned to your site, but you wouldn't need to show another review. You could simply show the thank you / receipt page.
I'm not sure if that first method I outlined is in fact what you're getting..?? It sounds like you're saying that Shopify is skipping the extra review, finalizing the payment, and then simply notifying the user that more money was charged than they agreed to. If that's the case, I would say that's very sloppy checkout design.
Again, though, as Shopify is a hosted solution, you probably won't have the ability to adjust this on your own. It's possible they have the Instant Update API available, though, and maybe you just need to enable it..??
You'll need to check with them for more details about your options.

subscription payment processing

Looking for some advice on which service to use to implement the following on my site:
I would like to sell 4 levels of subscriptions each to be billed on a monthly basis
The customer should be able to cancel their subscription at any time
The customer should be able to upgrade and downgrade their subscription at any time
I would like to keep the cost down until I have enough subscribers.
I have looked at Paypal but could not figure out how I can do requirements #3. Posting to their community forums yielded no response.
I am also located in Canada which seems to limit the options available to me.
I am currently looking at www.preedly.com and www.chargify.com but they seem to require a merchant account so I'd end up paying 2 service providers.
My site is written in PHP so a PHP-friendly solution is needed.
One last thing, I could not find a way to get Paypal to tell me the new subscription expiry date (following the successful processing of a transation) in order for me to update my customer table and lock out those who have not paid.
You may want to look into gettings a US based merchant account (I used to work for a merchant account provider and we were able to successfully establish merchant account for Canadian businesses. IIRC it required some hoops to be jumped through, though). If you can get a US merchant account you then can use Authorize.Net's Automated Recurring Billg (ARB) API. It allows you to create subscriptions and modify them accordingly (upadting and deleting).

Getting status on canceled/expired credit cards for recurring billing with authorize.net

We're setting up a system that will use the XML API for Automated Recurring Billing with Authorize.net.
It looks simple enough to set up a recurring billing. But we have two features that do not seem obvious
* providing customers with details on individual payments
* providing notification to customers of expired/canceled cards
Anyone familiar with a mechanism to retrieve this info in automated form? We're considering
* just listing out assumed payments based on our own calculations the start date
* emailing customers based on the expiration date of the ards
But I'm stymed on how to figure out when a transaction failed due to canceled card (and automatically notify the customer).
Can anyone comment on how they handled this issue when implementing a subscription-based service based on Authorize.net?
Authorize.Net has recently published a new ARB method "ARBGetSubscriptionStatus".
You may now easily query the status of a previously submitted ARB subscription without the need to depend on the "Silent Post Method".
Example:
<?xml version="1.0" encoding="utf-8"?> <ARBGetSubscriptionStatusRequest xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"> <merchantAuthentication> <name>mytestacct</name> <transactionKey>112223344</transactionKey> </merchantAuthentication> <refId>Sample</refId> <subscriptionId>100748</subscriptionId> </ARBGetSubscriptionStatusRequest>
You want to use Authorize.Net's silent post feature. It will notify you of all payments made through their system including declines and expired credit cards. Your script will then be able to suspend accounts and/or notify your customers that their payments has failed.
See these link for more info:
Handling Authorize.Net ARB Subscription Failures
All About Authorize.Net’s Silent Post
Handling Authorize.Net Silent Post with PHP
You need to use the Silent POST URL
ARBGetSubscriptionStatusRequest will not work. If the first transaction (or first transaction since the ARB profile was updated, either via API or manually) fails, the status of the subscription is set to suspended. Otherwise, the status of a subscription does not change when a transaction declines or a card expires.
Using the Silent POST URL, you'll be notified of successful transactions and you can use them to update your data such as tracking a next payment due date/expiration date. You can then run a cron job and if this field has not been updated, you will know that the card was cancelled or expired.
In the event that it is still an active card but gets declined, you'll get notified as such at the Silent POST URL