Please read the [Options Hash section of the contributing guide](https://github.com/Shopify/active_merchant/wiki/Contributing#wiki-options-hash). You generally should not make up your own options in the ActiveMerchant options hash given to `authorize`, `purchase` etc, specifically:

* `customerIP` should be `ip`
* `currencyCode` should be `currency`
* `amount` does NOT go in the options hash, but is specified as the first argument to `authorize`, `purchase`, etc
* `postalCode` and `countryCode` should not be here - they should be nested in a billing_address, shipping_address or plain address sub-hash, as per contributing guide.
* Not sure what siteID or offerID are..

etc.

Again - please read the contributing guide and follow it.

Please consider the purpose of the ActiveMerchant library - to provide a common standard interface between multiple gateway implementations, even though the underlying API of each gateway implementation is different. The idea is that anyone using ActiveMerchant should be able to write code against one interface that should largely work for all gateways.

Currently you seem to have confused the options hash being passed into `authorize` et al. with what is passed to the CommerceGate API. The gateway class you are implementing should construct the correct request to the API given the standard options input.

It is the responsibility of the gateway implementation to understand the CommerceGate API, not the ActiveMerchant end user.