What we do:
1> Start with the Appraised price. (If the item is a fake, modify with an Appraise-Forgery opposed roll.)
2> Define the "price modifier" as (250/CHA)%. Typically we cap this at 50% (what you'd see with a CHA of 5). Modify the CHA used by +/- 2 based on race (i.e., if you're the same race, add 2, if your races are enemies, subtract 2).
3> If the PC is haggling to buy something, the asking price is increased by the price modifier. If the PC is haggling to sell something, the offer price is decreased by the price modifier.
(This is the price you will settle on AFTER haggling. If you want to roleplay haggling, start at the 150% or 50% cap and work towards this midpoint.)
That is, if I have a CHA of 10, and am interested in an item appraised at 80 gp, the merchant will buy it for 60 or sell it for 100. If my CHA is really low (< 5), he'll buy for 40 and sell for 120.
4> If the player wants to throw other skills in, make an opposed roll. Diplomacy/Innuendo, Bluff/Sense Motive, whatever you want to try. The DM will decide which counterskill is appropriate to whatever you want to try, and can throw in circumstance modifiers as needed.
If you succeed, simply modify the CHA used by step 2 by adding the margin of the opposed check.
If you fail, the NPC only sells/buys the item at the worst price possible (150% or 50%).
Failing an opposed check by 5 or more causes the NPC to refuse to sell/buy the item at all.
Failing by 10 or more generally causes them to refuse to sell anything to you at all, or your friends if they're nearby.
Generally, this means that a "front man" (high-CHA type with lots of social skills, like a Bard) sees diminishing returns; for instance, with a CHA of 20 he's already seeing nice prices (112.5% or 87.5%), and increasing that by succeeding in an opposed check of +10 margin would only change that to (108.3% or 91.7%).
If you want to reward roleplaying, simply say that if the player roleplays the encounter, the 250/CHA in step 2 will be replaced with 200/CHA.