Differences
This shows you the differences between the selected revision and the current version of the page.
development:gateways 2008/08/24 09:46 | development:gateways 2008/10/24 10:06 current | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Payment Gateways ====== | ====== Payment Gateways ====== | ||
+ | Instructions for adding a new payment gateway. All payment gateway code is located in includes/paymentapi/ folder. Inside this folder you will need to create a new folder to house your custom code created below. | ||
===== Config.php ===== | ===== Config.php ===== | ||
Line 15: | Line 16: | ||
</code> | </code> | ||
- | = Item 1 : Definition of item 1. | + | = $data['gateway']['name'] : (string) An internal name and it must not include any spaces. |
- | = Item 2 : Definition of item 2. | + | = $data['gateway']['displayname'] : (string) What will be displayed to the administrator |
- | = : Second definition of item 2. | + | = $data['gateway']['showas'] : (string) What you would like it to showas. Normally this will be Credit Card or something similar. The administrator can always change this. |
- | = Item 3 : Definition of item 3. | + | = $data['gateway']['version'] : (string) Your version number. It is used primarily if you are going to release it for others. |
- | = Item 4 : | + | = $data['gateway']['extraTxt'] : (string) An extra parameter. For example some gateways require the merchant id which could be entered here. |
- | = Item 5 : | + | = $data['gateway']['extra2Txt'] : (string) An additional extra parameter. It is included in case your gateway requires two forms of authentication. |
- | = Item 6 : Definition of items 4 through 6. | + | = $data['gateway']['cconsite'] : (string) This variable is either Y or N. Y means you are going to take the credit card on site and the site must have an SSL certificate installed. N means the gateway will handle this. |
+ | |||
+ | ===== readme.php ===== | ||
+ | The readme.php file is required so you can add any instructions for using the Payment Gateway. It will be accessible through the administration in a pop up window. | ||
+ | |||
+ | ===== sr.php ===== | ||
+ | The file sr.php or send and receive is used to handle setting up the form and handling the post back. | ||
+ | |||
+ | This file includes two php functions and they are: | ||
+ | - function check_createForm($params) | ||
+ | - function check_processTransaction($params) | ||
+ | |||
+ | These functions include the name of your gateway then the function name. The first portion comes from the $data['gateway']['name'] variable set in the config file. | ||
+ | |||
+ | So if you named your gateway "kingarthur" then your functions would be: | ||
+ | - function kingarthur_createForm($params) | ||
+ | - function kingarthur_processTransaction($params) | ||
+ | |||
+ | These methods are used by the core files to tell the difference from each gateway. | ||
+ | |||
+ | Now that the function names are out of the way we will move on to the $params array that is passed to the functions. | ||
+ | |||
+ | ==== Create Form ==== | ||
+ | |||
+ | The createform function has these available $params. | ||
+ | |||
+ | * $params['oID'] - Order ID | ||
+ | * $params['extra'] - The extra info | ||
+ | * $params['extra2'] - The second extra info | ||
+ | * $params['oProduct'] - The product name ordered | ||
+ | * $params['oTotal'] - The total price | ||
+ | * $params['userinfo'] ? An array of all the users details. | ||
+ | |||
+ | If you wish to see all of the available params you can add the following php inside the function: | ||
+ | <code php>print_r($params); die;</code> | ||
+ | Then a list of variables will be printed when you place a test ad. | ||
+ | |||
+ | ==== Process Transaction ==== | ||
+ | |||
+ | The processTransaction function has these available $params. | ||
+ | |||
+ | * $params['gatewayid'] - The id of the gateway | ||
+ | * $params['approved'] - Y or N depending on if it is approved. | ||
+ | * $params['extra'] - The extra data defined in administration | ||
+ | * $params['extra2'] - Same as above. | ||
+ | |||
+ | Plus any others from your Payment Gateway. You will need to refer to their documentation on what they are. | ||
+ | Since the check / money order gateway doesn't include the post back information you will probably need, we will use the processTransaction function from the Paymate gateway: | ||
+ | <code php> | ||
+ | function paymate_processTransaction($params) | ||
+ | { | ||
+ | global $db,$Orders,$userid; | ||
+ | |||
+ | $orderid = (int)@$params['ref']; | ||
+ | switch ($params['responseCode']) | ||
+ | { | ||
+ | case "PA": | ||
+ | $Orders->logTransaction($params['gatewayid'], $orderid, 'Payment is approved', $userid, $params['transactionID'], $params['paymentAmount']); | ||
+ | if($Orders->updateOrder($orderid, 'Y')) | ||
+ | { | ||
+ | return TRUE; | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | //an error occured | ||
+ | return "Payment was made but your order has not been approved. Please contact support for help."; | ||
+ | } | ||
+ | break; | ||
+ | case "PD": | ||
+ | $Orders->logTransaction($params['gatewayid'], $orderid, 'Payment is declined', $userid, $params['transactionID'], $params['paymentAmount']); | ||
+ | return "Payment is declined"; | ||
+ | break; | ||
+ | case "PP": | ||
+ | $Orders->logTransaction($params['gatewayid'], $orderid, 'Payment is processing', $userid, $params['transactionID'], $params['paymentAmount']); | ||
+ | return "Payment is processing"; | ||
+ | break; | ||
+ | default: | ||
+ | $Orders->logTransaction($params['gatewayid'], $orderid, 'An error occured', $userid, $params['transactionID'], $params['paymentAmount']); | ||
+ | return "We are sorry but an occured."; | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Starting from the top we include global $db, $Orders, $userid. I will not go into details what the global does but you can find out from php.net. | ||
+ | |||
+ | Next we have $orderid = (int)@$params['ref']; | ||
+ | |||
+ | The $params['ref'] comes from Paymate and that is the internal reference for 68 Classifieds so it knows what order to approve. | ||
+ | |||
+ | After that comes a switch statement which is the response code Paymate sent. | ||
+ | Through each case we call the logtransaction function so the administrator knows they tried to complete the payment but something happened. | ||
+ | |||
+ | Finally if the order is approved. Paymate uses the PA which I assume means PAID. | ||
+ | |||
+ | We then update the order with this call: | ||
+ | <code php> | ||
+ | if($Orders->updateOrder($orderid, 'Y')) | ||
+ | { | ||
+ | return TRUE; | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | //an error occured | ||
+ | return "Payment was made but your order has not been approved. Please contact support for help."; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | If it returns true then the order was successfully updated if not it returns an error and something happened inside the Orders class to make the order not be updated. | ||
+ | |||
+ | As you can see creating a custom gateway is not a simple process and as such is not supported by us. A lot of things can go wrong and it will take some trial and error getting it setup properly. | ||
+ | |||
+ | ===== External Resources ===== | ||
+ | * [[http://php.net|PHP Website]] | ||
+ | * [[http://www.68classifieds.com/forums|68 Classifieds Forums]] | ||
Have more questions? Visit our community forums.