E-commerce application how is this robustness criteria implemented? - e-commerce

Consider the following use case
1. User selects a product to purchase on seller's site
2. Clicks on net-banking option and redirected to his bank website
3. Successfully makes the payment.
4. But before the payment gateway redirects him back to seller site the browser crashes.
5. Seller site reports that payment is not recived but the bank reports that payment has been made.
What are the best practices to handle such cases?

Return money to customer or deliver goods. Should be a rare occasion, and I dont really see it possible as automating.
What you could ALSo do is regularly check all open / pending payments from the website (as: the user was sent to the bank, so I can check in an hour whether I simply missed / never got the callback / for the payment.
Imagine 4 is : User closes interface and browser never returns.
The payment gateway should have an API to keep and identify those, including whether the payment was finally aprooved.

Related

PayPal and payment implementation

I am designing a website that accepts payment through simple PayPal or Stripe buttons, but also has a section that pays out users through PayPal. What is the best way to do this?
Current setup: The user builds up coins through an action (NDA won't allow me to discuss in detail) and when their coins reach a certain amount, they can cash out in real $. I have designed this flow: Pay Me Now Button -> Screen with PayPal email address input. Repeat email for typos, then Confirm Button -> Success screen
However, the client would prefer a direct link out to PayPal instead of manual input of email addresses. The reasoning is that they would prefer it being arranged through PP's service to reduce manual errors and typing out. As far as I am aware the only way to get paid is through writing down an email address/phone number. I have researched PayPal.me buttons but it still isn't making sense. Maybe there's another service altogether that I can suggest to the client for paying out users in a no-friction way?
I'm looking at how user testing sites pay people, but not getting very far.
If the money is in your client's PayPal account and they wish to send it to a user's email address (that may or may not have a PayPal account already), this can be automated with PayPal Payouts.
If the user does not have a PayPal account already they will receive an email notification and have 30 days to create an account or add the email to an existing account. If they don't, the payment will be refunded automatically.

How to set trial period in shopify app?

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 :)

PayPal Sandbox transactions are not showing for seller

I've used my live PayPal account to login to developer.paypal.com where I created 2 new accounts buyer# (personal) and seller# (business). I've implemented a PayPal plugin for a shop (CubeCart + PayPal Standard Payment Gateway plugin https://www.cubecart.com/extensions/payment-gateways/paypal-standard). When I complete an order (sandbox testing) I sign using buyer# email and password and complete the order. I can then click to view account and it shows "payment to", "unclaimed" and the amount I've paid. When I logout of this account and login as my buyer#, I see no transactions. If I log back into developer.paypal.com and go to transactions under "Sandbox" section and select any of the email addresses I see the same statement for all of them "You don't have any transactions".
If I login to sandbox.paypal.com using james-facilitator# account (business) there are no transactions here either.
If I login to sanbox.paypal.com using james-buyer# account (personal) there is only the one initial transaction here for the initial 9,999 funds
I've obviously missed something but I can't think what, I'm not sure how a sandbox account knows who it's seller should be but I've checked both sandbox seller accounts. I find it strange that the buyer account I used has registered the transaction but it seems like it's orphaned as there isn't any other record of it any where else including the developer.paypal.com sandbox transaction. I've tried this several times to see if I could get it working and I've also allowed for 24 hours just in case there was a delay somewhere.
I just want to be able to test transactions before going live.
Any help/advice?
Much appreciated :)
Cheers
James
Solved - silly really now I know but it was simply the email address I used to test the API. I used my main live account and I should have used the fake email address in my API call. Since my live controls the test accounts I assumed that this should have been used.

Paypal express checkout payed more (issue)

Hy guys.
I just implemented the paypal checkout express into my website.
All went good until i had test it live.(without sandbox becouse they didn't send me the confirmation email and i cannot get the api credentials)
- i used my own paypal account.
My question is:
Step 1) call "SetExpressCheckout" with required data.
Step 2) get the tocken and redirect the user to pay 0.01 USD. (all good, user saw $0.01)
Step 3) get the buyer details ..."GetExpressCheckoutDetails" and save them (all good )
here is the big problem:
Step 4) call api: "DoExpressCheckoutPayment" with TOKEN, PAYER_ID ...etc also PAYMENT TOTAL AMOUNT
In this step i added the TOTAL AMOUNT by mistake as $500 - hardcoded , after finalizing the order the $500 were transfered to my account from buyers account instead of $0.01.
How this is possible ??? Why paypal doesn't check the total amount from setExpressCheckout with the total amount from DoExpressCheckoutPayment, becouse the tocken is the same one.
In my opinion this is a major security issue.
That is by design. SetExpressCheckout sets up the payment, but your application won't know (in best practice scenarios) the shipping address of the buyer until after you've called GetExpressCheckoutDetails. At that point you could calculate shipping and sales tax accordingly and add it to the order, display a final review page, and then call DoExpressCheckoutPayment with the final order amount to be charged.
So, yeah, whatever you pass in DECP is what's going to get charged, so you want to make sure that's correct.
As for testing, you just need to create an account at http://developer.paypal.com and then create sandbox accounts within that. You can get the API credentials for sandbox accounts by clicking on the profile of each sandbox account. No need to wait on any confirmation emails or anything. Not sure what you're referring to there, but I definitely recommend testing on the sandbox.

How to solve the problem of not being informed of successful payments by the 3rd party system used by my website?

I have a subscription based website that interacts with a 3rd party system to handle the payments. The steps to process a new subscriber registration are as follow:
The subscriber enters his/her details in the subscription form and click on the submit button.
Assuming the details specified are valid, a new record is created in the database to store these details.
The subscriber is then redirected to the website of the 3rd party system (similar to paypal) to process the payment.
Once the payment is succesful, the 3rd party website then redirect the subscriber back to our website.
At this time, I know that the payment was succesful, so the record in the database is updated to indicate that payment has been made successfully.
A problem that I have found occurring quite often is that if a subscriber pays but does not complete the process correctly (e.g. uses the back browser, closes the window), his/her record in the database doesn't get updated about this. Accordingly, I don't know if s/he has paid by just looking the record and need to wait for the report from the 3rd party system to find this out.
How do you solve this problem?
PS. One of the main reasons to store their details into the database before the payment process is done is so they can come back to complete the payment without re-entering their details again. For example, when their credit cards were rejected by the 3rd party system and they need to sort this out with their financial institution which may take a while.
The third-party payment system should inform you of the successful transaction regardless of what the user does.
For example, in PayPal, an IPN (instant payment notification) is sent to your server as POST data to a URL that you specify. Your server then verifies with Paypal that the transaction is genuine, and if so, updates the database record to indicate the subscription is valid. At a point in the future, PayPal may or may not then redirect the user back to your website. (The "may not" can occur in cases such as the user closing their browser, hitting Back, or jumping to a new URL)
Note that this "conversation" between Paypal and your server is independent of the user's session - it is a "private conversation" between you and PayPal about that user's transaction.
Obviously there can be communications outages and server failures, so if Paypal does not get the validation request from your server immediately it will periodically send retries to your server to ensure that the transaction is eventually completed.
If your payment system doesn't have at least some basic mechanism for ensuring transaction reliability, then choose a different provider. Chances are that they do, but you will have to implement things correctly on your server to be sure that the system works properly.
P.S. It is quite normal to require a user to log in (and thus be registered in the database) before they initiate any financial transaction. You need to gather all the relevant information before they go to purchase, as after the purchase you have no way of guaranteeing that they will return to you to provide any further information.