iPay88 is a leading regional Payment Gateway Provider in South East Asia.
- CakePHP version: 2.5.x
git clone [email protected]:dilab/ipay.git Ipay
composer require dilab/ipay
cake schema create --plugin ipay
-
Copy ipay_config.php to App/Config folder
cp app/Plugin/Ipay/Config/ipay_config_sample.php app/Config/ipay_config.php
-
Open app/Config/ipay_config.php and supply correct information for both merchantKey and merchantCode. Leave rest of info intact.
Ipay.IpayResponse model fires two events below, which you can use to add your business logic.
-
Model.IpayResponse.afterValidResponse: This event is fired when a valid response is sent from iPay88. It checks status and signature fields.
-
Model.IpayResponse.afterSuccessResponse: This event fires only if event above also happens. It re-query iPay88 server to check if it is valid payment.
Model.IpayResponse.afterSuccessResponse should be used to identify a successful payment.
Ipay Plugin comes with backend post by default, it will use this event listener to process
In file app/Controller/AppController.php:
public function beforeFilter()
{
$this->loadModel('Ipay.IpayResponse');
$callback = array($this, 'ipaySuccessResponseCallBack');
$this->IpayResponse->getEventManager()->attach(
$callback,
'Model.IpayResponse.afterSuccessResponse',
array('passParams' => true)
);
}
public function ipaySuccessResponseCallBack($id)
{
// Process your order with your business logic
// Use $id to get the order information from ipay_repsonses table
}
You can use iPay88 to create the a iPay88 payment form, you should always the helper, because it takes care of signature creation.
$data = array(
'RefNo' => 123,
'Amount' => 100.00,
'Currency' => 'USD',
'ProdDesc' => 'Product',
'UserName' => 'test user',
'UserEmail' => '[email protected]',
'UserContact' => '123',
'ResponseURL' => 'http://domain/controller/response_handler',
);
echo $this->Ipay->button($data);
In your response action, simply call Ipay.processPaymentResponse();
, it will take care of all the backend process.
public response_handler()
{
// Your other code
$this->Ipay->processPaymentResponse();
}
cake test Ipay all
cake test Ipay Integration/IpayRequeryIntegration
(Do not run this test as part of your Unit Test as it will send HTTP request to iPay88 server.)
Please use Github Issues to report bugs/issues.
Licensed under The MIT License Redistributions of files must retain the above copyright notice.
Xu Ding