Kiwi.zolotek.net Some stuff for OS/2 and Interchange.
--Last updated October 2011. Lyn St George.
Iridium Payment Module for Interchange
September 2010. The Iridium gateway is designed as a replacement for Sagepay, and this module is designed to re-use many of the Sagepay parameters to make upgrading relatively painless. It uses three separate gateway entry points with hot-replication for redundancy. Includes 3DSecure, ie, Verified by Visa and Mastercard Securecode.
Iridium.pm

SagePay payment module for Interchange
August 2010, v0.8.9. 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
January 2011, v1.0.8, fix for yet another variation in the way that Paypal handle Canadian province names. So we have 'British Columbia', 'BC', and now 'B.C.' formats. Also, a patch to allow use of the [assign] tag in shipping; a patch to allow 'use_billing_override' to send billing addresses; and a patch to display Long rather than Short PayPal error message to customers (last three contributed by Josh Lavin). Also fix for multiple error messages and delivery names when changed at Paypal.
Full documentation is in the head.

PaypalExpress.pm  

GoogleCheckout payment module for Interchange
September 2009, v0.7.3. 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. This includes options to add bothe IC and GCO order numbers to the emailed report, along with various other tweaks. 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 may be added into a future version however. All configuration options are documented in the head of the module.

GoogleCheckout.pm  

Moneris payment module for Interchange
September 2009, v1.1.1. This implements standard payments plus recurring billing for Moneris in Canada - it does not implement either "Interac" or "Verified by Visa". It requires that the classes library is also installed into the same directory as the module.

Moneris.pm | mpgClassesIC.pm

Worldpay payment module for Interchange
September 2009, v1.0.0. This was written by Andy Smith of tvcables.co.uk, and kindly donated to Interchange. It handles callbacks from Worldpay and updates the database and inventory accordingly.

Worldpay.pm
Shipping tags for Interchange

RoyalMail: royalmail_update.tag creates a database from the text file found here, of all modes include BFPO.
royalmail.tag reads the database.

royalmail.tag | royalmail_update.tag | rmtariffs.txt

ParcelForce: parcelforce_update.tag creates and/or updates a database from the csv file provided annually by Parcelforce. It will create the configuration files and update shipping.asc as well.
parcelforce.tag reads the database created by the parcelforce_update.tag.
parcelforce_track.tag tracks shipping consignments for both Parcelforce and the Royal Mail.

parcelforce.tag | parcelforce_update.tag | parcelforce_track.tag

Interparcel: this company essentially acts as an umbrella for a number of shipping companies in the UK: UPS, Fedex, DHL, TNT, DPD, Yodel, CityLink, Hermes, and have quite good rates. The interparcel_update.tag creates and/or updates a database by querying their rates server. The database is then read with the interparcel.tag, which can optionally get live rates if you want. interparcel_track.tag uses the tracking number supplied by Interparcel.

interparcel.tag | interparcel_update.tag | interparcel_track.tag

USPS: this is an update to the usps_query.tag, which uses XML::Simple and also returns all the customs information provided by USPS.
The usps_update.tag will create a database of all non-US destinations (zip codes are required for the US), including customs information.
The usps_db.tag will read this database, and return both the shipping rate and customs information.
The usps_track.tag will return a nicely formatted box of all current tracking information

usps_query.tag | usps_update.tag | usps_db.tag | usps_track.tag

UPS: this is a tracking tag.

ups_track.tag
Usertags and other stuff 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
Schedule 'at' tag: this hands IC jobs over to the 'at' daemon to execute, either at some future date specified, or at a specified interval in the future. Eg, if time is '2010:10:20:20:10' then the file will be executed at 20:10 on 20.10.2010 (20th Oct). Or time can be 'now + 1 month'. The file to be executed should run whatever code you want, eg a mass mailing, and the system will handle this without any further impact on IC.
schedule_at.tag
State.txt with entries for all countries within the UK (England, Scotland, Wales plus Northern Ireland), a separate list for Great Britain (ie without Northern Ireland), and entries for these countries and their regions: France, Germany, Spain, Italy, Portugal, New Zealand, Austria, Switzerland
state.txt

 

Co-operation between multiple payment methods

I have rationalised and simplified my 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
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, along with the patched source, the pre-compiled cgi executable, and the patch.
NB: - this badly needs updating to v5.x, but as I don't use OS/2 any more ...

Readme.ic498.os2 | Interchange-4.9.8_os2.zip | Interchange-4.9.6_os2.zip
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