Yes. Let's let the client that is a cheating bastard be the only side that knows anything happened.
Additionally:
This is not how you catch exceptions.
Ah yes, the only type of sign that matters is the one that has the stringy name minecraft:oak_sign. Why not use the constants in the Blocks class?
if(blockSign == Blocks.SIGN)
Or fuck it, skip straight to here. If there isn't a sign below your shop, there won't be a SignTileEntity below your shop.
ItemStacks should never be null. Use ItemStack.EMPTY and use .isEmpty()
What if the player has two stacks of credits in their inventory, each smaller than the price, but totaled is greater than the price? i.e. what if you set the buy price to 100?
What happens if the quantity is greater than the maximum stack size for this item?