Payments - architectural dilemma - C#