They wrote a check to you for a product they received. They stopped payment on the check after getting the product. It doesn't matter if they decided they didn't like the cake after the fact - or whatever BS reason they think they may have for stopping payment on product they have already gotten - it's theft. The law is very clear (and I imagine it's the same in most states) - It is up to you, the business, to issue refunds if it is your policy to do so - it's NOT up to the customer to just give themselves a refund whenever they feel like it. The only evidence you need of the transaction is a copy of the check that was stopped. A signed invoice would also be good or other proof of delivery, but I don't think it's completely necessary. Heck, the date of the check may be all you need for proof if the date of the check matches the date of delivery. I mean, do you sign something at the grocery store that you received your groceries or do you just hand them a check? If you stop payment on the check, do they get testimonials on how good the groceries were from facebook to prove that you got groceries and that they should get paid for them? No! Really, all that matters is that you delivered a product, they wrote you a check, then put a stop on it.
You may never get paid - but you can make their lives a lot more difficult and feel a little better that they didn't just "get away with it". You need to do a few things:
Send an invoice to the them for the full value of the cake plus a returned check charge (maximum allowed in your state), and send it *certified mail with return receipt*. Demand cash or a certified bank check. Do not accept another personal check. Give them 15 days from the date of the letter to pay. Also put on the invoice that failure to pay means you will turn the account over to collections and report the negative account to all three credit reporting agencies. Also let them know you will be filing a report with your DA's office for prosecution of the misdemeanor. Google your state's bounced check policy and use that language exact.
Assuming they don't pay:
File a report with your local DA office to report the stop payment. This will not mean you get paid, but this will prosecute them for the misdemeanor and put it on their criminal record. This will effect things like their ability to get certain jobs and possibly effect their ability to write checks in the future.
Call a collection agency and find out what they need to take over the account ASAP. They will start sending the proper bills and start tacking on a ton of fees.
If the collection agency doesn't offer to do it (but they probably will), contact all three credit reporting agencies and file a negative account with them. This is surprisingly easy to do - you literally just send them a letter. All you need is the person's name and their mailing address. You should be able to get everything you need off the check. This will effect the person's ability to get credit, may raise the rates of credit cards they already have, and may even go as far as to prevent them from renting property. It drops the person's credit score and shows a derogatory that will remain for (I think) 10 years. If they want to buy a house, they will have to pay you before they can get the derog removed.
Let the collection agency take it to small claims on your behalf once they exhaust their collection abilities. At that point a $400 cake will probably be a $2000 cake after interest and penalties. Once judgement has been rendered (in your favor, almost 100% guaranteed) it will also knock their credit further down.
Threatening to do all these things is sometimes enough to get people to pay you. But the only way you improve the chances of getting paid is by doing all of it - every single step. And it sounds like a lot, but you could probably bang out all these steps faster then it took me to type out this post