Archive for February, 2008

New Article: Integrate the Authorize.Net Recurring Billing API with PHP

Tuesday, February 26th, 2008

We are happy to announce a new article has been published today. Integrate the Authorize.Net Recurring Billing API with PHP is a follow up to our article Integrate the Authorize.net Payment Gateway with PHP. This new article expands upon our original article by explaining how the Authorize.Net recurring billing API works and walks developers through the process of:

  1. Writing a class in PHP that simplifies the Authorize.Net API so it is easier for us to work with
  2. Using that class to establish a recurring billing subscription
  3. Understanding what we need to do to successfully establish a subscription logically

As with our previous articles sample code is included.

So check out Integrate the Authorize.Net Recurring Billing API with PHP and let us know what you think in our Merchant Account Forums.

Flash and Ecommerce

Tuesday, February 19th, 2008

According to Adobe Flash is “…the most advanced authoring environment for creating rich, interactive content for digital, web, and mobile platforms. Create interactive websites, rich media advertisements, instructional media, engaging presentations, games, and more”. Although Flash can be used to create dynamic applications it commonly is used for adding a “WOW” factor to many websites.

While using Flash to deliver your content and manage orders may seem like a great way to make your users’ experience more pleasant it actually can work against you and prevent you from even getting customers in the first place! While Flash may be a method of delivering eye catching content to your website it is not suited to powering websites especially ecommerce websites.

The problems with using Flash for ecommerce include:

  1. Not everyone has a Flash player installed on their computer

    Adobe claims that Flash is installed on 98% of all computers. While that number is very impressive it still is not 100%. That remaining 2% of users who do not have Flash installed will not be able to access your site. Another way to phrase that is to say they will not be able to make purchases from your website. Would any smart business shut out 2% or more of their customer base needlessly when they can use an alternative that lets everybody in?

  2. Flash is not very accessible

    While it is true that Flash is more accessible then it used to be, the unfortunate truth of the matter is it still isn’t as accessible as properly written HTML. While this may not be an issue to most users there is a large, and growing, portion of Internet users who have some sort of disability that requires them to access websites differently then many users. Flash, intentionally or not, may prevent some users from being able to access your site. An alternative would be to build a non-Flash-based version of your site for users who cannot use Flash. The problem with this is two fold: not only do you have a second website to maintain which means extra development and maintenance costs but why would you want to have a fully accessible version of your website be an alternative instead of how you deliver your content in the first place?

  3. You lose the power of semantic markup

    In the world of search engine optimization HTML plays a very important role in helping the search engines understand what your pages are about. They can use tags, <h>eading tags, and more to infer what a page about. Basically, if a page’s title or heading contains keywords within them the odds are the page is probably about them in some fashion. If you do not have HTML to markup your content you leave no clues for the search engines to use to determine the importance of keywords in your content. Do you know any ecommerce site owners who would willingly give up the potential for thousands of not millions of free visitors and potential customers just to use flash when they can have an equally exciting shopping experience using HTML/CSS/JavaScript? </p> </li> <li>You don’t have any anchor text since you don’t have any internal links <p> Expanding on the point above, a huge factor in determine a page’s ranking are links. While this can get complex the part we are concerned about are internal links. Internal links are links on your website’s web pages that link other other pages within your own website. When done properly these links play a very important part in helping search engines determine what a page is about. Once again, because Flash-based website do not use HTML you lack these internal links. That just kills your site’s rankings in Google and Yahoo. </p> </li> </ol> <p>The short of it is this: if you plan on developing an ecommerce website do not use Flash to deliver your important content. This includes your product information and shopping cart. Stick to proven methods that are not only accessible to the vast majority of users but to the search engines as well. This means using a shopping cart that produces HTML. If you feel a need to use Flash for that “WOW” factor use it to enhance portions of your site that do not deliver important content. This can be internal ads that promote other products on your website or let your users see data you do not want or cannot be viewed by the search engines like the products a customer has placed in their shopping cart (search engines cannot view this because they aren’t looking over your customers’ shoulder while they shop!)<!--3170e5aa5d68c8407365e413ae17f23d--></p> </div> <p class="postmetadata"> Posted in <a href="/blog/category/ecommerce/" title="View all posts in Ecommerce" rel="category tag">Ecommerce</a> | <a href="/blog/flash-and-ecommerce/#respond" title="Comment on Flash and Ecommerce">No Comments »</a></p> </div> <div class="post-113 post hentry category-gateways category-programmers-toolbox"> <h3 id="post-113"><a href="/blog/authorizenet-releases-new-customer-information-manager-api/" rel="bookmark" title="Permanent Link to Authorize.Net Releases New Customer Information Manager API">Authorize.Net Releases New Customer Information Manager API</a></h3> <small>Thursday, February 7th, 2008</small> <div class="entry"> <p>Recently <a href="http://www.authorize.net" rel="nofollow">Authorize.Net</a> released their <acronym title="Application Programming Interface">API</acronym> for their new Customer Information Manager (<acronym title="Customer Information Manager">CIM</acronym>) feature of their payment gateway. This feature is a boon for merchants who wish to store credit card information or do recurring billing in different amounts or varied schedules.</p> <p>The main features of this new service are:</p> <ul> <li><b><acronym title="Payment Card Industry">PCI</acronym> Compliance</b> <p> Remove the specter of <acronym title="Payment Card Industry">PCI</acronym> compliance from your ecommerce website by letting Authorize.Net handle the storing of sensitive information for you. Because your customers’ information reside on the Authorize.Net servers you do not have to worry about encrypting and protecting sensitive data. Not only do not have to worry about <acronym title="Payment Card Industry">PCI</acronym> compliance but your website is no longer an inviting target for hackers who want to steal this information from you. </p> </li> <li><b>Process Irregularly Priced Recurring Billing Charges</b> <p> The Authorize.Net Automated Recurring Billing System is great for businesses that charge a fixed amount each billing period. But it does not work if you have a varying amount to charge during each billing period. <acronym title="Customer Information Manager">CIM</acronym> allows your website to handle the varying billing amounts and <acronym title="Customer Information Manager">CIM</acronym> will handle the storage of the billing information and processing of the recurring transaction. Now your recurring payments can be completely automated. </p> </li> <li><b>Process Irregularly Scheduled Recurring Billing Charges</b> <p> Do you need to charge your customers on a recurring basis but the schedule is not consistent? With <acronym title="Customer Information Manager">CIM</acronym> you can store the credit card and billing information with Authorize.Net and only need to handle the actual scheduling of the payments. This allows you to automate the entire process reducing your costs and time spent processing payments. </p> </li> <li><b>Create A “One Click” Checkout</b> <p> Creating a quick and easy checkout system is an important feature of any successful ecommerce website. Allowing your customers to store their data so they do not have to enter it again the next time they make a purchase can make shopping at your online store more appealing then your competitors’. With <acronym title="Customer Information Manager">CIM</acronym> you can provide this functionality for your customers and increase customer satisfaction and loyalty. </p> </li> </ul> <p>Naturally we created our own class to access their <acronym title="Customer Information Manager">CIM</acronym> <acronym title="Application Programming Interface">API</acronym>. This <acronym title="Application Programming Interface">API</acronym>, as well as the potential functionality of this service is complex, but here are a couple of examples to get you started in using this new service.</p> <p>Here’s how to create a new <acronym title="Customer Information Manager">CIM</acronym> account:</p> <p><code><br /> try<br /> {<br /> require_once("AuthnetCIM.class.php");<br /> <br /> $cim = new AuthnetCIM();<br /> $cim->setParameter('company', 'Fake Cpmpany');<br /> $cim->setParameter('cardNumber', '4111111111111111');<br /> $cim->setParameter('expirationDate', '2008-12');<br /> $cim->setParameter('firstName', 'Joseph');<br /> $cim->setParameter('lastName', 'Faker');<br /> $cim->setParameter('address', '100 Main Street');<br /> $cim->setParameter('city', 'Townville');<br /> $cim->setParameter('state', 'NY');<br /> $cim->setParameter('zip', '12345');<br /> $cim->setParameter('country', 'US');<br /> $cim->setParameter('phoneNumber', '111-111-1111');<br /> $cim->setParameter('faxNumber', '222-222-2222');<br /> $cim->setParameter('shipFirstName', 'Joseph');<br /> $cim->setParameter('shipLastName', 'Faker');<br /> $cim->setParameter('shipCompany', 'Fake Cpmpany.');<br /> $cim->setParameter('shipAddress', '100 Main Street');<br /> $cim->setParameter('shipCity', 'Townville');<br /> $cim->setParameter('shipState', 'NY');<br /> $cim->setParameter('shipZip', '12345');<br /> $cim->setParameter('shipCountry', 'US');<br /> $cim->setParameter('shipPhoneNumber', '333-333-3333');<br /> $cim->setParameter('shipFaxNumber', '444-444-4444');<br /> $cim->setParameter('description', 'Monthly Membership and stuff again' . time());<br /> $cim->setParameter('merchantCustomerId', 'user04');<br /> <br /> $cim->CreateCustomerProfile();<br /> $profile_id = $cim->getProfileID();<br /> }<br /> catch (AuthnetCIMException $e)<br /> {<br /> $debug = $e->getTrace();<br /> die(”Exception occurred: ” . $e->getMessage() . “. File: ” .<br /> $debug[0][’file’] . ” on line ” . $debug[0][’line’]);<br /> }<br /> </code></p> <p>Here’s how to add a new profile to that new account:</p> <p><code><br /> $cim->setParameter('customerProfileId', $profile_id);<br /> $cim->setParameter('firstName', 'Joseph');<br /> $cim->setParameter('lastName', 'Faker');<br /> $cim->setParameter('address', '100 Main Street');<br /> $cim->setParameter('city', 'Townville');<br /> $cim->setParameter('state', 'NY');<br /> $cim->setParameter('zip', '12345');<br /> $cim->setParameter('country', 'US');<br /> $cim->setParameter('phoneNumber', '111-111-1111');<br /> $cim->setParameter('faxNumber', '222-222-2222');<br /> $cim->setParameter('cardNumber', '4111111111111111');<br /> $cim->setParameter('expirationDate', ' 2024 -12');<br /> <br /> $cim->createCustomerPaymentProfile();<br /> $payment_profile_id = $cim->getPaymentProfileId();<br /> </code></p> <p>Here’s how to add a shipping address to that account:</p> <p><code><br /> $cim->setParameter('customerProfileId', $profile_id);<br /> $cim->setParameter('firstName', 'Joseph');<br /> $cim->setParameter('lastName', 'Faker');<br /> $cim->setParameter('address', '101 Main Street');<br /> $cim->setParameter('city', 'Townville');<br /> $cim->setParameter('state', 'NY');<br /> $cim->setParameter('zip', '12345');<br /> $cim->setParameter('country', 'US');<br /> $cim->setParameter('phoneNumber', '111-111-1111');<br /> $cim->setParameter('faxNumber', '222-222-2222');<br /> <br /> $cim->createCustomerShippingAddress();<br /> $address_id = $cim->getCustomerAddressId();<br /> </code></p> <p>Here’s how to process a transaction with that new account:</p> <p><code><br /> $cim->setParameter('amount', '1.00');<br /> $cim->setParameter('shipAmount', '1.00');<br /> $cim->setParameter('shipName', 'UPS');<br /> $cim->setParameter('shipDescription', 'UPS Ground');<br /> $cim->setParameter('customerProfileId', $profile_id);<br /> $cim->setParameter('customerPaymentProfileId', $profile_id);<br /> $cim->setParameter('customerShippingAddressId', $address_id);<br /> $cim->setParameter('cardCode', '123');<br /> $cim->setLineItem('12', 'test item', 'it lets you test stuff', '1', '1.00');<br /> <br /> $cim->createCustomerProfileTransaction();<br /> echo 'approval code: ' . $cim->getAuthCode();<br /> </code></p> <p>Hopefully this is enough to get you started in accessing the Authorize.Net Customer Information Manager <acronym title="Application Programming Interface">API</acronym>. You can be sure an article will follow that will go into further detail about using this feature and <acronym title="Application Programming Interface">API</acronym>.</p> <p>They offer two distinct APIs for using this new service. One uses their new XML <acronym title="Application Programming Interface">API</acronym> and the other uses <acronym title="Simple Object Access Protocol">SOAP</acronym>. You can <a href="http://www.authorize.net/support/CIM_XML_guide.pdf" rel="nofollow">download the XML PDF</a><img src="/images/pdf.gif" alt="PDF" align="absmiddle" /> or <a href="http://www.authorize.net/support/CIM_SOAP_guide.pdf" rel="nofollow">SOAP PDF</a> of their integration guide from your control panel. You can find an <a href="http://developer.authorize.net/dscode/php_cim.zip" rel="nofollow">example of PHP code</a> using the <acronym title="Simple Object Access Protocol">SOAP</acronym> <acronym title="Application Programming Interface">API</acronym> in their developer section of their website. So far there is no code for the XML <acronym title="Application Programming Interface">API</acronym>.</p> <p>You can download a beta version of our <a href="/download/cim.zip">Authorize.Net Customer Information Manager Class</a> here. It is written in PHP 5 but can easily be converted to PHP 4 (but why would you want to?). This class has not been tested in a production environment yet so it may be buggy. If you find a bug please report it here so we can update it accordingly.</p> </div> <p class="postmetadata"> Posted in <a href="/blog/category/processing-methods/gateways/" title="View all posts in Payment Gateways" rel="category tag">Payment Gateways</a>, <a href="/blog/category/programmers-toolbox/" title="View all posts in Programmers Toolbox" rel="category tag">Programmers Toolbox</a> | <a href="/blog/authorizenet-releases-new-customer-information-manager-api/#comments" title="Comment on Authorize.Net Releases New Customer Information Manager API">7 Comments »</a></p> </div> <div class="navigation"> <div class="alignleft"></div> <div class="alignright"></div> </div> </div> <div id="sidebar" role="complementary"> <ul> <li> <form method="get" id="searchform" action="/blog/"> <input type="text" value="" name="s" id="s" /> <input type="submit" id="searchsubmit" value="Go" /> </form> </li> <!-- Author information is disabled per default. Uncomment and fill in your details if you want to use it. <li><h2>Author</h2> <p>A little something about you, the author. Nothing lengthy, just an overview.</p> </li> --> <li> <p>You are currently browsing the <a href="/blog/">Merchant Account Services Blog</a> blog archives for February, 2008.</p> </li> </ul> <ul role="navigation"> <li><h2>Archives</h2> <ul> <li><a href='/blog/2008/05/' title='May 2008'>May 2008</a></li> <li><a href='/blog/2008/03/' title='March 2008'>March 2008</a></li> <li><a href='/blog/2008/02/' title='February 2008'>February 2008</a></li> <li><a href='/blog/ 2023 /09/' title='September 2023 '>September 2023 </a></li> <li><a href='/blog/ 2023 /08/' title='August 2023 '>August 2023 </a></li> <li><a href='/blog/ 2023 /07/' title='July 2023 '>July 2023 </a></li> <li><a href='/blog/ 2023 /06/' title='June 2023 '>June 2023 </a></li> <li><a href='/blog/ 2023 /05/' title='May 2023 '>May 2023 </a></li> <li><a href='/blog/ 2023 /04/' title='April 2023 '>April 2023 </a></li> <li><a href='/blog/ 2023 /03/' title='March 2023 '>March 2023 </a></li> <li><a href='/blog/ 2023 /02/' title='February 2023 '>February 2023 </a></li> <li><a href='/blog/ 2023 /01/' title='January 2023 '>January 2023 </a></li> <li><a href='/blog/ 2023 /12/' title='December 2023 '>December 2023 </a></li> <li><a href='/blog/ 2023 /11/' title='November 2023 '>November 2023 </a></li> <li><a href='/blog/ 2023 /10/' title='October 2023 '>October 2023 </a></li> <li><a href='/blog/ 2023 /09/' title='September 2023 '>September 2023 </a></li> <li><a href='/blog/ 2023 /08/' title='August 2023 '>August 2023 </a></li> <li><a href='/blog/ 2023 /07/' title='July 2023 '>July 2023 </a></li> <li><a href='/blog/ 2023 /06/' title='June 2023 '>June 2023 </a></li> <li><a href='/blog/ 2023 /05/' title='May 2023 '>May 2023 </a></li> <li><a href='/blog/ 2023 /04/' title='April 2023 '>April 2023 </a></li> <li><a href='/blog/ 2023 /03/' title='March 2023 '>March 2023 </a></li> <li><a href='/blog/ 2023 /02/' title='February 2023 '>February 2023 </a></li> <li><a href='/blog/ 2023 /01/' title='January 2023 '>January 2023 </a></li> </ul> </li> <li class="categories"><h2>Categories</h2><ul> <li class="cat-item cat-item-19"><a href="/blog/category/ecommerce/" title="View all posts filed under Ecommerce">Ecommerce</a> (9) <ul class='children'> <li class="cat-item cat-item-20"><a href="/blog/category/ecommerce/shopping-carts/" title="View all posts filed under Shopping Carts">Shopping Carts</a> (1) </li> </ul> </li> <li class="cat-item cat-item-1"><a href="/blog/category/industry-news/" title="View all posts filed under Industry News">Industry News</a> (17) <ul class='children'> <li class="cat-item cat-item-15"><a href="/blog/category/industry-news/american-express/" title="View all posts filed under American Express">American Express</a> (1) </li> <li class="cat-item cat-item-14"><a href="/blog/category/industry-news/discover-card/" title="View all posts filed under Discover Card">Discover Card</a> (1) </li> <li class="cat-item cat-item-16"><a href="/blog/category/industry-news/visa-and-mastercard/" title="View all posts filed under Visa and MasterCard">Visa and MasterCard</a> (5) </li> </ul> </li> <li class="cat-item cat-item-2"><a href="/blog/category/merchant-accounts/" title="View all posts filed under Merchant Accounts">Merchant Accounts</a> (42) <ul class='children'> <li class="cat-item cat-item-17"><a href="/blog/category/merchant-accounts/rates-fees/" title="View all posts filed under Rates & Fees">Rates & Fees</a> (2) </li> <li class="cat-item cat-item-7"><a href="/blog/category/merchant-accounts/third-party-processors/" title="View all posts filed under Third Party Processors">Third Party Processors</a> (11) </li> </ul> </li> <li class="cat-item cat-item-8"><a href="/blog/category/processing-methods/" title="View all posts filed under Processing Methods">Processing Methods</a> (21) <ul class='children'> <li class="cat-item cat-item-9"><a href="/blog/category/processing-methods/credit-card-terminals/" title="View all posts filed under Credit Card Terminals">Credit Card Terminals</a> (2) </li> <li class="cat-item cat-item-10"><a href="/blog/category/processing-methods/gateways/" title="View all posts filed under Payment Gateways">Payment Gateways</a> (18) </li> </ul> </li> <li class="cat-item cat-item-18"><a href="/blog/category/programmers-toolbox/" title="View all posts filed under Programmers Toolbox">Programmers Toolbox</a> (16) </li> <li class="cat-item cat-item-13"><a href="/blog/category/site-news/" title="View all posts filed under Site News">Site News</a> (12) </li> </ul></li> </ul> <ul> </ul> </div> <hr /> <div id="footer" role="contentinfo"> <!-- If you'd like to support WordPress, having the "powered by" link somewhere on your blog is the best way; it's our only promotion or advertising. --> <p> Merchant Account Services Blog is proudly powered by <a href="http://wordpress.org/">WordPress</a> <br /><a href="/blog/feed/">Entries (RSS)</a> and <a href="/blog/comments/feed/">Comments (RSS)</a>. <!-- 17 queries. 0.220 seconds. --> </p> </div> </div> <!-- Gorgeous design by Michael Heilemann - http://binarybonsai.com/kubrick/ --> <script src="http://stats.wordpress.com/e-201001.js" type="text/javascript"></script> <script type="text/javascript"> st_go({blog:'8094692',v:'ext',post:'0'}); var load_cmc = function(){linktracker_init(8094692,0,2);}; if ( typeof addLoadEvent != 'undefined' ) addLoadEvent(load_cmc); else load_cmc(); </script> </body> </html>