A much better system would be if you could get a temporary number where the merchant can withdraw exactly the amount you need to pay and no more. No charge-backs possible. That's not a problem since the reason we need charge-backs is to patch up the fact that people can randomly take money from you just by knowing the credit card number, which you need to send around to make payments.
Even better is this. At checkout the merchant's site would redirect you to yourbank.com/makepayment?amount=X&target=themerchantsaccount. There you would log in (if you were not already logged in) and click confirm, and the bank would send the money to the merchant. Very user friendly and secure, and no chargebacks. In the Netherlands we have such a system, it's called iDEAL and pretty much all dutch e-commerce uses this. The nice thing is that if your bank is secure, it's secure. You are not relying on thousands of individual merchants implementing security correctly, and you are not relying on the merchant not being evil.
Or bitcoin of course.
But, your point in general regarding the fact that divulging your info for one simple payment can expose you so horrendously is very true. Same with other info, like your SSN.
Too much of our current approach to "security" is based on protecting access to informarion, which is the core problem. In my business, we work with a number of retailers, large and small. It is breath-taking how exposed and naive some of these guys are. And, they are handling personal info for millions of people.
In general, we should have learned long ago that it is impossible to secure the data in all cases, so we need systems and processes that assume the data will fall into the wrong hands.
Of course, this is easy to do in a small country with less than 10 banks, which all trust one another.
> Card, PIN 1234 -> bank -> access John Smith's account -> access "1234" setting (max transaction of $50 otherwise declined).
> Cart, PIN 2345 -> bank -> John Smith -> 2345 is only valid on weekdays
I originally thought of it as a way for parents to loan kids their cards, give them a temporary PIN to use.
Might make more sense to adapt it into the CVV system (or a new system), where each specific CVV would correspond to a setting you determine. They can be created by you quickly and securely with a bunch of constraints.
But then I realised I had no idea how CCs worked, and assumed I'd either have to get a bank on board, or a CC company to implement it, and gave up.
I live in the UK and want to have stuff shipped to family in the US. I've had vendors of all sizes turn away my business because either they didn't like my IP or wouldn't let international addresses order at all.
Amazon(.com) has literally earned themselves thousands in additional sales because they happily accepted my UK payment to a US address without fuss or hassle.
You might say this is a niche situation but money is money, and I've had lot's of small vendors lose out because they were "US only!"
I now also have a "flower guy" because they're the only one in the city who will do international flower orders...
PS - Specific example, NewEgg, wanted to buy a several hundred dollar laptop - couldn't. Used Amazon instead.
The problems are:
(1) This will never work for a single vendor (unless it's a massive vendor like Amazon, and they're already doing it). It's something the bank has to do so it can tie together all the information about you.
(2) Banks have proven to be totally useless at online security in the past, and I don't see that changing any time soon.
(3) Google-style security can be a bit annoying when you really are logging in from an internet cafe in a foreign country.
Amazon has a UK presence so it's only natural they accept payments from there. But it's very myopic to insist all other vendors do the same since many don't have the resources to pursue fraud cases overseas. They barely manage to get through locally.
I used to work at a fashion house that didn't ship outside the U.S. simply due to our AVS not being able to valiate addresses outside the 50 states. Losing thousands of dollars to fraud during a bleak economy isn't how people stay in business.
The goals the larger retailers have here are to reduce the number of manual approvals (things like phone follow ups) needed without compromising the fraud rate, not to turn down transactions, so there's a lot of competition for more intelligent detection.
I use dirt-cheap VPS servers to tunnel web traffic over SSH socks proxies. Why? For fun. Because I can. To thwart ISP packet inspection and Google profiling my IP. To screw up IP-based ad targeting. Whatever.
I often sign up for a new VPS service while relaying from another one. I will often make it through the entire sign-up process, going through the PayPal info and everything, only to be told something like, "Your new account has been suspended due to suspicion of fraud." This only happens when I'm using a proxy. So they must be doing geo-IP lookups and flagging IP space that is a certain variance from your billing address.
I don't know how many VPS providers have lost my business due to this practice.
I just finished a simple gift certificate purchase page[1] for a client where I attempted to cut out all unnecessary details; the client's immediate response? "Looks good, but can we add some more fields like name, address, and security code to make it look more 'official'".
Edit: I don't necessarily disagree with their intuition; I think some consumers might actually be suspicious of a sparse payment form but I don't have any hard data.
Turns out that modern browsers (e.g. Safari/Chrome) encrypt CC data on disk, and that it's entirely PCI compliant to turn on autocomplete. The only field we don't do so (and that the browser doesn't store) is the CVC field.
Another tip is adding 'pattern="\d*"' to number/cvc/expiry inputs. That'll bring up a numeric keyboard in mobile browsers.
Lastly we've open sourced a library that'll do a lot of the client side validation and credit card number formatting for you: https://github.com/stripe/jquery.payment
There's a whole bunch of other valid reasons too. If there's a problem, it's nice being able to actually contact your customer. Most businesses need to be able to produce receipts, with some data needed to even count as a receipt ("you were charged X on Y" via email -- which you may not have anyway -- usually doesn't cut it).
And I'd love to see the data on this, but if someone has gotten to the point where they've decided to purchase and are presented with fields that are pretty standard just about everywhere else, I suspect abandonment rate is rather low. The pros just seem to outweigh the cons on this minimalism debate.
We do have one difference though (which I would call a simplication): For the expiration date, we just have input boxes for the person to enter it instead of a dropdown. Select boxes are great if a) You can pick a sane default and b) you don't have many options. For a CC form, both of these fail. You cannot set the default with anything better than random accuracy, and each box probably has at least 10 options. Additionally, the expiration date box says "2 - February". I have a lot of credit cards, and none of them say the name of the month on it, only the number. Why waste the space?
The user just typed in their 16-digit credit card number, just pop them right into the expiration date input boxes for them to type in their month and year free-form. Don't make them put the credit card down, pick up the mouse, then have to navigate select boxes with tiny print.
No thief in their right mind would want to steel a Software as a Service product like ours since you can't really resell it. If they were reselling it we'd quickly find out about it and disable the account.
If we were selling hardware or an item that a thief could turn around and resell without any trace, we'd have to worry quite a bit more about fraud.
I'd hate for somebody who is running a SaaS company to read this and implement some insane IP/Tor/blah fraud detection scheme when the nature of their product/transactions doesn't necessitate it.
Notably, you should never ask for "credit card type"; the credit card number already tells you that. I like the forms that just ask for a credit card number and then show the computed card type's logo once you've filled it in.
You can also automatically compute the city and state from the zip code, but that requires you to ask for the zip code first, which does break user expectations somewhat.
And please, don't ask for "First Name" and "Last Name" unless you specifically need them separated for some reason; just ask for "Name".
I switched to using MinFraud automatic fraud detection. Unfortunately, their system requires that the customer provide their country, city, and postal code. They run over a dozen different checks from IP address, proxy detection, distance from IP to provided ZIP code, etc. I haven't had a single chargeback since I started using it.
For me, my product sells for $8 and a charge back is $15. For me it ended up worth while to implement the larger payment form in exchange for eliminating chargebacks.
I really wish that payments could be made simpler, but that would require that processors do much more vigorous fraud checks and they don't have a financial incentive to do so (they make their normal fees from fraudulent transactions that aren't caught).
DON'T RELY ON ZIP CODE ALONE
For one, you don't know the different formats of zip codes around the world
Second: not all countries have Zip Codes. Like Ireland, for example.
See here: http://www.google.ie/about/jobs/locations/dublin/ "Dublin 4" is the "Zip code"
About the issue of matching addresses, it seems that the payment processors can't do a fuzzy matching (not sure why), so if your address is "P Sherman 42 Wallaby Way Sydney" and you typed "42 P Sherman Wallaby Way Sydney" you're denied the transaction
I implemented a full form asking for all their information and toss out everything during processing. It's a very silly thing but it makes customers feel better about the checkout process for some unknown reason to me...
As an example, in the implosion following the dot-com boom, it was almost impossible for denizens of many Eastern European and African countries to buy things online because the incidence of fraud attributed to their country was high enough that the fraud officers at many online retailers wouldn't chance it. I have a friend who lived in Romania who had a credit card that used my address in the US and frequently required me to ship stuff for him because no companies would ship directly to him. He loves the modern era of fraud evaluation, because while his country is weighted negatively, his use of a respected international bank, an IP address in the same area as his billing address and purchase history with many online companies has greatly reduced his level of hassle due to false positives alleging that he's a fraudster.
When I sell a product online, I need to charge sales tax if the customer lives in Canada, a different tax if the customer lives in my province, or no tax if the customer lives in another country. Therefore, I'm forced to ask for the customer's address just for this.
That said, I can probably still avoid asking for a lot of the info but this requirement still increases the minimum set.
If someone steals your social security number they can open accounts in your name. To stop it you have to call one of the credit bureaus and they will put an "alert" on your account together with a phone number. What most creditors do when they see this alert is call that phone number and make sure it's really you opening the account.
Really? Why isn't that just the default? Are you opening credit accounts so often you are majorly inconvenienced to make sure someone verifies it's you by calling the number you selected?
Similarly with credit cards. They could just text your phone to confirm that you really are about to purchase something. You could turn this off EXPLICITLY, and turn it back on when you lose your credit card.
If everyone used "Verified By Visa" or PayPal oauth-type portals for payment, this wouldn't happen. When your bank password is compromised, you can just change it. To do this, you simply ask them to send you an authentication code at a previously supplied email address -- two factor authentication. But now it's too late, because anyone who accepts your credit card can steal it, and use it a year later.
For that matter, why do we use Social Security Numbers and Credit Card Numbers for such important things? It's a relic of terrible one-factor authentication. That signature stripe was probably supposed to be used to match your signature that you sign the receipt with. Well, no one does that.
All you have to do is go on the site, purchase something using two lines, and they text you on your phone. You can turn it off explicitly. Then the law and the liabilities can change with such merchants. Of course, this will take years.
1. Given postal code, asking for city and state is pretty much useless. There is a unique mapping from postal code -> city, state. Maxmind used to have free db, but you can download it from geonames here: http://download.geonames.org/export/zip/
2. You don't need to ask for card type given card number. Again, simple regex. Reference: http://stackoverflow.com/questions/72768/how-do-you-detect-c...
3. Only American Express supports name verification. Most other banks don't. So, asking name is pretty much useless. If you already have the customer name in you database, use that to fill them in.
4. Things like 'Company' are just not needed.
5. Phone verification is again something supported by very few banks.
That just cut down 7 fields with no compromise on fraud.
Also, any good payment processor will let you store card information (in a secure manner adhering to standards set by Visa, a.k.a being PCI complaint). So, you could just display the last four of the card along with card type and charge them at a later point of time (think Amazon checkout).
So, payment forms need not be nearly as bad as the one pointed out in OP. But, sometime bad design choices and legacy thinking comes in way.
I work for Balanced Payments. When we were PoundPay (previous avatar of our product), we used to serve the payment frame via iframe. Our form looked like this: http://imgur.com/wF2Z2qZ
It encapsulates lot of points I discussed earlier.
That aside, customer data here is not only used for simply 'making the payment' as the writer says. This is a huge over-simplification of the problem, the payment gateway for the transaction to detect AVS and CVV is a /last ditch effort/ to catch fraud. The other fields could be used for other services that detect fraud such as ID Analytics, Experian, etc. and ultimately help mitigate credit and fraud risk for the company.
That's quite similar to 'Verified by Visa' model, where the client has to accept the payment on Visa's website.
Recurring billing (e.g. monthly payments) could be authorized once.
If a customer's computer gets hacked and the access to the online bank gets compromised, then that situation should be dealth completely by the bank (in the same way it's being dealth even now).
Merchants and online stores shouldn't have to worry about preventing fraud, that should be centralized and dealt by banks
The way they're doing things at the moment is driving people to pay via PayPal, because PayPal requires--hey look!--a single string which they call a "password".
Extremely frustrating for purchasers and sellers to need to provide and collect all of that information simply to accept a payment. Far too much friction.
- Eliminate the concept of a shopping cart if you just sell one product
- Don't force buyers to create an account
- Don't ask for the same information twice like shipping and billing address (if you collect billing address, you shouldn't)
- Combine first and last name into one field: name
- Auto-complete address based on ZIP
- Trust messaging
Baymard has great recommendations based on their extensive studies: http://baymard.com/checkout-usability
If you don't want chargebacks, accept digital cash in addition to credit cards. Give your customers a discount for digital cash, and charge your price + (estimated cost of chargebacks/sales) for a given period. BitPay / Coinbase are probably your best options for accepting non-reversible digital cash.