Kiwi.zolotek.net Some stuff for OS/2 and Interchange.
--Last updated May 2009. Lyn St George.
Interchange/2

This is the OS/2 version of Interchange, v4.9.8. The zip contains a 'Readme.os2', the original 'Foundation' demo, Mike Heins's new 'mike' demo, and my new 'hardware' demo, along with the patched source, the pre-compiled cgi executable, and the patch.
NB: - this badly needs updating to v5.x...

Readme.ic498.os2 | Interchange-4.9.8_os2.zip | Interchange-4.9.6_os2.zip
Co-operation between multiple payment methods

I have rationalised and simplified the system for running "standard" payment methods along with third party methods such as Google or Paypal. The variable MV_PAYMENT_MODE must be set to something, normally your standard method such as Authorizenet (though if you only have Google or Paypal then it should be set to that). The [charge ... ] tag in log_transaction should be altered so that 'route="[var MV_PAYMENT_MODE]"' becomes 'route="[value mv_payment_route]"', the parameter 'pprequest="dorequest"' added into the '[charge ..]' tag for Paypal (this will be ignored by any method that does not recognise it), the value of 'MStatus' must be unset in the session by adding 'undef $Session->{payment_result}{MStatus};' at the beginning of the '[calc]' block found immediately under '[elsif variable MV_PAYMENT_MODE]' (this handles the case whereby someone goes to Google or similar but abandons it and returns to attempt a 'standard' card transaction).
You also need to create new profiles in profiles.order, including particularly those lines at the end as per the relevant documentation and the samples supplied here.

Sample sections of: profiles.order | log_transaction

 

SagePay payment module for Interchange
May 2009, v0.8.6. This is the erstwhile Protx gateway rebranded after purchase by Sage. This module runs 3DSecure (ie, "Verified by Visa" and "Mastercard Securecode") and falls back to standard processing for those cards not part of 3DS. Besides the usual authenticate, payment and deferred types, when used with a suitable terminal it can also do the following: authorise, repeat, refund, void, cancel, abort and direct payment to a credit card. It has a function to check that the Sagepay gateway is available and optionally complete the transaction offline if it's not. It has another function to check for the response from Sagepay being empty and then querying their database to hopefully obtain a correct response during run-time . Their database may be queried at any time from a suitable terminal keyed on the IC-generated 'order-id'. An 'offline' order may be converted into a normal paid order using a suitable terminal.
TODO: Sagepay are still promising to provide the "Third Man" fraud-checking results at run-time, and if they do I will add this function in.
As a 3DS 'authenticate' does not provide any of the normal AVS/CV2 results, a function should be added to run an 'authorise/void' for a token amount after the 'authenticate', to get the AVS/CV2 results back.

SagePay.pm module   Sample 3ds files: tdsfinal | tdsreturn | tdsauth

Paypal Express Payment Module for Interchange
May 2009, v1.0.4, updated documentation, functions for refunds and 'mass pay'. Code for backing up the order hived off to a usertag (see below). Giropay being tested in a dev version.
Full documentation is in the head.

PaypalExpress.pm  

GoogleCheckout payment module for Interchange
May 2009, v0.7.2. Updated documentation. This version uses XML::Simple rather than Google's own custom libraries. It also uses a temporary order number until Google reports that the card has been charged, when it creates a normal order number. It logs the order in the database as pending immediately upon hitting 'submit to Google' and also logs a backup order in text format. It updates the database status each time that Google sends a notification, and upon successful completion at Google it completes the IC order route and sends emails to the customer and merchant. It allows all possible commands, eg 'refund', 'authorise', 'deliver' etc to be actioned via a suitable admin terminal. One thing it does not do, as a result of an early policy decision, is allow the customer to change address once at Google. This function will be added into the next version however. All configuration options are documented in the head of the module.

GoogleCheckout.pm  
Usertags for Interchange

Log order tag: this logs the entire basket plus the customer's delivery and billing addresses, and is intended as a failsafe backup in case your order route or something else fails. Place it in the body of the final submit button in the checkout page (some payment modules, eg PaypalExpress and SagePay) will optionally call this tag themselves without putting it in the button.

logorder.tag
Verifyemail tag: this checks not only the format, but checks with the recipient's mail server that the address exists. Not all mail servers will respond to this check, but it's still a useful check that catches many bad addresses. Required perl modules listed in the tag
verifyemail.tag
Apache/2

This is Apache 1.3.26, built with mod_interchange and mod_ssl for Interchange.

'how-to' | apache_1.3.26_mods-ic+ssl_os2.zip
Perl

Perl 5.8.0, compiled with crypt and all other defines and modules needed for Interchange.

perl-5.8.0_os2_ic2.zip
BerkeleyDB, Crypt

BerkeleyDB 4.1.25 built with "db1.85 compatibility". Readme, patch, tools included in zip.
This crypt is built from ufc.zip, ie, 'ultra fast crypt'. It contains crypto.lib, crypt.lib, ufc.lib, crypt.exe, cert.exe, ufc.a, crypt.a, and crypt.h.

Readme.os2 | patch | BerkeleyDB-4.1.25-os2.zip
crypt-os2.zip
Which/2

This updated "which" for OS/2 is very different to the Unix version. It includes searches on the BOOKSHELF (flag '-b', for .inf, .pdf), DPATH (flag -'d', for.*), LIBPATH (flag '-l', for .dll, .lib, .a), C_INCLUDE_PATH (flag '-i', for .h), HELP (flag '-h', for .hlp), as well as the PATH (for .exe, .cmd, .bat files). Flag '-a' lists all instances, flag '-s' lists size and datestamp.

which-2.1.4_os2.zip
External links

Interchange hosting and consulting here
Some 'how to' documents for OS/2 here