[bop-devel] things that I propose that we unify in B:OP

Peter Bowen pbowen at corp.untd.com
Thu Dec 7 09:43:34 PST 2006


I wrote the CyberSource module, and I had trouble figuring out what to
implement and how to play nice with other modules...  I would love to see a
wiki that can identify and define the methods and way that modules should be
implemented.  I'm a little loathe to rewrite the module, but there's
apparently some new stuff that I have to do for CyberSource in Q1 and I've
seen some traffic about new fraud stuff this last week - so now would be a
good time to do it.

Ivan - would it make sense to put together a wiki for building new modules
AND putting together a small steering group to try to help developers to
play nicer?

-Peter


On 12/7/06 10:24 AM, "Jo Rhett" <jrhett at netconsonance.com> wrote:

> I would like to start a list of things that I propose that we unify in
> B:OP main module, which would require less if/then/else in the main code
> and would present a more unified interface.
> 
> Naturally, each of these thing would require the payment gateway module
> to parse the new input.  However, my reading of the modules indicates
> that this is *reduce* the amount of code in then, because they'll only
> have to expect a single format.
> 
> 1. First Name, Last Name.  Almost all gateways want separate names now.
>   Why don't we modified B:OP to require both names and have the 1?
> gateway that uses a full name add them back together?
> 
> 2. Test options.  We currently only support 1, but most gateways support
> Pass/Fail/etc test options.  Lets have B:OP allow a consistent set of
> tests and have the gateway Carp or falsify if the processor doesn't
> support that test.
>    ** My customers really like being able to test out negative
> responses, which B:OP doesn't implement right now in any of the gateway
> modules.
> 
> 3. A single format for Expiration date.  Let the gateway munge it into
> the format it wants.  In particular, I think that B:OP should accept both
>     expiration => 'mm/yy'
> -or
>     expiration_month => 'mm'
>     expiration_year => 'yy'
> 
> And send a single consistent value to the gateway module.  (note that
> others may have strong opinions on this, include mm/yyyy and how to
> handle people with full dates mm/dd/yyyy or dd/mm/yyyy format.)  But
> whatever we do should be the same across all modules.
> 
> 4. A standard method to ask the processor if it can reject based on AVS
> mismatch.  So instead of hardcoding the avs stuff into the program
> around the module names, you can just $tx->isRejectAvsAvailable() ?
> 
> 5. B:OP should strip all other characters from the card number field.
> Some gateways accept them, some don't, but none will bark if they
> receive only numbers.  (and the gateway module could fix that anyway)
> 
> 6. B:OP should look at the number and submit the right card type
> information to the gateway module.  /^4.../ is Visa, etc etc.  Nobody is
> going to ask the customer this, and the number formats are well known.
> Right now our app does it, but it would be easiest to unify in B:OP.
> 
> Yes, if you know the code you're probably jumping up to say "But B:OP
> isn't in the information flow!"  So yeah, I'm proposing that it be.
> Either the method calls a B:OP method which calls a processor method
> (easiest to implement with little change to gateways) or the gateway
> module does a callback on the input
> 
> $input = Business::OnlineProcessing::parseInput( $contents );



More information about the bop-devel mailing list