Authorize.Net Integration with CakePHP

I did not expect it to be this easy to integrate. All I did was download the sdk for AIM method in authorize.net official site under developer section. You need to create a test account with the site and get the api login id and transaction id using which you can test the account.

--> Unzip the zip file copy the entire folder into your_project/app/controller/component/  folder.
--> Copy the lib folder, Authorize.Net.php file into the component folder, instead of having the entire thing into this folder "anet_php_sdk"
--> Now rename the AuthorizeNet.php to authorize_net.php and modify the class name to

class AuthorizeNetComponent extends Object

instead of  Exception class.

Now write a function for ex. validate_card() which accepts two parameters that is your login id and transaction id.

Here is how your class in authorize_net.php should look like

class AuthorizeNetComponent extends Object
{
    function validate_card($loginid=null,$trankey=null)
    {
        $transaction = new AuthorizeNetAIM($loginid, $trankey);
        $transaction->amount = '9.99';
        $transaction->card_num = '4007000000027';
        $transaction->exp_date = '10/16';
        //$transaction->cardholder_authentication_value = '778';
       
        return $transaction->authorizeAndCapture();
    }
}

In your controller, include another Component to your var $component list which is AuthorizeNet.

And now write another function which should look like this.

    function testauth()
    {
        $response = $this->AuthorizeNet->validate_card('YOUR_API_LOGIN_ID', 'YOUR_TRANSACTION_KEY'
);
       
        if ($response->approved) {
              echo "<h1>Success! The test credit card has been charged!</h1>";
              echo "Transaction ID: " . $response->transaction_id;
        } else {
              echo $response->error_message;
        }
    }

Thats it in your browser now call this action: http://localhost/your_controller/testauth

And you should see success message if you use the same card details, change a bit and see if it says success or failure.

You can either add parameters to the function validate_card to send in the card details etc., Or send as an array or have public variables in the AuthorizeNet class and use them to set the values from your form. You can use any method to integrate this payment method.

Empty password in Login form submission using Auth Component

I faced this couple of times. I go mad when I am working with Auth component and I wonder why the password is being sent as a blank one. I did not investigate into it completely but one thing that you need to do for sure is to remove the security salt value in cakephp core.php file. Then it works fine. I have to work with changing the hashing method too. I will modify this post after gaining complete knowledge about it.

Cakephp .htaccess problem (Internal Server Error)

I came across this Internal Server Error twice in my experience while working with cakephp. Once it was due to the database.php file, which was not modified after uploading. It was still referring to localhost db with login credentials. After I modified that it worked fine, was pretty easy.

But the second time, when I hit with this problem, I had to work for half a day to find a solution to this. This time it was because of the .htaccess file. This is what I had to do:
<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^$ /app/webroot/    [L]
   RewriteRule    (.*) /app/webroot/$1 [L]
</IfModule>

I had to add a  '/' before the app folder. And similarly in the webroot folder I had to add a '/' in front of index.php file. This will work fine if you have only one app folder. But the next problem I had to face was, that I had another app folder which was renamed to admin for admin side scripts and it was sharing the same cake folder. This is how I had to fix this problem:

In the app folder I had one .htaccess file with the following piece of code:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$    /admin/webroot/    [L]
    RewriteRule    (.*) /admin/webroot/$1    [L]
 </IfModule>

And under webroot I had another .htaccess file with this following piece of code:
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$    /admin/webroot/index.php?url=$1 [QSA,L]
</IfModule>

This was good enough for my site to be up and running. Later I was hit by another problem which was:

I had a login form, and after login, it has to redirect to a page. During the process it was giving a 200 OK error and showing the source code of the file instead of executing it. As far as I understood, the redirect in cakephp was trying to find in the cache (as cake is famous for its strong caching), and failing to find the file. So, I removed the $this->redirect tag and instead wrote header() function of PHP and it worked. Voila, I am writing all this for my sake and for others who may hit with similar kind of problems.



About this blog

This blog is all about PHP and related frameworks. It reveals my little experiences, the challenges I faced in my career, my explorations and my innovations. I hope it benefits me and others too who might face these challenges in their career. Have a nice time reading the blog. Enjoy.

About Me

Hi, my name is Hima. I am an experienced programmer in PHP and related frameworks. I live in Hyderabad, India.
Copyright © 2010 - My PHP Tips & Tutorials. Powered by Blogger.. Powered by Blogger.