<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>USBSwiper</title>
	<atom:link href="http://www.usbswiper.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.usbswiper.com/blog</link>
	<description>Updated News and Information</description>
	<pubDate>Wed, 10 Jun 2009 17:57:09 +0000</pubDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Learn the Truth about Merchant Rates when Processing Credit Cards</title>
		<link>http://www.usbswiper.com/blog/2009/06/10/learn-the-truth-about-merchant-rates-when-processing-credit-cards/</link>
		<comments>http://www.usbswiper.com/blog/2009/06/10/learn-the-truth-about-merchant-rates-when-processing-credit-cards/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 14:17:31 +0000</pubDate>
		<dc:creator>Andrew Angell</dc:creator>
		
		<category><![CDATA[Credit Cards]]></category>

		<category><![CDATA[credit card fees]]></category>

		<category><![CDATA[flat rate fees]]></category>

		<category><![CDATA[merchant fees]]></category>

		<category><![CDATA[merchant processing fees]]></category>

		<category><![CDATA[non-qualified transactions]]></category>

		<category><![CDATA[point of sale fees]]></category>

		<category><![CDATA[qualifed vs. non-qualified]]></category>

		<category><![CDATA[qualified transactions]]></category>

		<guid isPermaLink="false">http://www.usbswiper.com/blog/?p=71</guid>
		<description><![CDATA[Learn how you can save money with USBSwiper featuring PayPal as your credit card merchant with flat rate transaction fees!]]></description>
			<content:encoded><![CDATA[<h3><a href="http://www.usbswiper.com">USBSwiper</a> Means No More Tears From Tiered Rates</h3>
<p>When it comes to base credit-card processing fees, old  adages like &#8220;look before you leap&#8221; and &#8220;caveat emptor&#8221;  (buyer beware) come to mind. That&#8217;s because things aren&#8217;t quite as  straightforward as you may think when a seemingly super-low base percentage  rate is being dangled before your eyes. An irresistibly attractive base rate  of, say, 1.8% can suddenly become 3.5% - 4% if certain conditions aren&#8217;t met.  And bingo! There goes another chunk of your bottom line.</p>
<p>The reason? Tiered rate structures that Merchant Credit Card  Processors use apply increasingly higher percentage fees to<em> mid-qualified</em> and<em> non-qualified</em> transactions. And if you don&#8217;t look before you leap and buy  with a wary eye you&#8217;ll find yourself in a situation like the one another old  adage warns about: &#8220;marry in haste, repent in leisure.&#8221;</p>
<p>Or you can protect yourself up front from the tyranny of  tiered rates, and keep more profit in your pocket, with the USBSwiper card  payment processing system featuring PayPal as your credit merchant.</p>
<p>But to understand that, you need to understand how tiered  rates work.</p>
<p><strong>Up to 40% of Your  Transactions Automatically Won&#8217;t Qualify for the Provider&#8217;s Lowest Rate</strong></p>
<p>Did you know that even though you swipe every customer&#8217;s  card and obtain every customer&#8217;s signature and batch every transaction within  24 hours, up to 40% of the fees you pay will still fall under the higher, mid  or non-qualified rate? For the simple reason that up to 40% of your customers  will be using rewards-type credit cards, and rewards-type credit cards  automatically generate a mid-qualified or non-qualified transaction rate.</p>
<p>After all, someone has to pay for the sky miles,  merchandise-redemption points, cash-back allowances, and other goodies that  those cards provide. And that someone is you.</p>
<p><strong>Qualified vs.  Mid-Qualified vs. Non-Qualified Transactions</strong></p>
<p>The following table lists conditions typically attached to  three-tier pricing; specific conditions will vary by card provider. Take a look  at how easy it can be to incur higher fees for mid- and non-qualified  transactions.  These are the kinds of &#8220;gotchas&#8221; you&#8217;re probably not going to hear about up front from a card merchant who&#8217;s trying to lock you into a contract with what seems like a fantastic base rate. Only later, when it&#8217;s too late to back out, will those significantly higher mid-qualified and non-qualified rates rear their ugly heads.</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td colspan="2" width="590" valign="top">
<p align="center">Tier 1:    QUALIFIED TRANSACTION</p>
</td>
</tr>
<tr>
<td width="295" valign="top">
<p align="center">Retail    Merchant</p>
</td>
<td width="295" valign="top">
<p align="center">Mail Order,    Telephone Order, Internet</p>
</td>
</tr>
<tr>
<td width="295" valign="top">
<ul>
<li>Regular    credit/debit card (excludes rewards, business, international, and government    types)</li>
<li>Card successfully    swiped through or otherwise read by the terminal in the normal manner</li>
<li>Cardholder&#8217;s    signature obtained at the time of sale</li>
<li>Only one    electronic authorization request</li>
<li>Authorization    amount matches deposit amount</li>
<li>Standard    retail industry coding for authorization and settlement</li>
<li>Transaction    batch-transmitted within one day of authorization date</li>
</ul>
</td>
<td width="295" valign="top">
<ul>
<li>Only one    electronic authorization request, including cardholder&#8217;s street address and    ZIP code verification</li>
<li>Transaction    date matches shipping date</li>
<li>Transaction/shipping    date no more than 7 days after authorization date</li>
<li>Settled    amount matches authorized amount</li>
<li>Settled    transaction includes merchant&#8217;s customer-service telephone number, order    number, and total authorized amount</li>
<li>Settled    transaction includes sales tax and unique coding for commercial (business)    cardholder</li>
<li>Authorization    response data included in settled transaction</li>
<li>Transaction    batch-transmitted within one day of authorization date</li>
</ul>
</td>
</tr>
<tr>
<td colspan="2" width="590" valign="top">
<p align="center">Tier 2:    MID-QUALIFIED TRANSACTION</p>
</td>
</tr>
<tr>
<td width="295" valign="top">
<ul>
<li>Rewards-type    card</li>
<li>Business,    corporate, international, government card</li>
<li>Card data    keyed (not swiped) into terminal</li>
<li>Other    qualified condition(s) not met</li>
</ul>
</td>
<td width="295" valign="top">
<ul>
<li>Rewards-type    card</li>
</ul>
</td>
</tr>
<tr>
<td colspan="2" width="590" valign="top">
<p align="center">Tier 3:    NON-QUALIFIED TRANSACTION</p>
</td>
</tr>
<tr>
<td width="295" valign="top">
<ul>
<li>One or more    qualified conditions not met</li>
<li>Extra-generous    rewards type card</li>
<li>Card data    keyed (not swiped) into terminal</li>
<li>Transaction    batch-transmitted more than one day after authorization date</li>
<li>Business/corporate    card transaction does not include all required additional information</li>
</ul>
</td>
<td width="295" valign="top">
<ul>
<li>One or more    qualified conditions not met</li>
<li>Extra-generous    rewards-type card</li>
<li>Transaction    not electronically authorized</li>
<li>Authorization    response date not included in settled transaction</li>
<li>Transaction    batch-transmitted more than one day after authorization date</li>
<li>Business/corporate    card transaction does not include all required additional information</li>
<li>American    Express and Discover Cards</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><strong>No Pain, Much Gain  With <a href="http://www.usbswiper.com">USBSwiper</a></strong></p>
<p>With the <a href="http://www.usbswiper.com">USBSwiper</a> credit card reader and payment processing  software, there&#8217;s no such thing as a mid-qualified or non-qualified  transaction. One flat rate based solely on monthly volumes will help keep your  costs lower and more predictable. Remember: a merchant account provider will  quote you the lowest transaction rate to get your business; however, it&#8217;s a  good bet that at least half your monthly card transactions will not qualify for  that attractive rate, but will generate much higher fees.</p>
<p>The graph illustrates the potential impact on your annual  costs, based on $50,000 in monthly credit-card transactions.</p>
<p><img src="http://www.usbswiper.com/images/qualified-vs-non-qualified.gif" alt="" width="602" height="622" /></p>
<h2><a href="http://www.usbswiper.com/get-started.php">Get Started Today</a></h2>
]]></content:encoded>
			<wfw:commentRss>http://www.usbswiper.com/blog/2009/06/10/learn-the-truth-about-merchant-rates-when-processing-credit-cards/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MassRefunds.com Provides Easy Management PayPal Refunds</title>
		<link>http://www.usbswiper.com/blog/2008/12/31/massrefundscom-provides-easy-management-paypal-refunds/</link>
		<comments>http://www.usbswiper.com/blog/2008/12/31/massrefundscom-provides-easy-management-paypal-refunds/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 08:20:48 +0000</pubDate>
		<dc:creator>Andrew Angell</dc:creator>
		
		<category><![CDATA[eBay / PayPal]]></category>

		<category><![CDATA[paypal]]></category>

		<category><![CDATA[paypal payments pro]]></category>

		<category><![CDATA[refund]]></category>

		<category><![CDATA[refunds]]></category>

		<guid isPermaLink="false">https://www.usbswiper.com/blog/?p=48</guid>
		<description><![CDATA[MassRefunds is a internet based software application that will allow you to issue multiple refunds from your PayPal account.You can also search your PayPal transaction history and view transaction details ]]></description>
			<content:encoded><![CDATA[<p>Adib Motiwala, a certified PayPal developer, has recently introduced an interesting tool that provides a robust toolset for issuing refunds out of a PayPal account.  The web-based application allows you to issue single or multiple refunds from your account which can save valuable time in your week.</p>
<p><strong>Why MassRefunds.com?</strong></p>
<p>PayPal provides a transaction history where you can easily look up a single transaction and submit a refund.  However, if you ever find yourself with a list of refunds that you need to issue it can be very time consuming searching through your history in PayPal to find each individual transaction and process the refund.  With <a href="http://www.massrefunds.com" target="_blank">MassRefunds.com</a> you can easily compile a list of transactions that need refunded and take care of all of them with a single click!</p>
<p><strong>How Does it Work?  What&#8217;s it Cost?</strong></p>
<p>After creating a quick account at the web site you can try the service for 15 days free of charge.  If you decide to continue using the service you will be billed $9.99/mo and you can cancel at any time without any penalties.  Once you&#8217;re up and running simply sign-in to your account where you can easily search for multiple transactions at a time.  You may then provide amounts for each individual transaction in case you only need to do a partial refund on any of them, and you can also leave notes if you choose.  Then, with one click of a button all of the refunds are issued at once!  Stop wasting time with refunds and <a href="http://www.massrefunds.com/paypalDashboard/registration.html" target="_blank">sign-up today</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.usbswiper.com/blog/2008/12/31/massrefundscom-provides-easy-management-paypal-refunds/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to Test PayPal Instant Payment Notification (IPN)</title>
		<link>http://www.usbswiper.com/blog/2008/12/29/how-to-test-paypal-instant-payment-notification-ipn/</link>
		<comments>http://www.usbswiper.com/blog/2008/12/29/how-to-test-paypal-instant-payment-notification-ipn/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 07:16:26 +0000</pubDate>
		<dc:creator>Andrew Angell</dc:creator>
		
		<category><![CDATA[eBay / PayPal]]></category>

		<category><![CDATA[how to test paypal ipn]]></category>

		<category><![CDATA[instant payment notification]]></category>

		<category><![CDATA[ipn]]></category>

		<category><![CDATA[paypal]]></category>

		<guid isPermaLink="false">https://www.usbswiper.com/blog/?p=44</guid>
		<description><![CDATA[Here's a simple procedure for testing PayPal's Instant Payment Notification features to ensure a solid integration.]]></description>
			<content:encoded><![CDATA[<p>Some of the questions I see most in the <a href="http://www.paypaldeveloper.com/pdn/board?board.id=ipn" target="_blank">PayPal developer forum</a> regarding IPN is how to initially configure it and test it. In a previous blog I posted a <a href="https://www.usbswiper.com/blog/2008/12/26/paypal-instant-payment-notification-ipn-php-template/">PHP IPN template</a> that you can use to get passed most of the configuration hurdles. Testing your solution is another story, though. Here are the steps I like to take to ensure flawless IPN integration.</p>
<h2>1 - Local IPN Testing</h2>
<p>The first thing I do is create a local HTML form that consists of hidden fields which resemble the same thing PayPal&#8217;s system would post to my server when an IPN occurs.  Here&#8217;s a sample.</p>
<pre class="brush: html">

&lt;form method=&quot;post&quot; action=&quot;ipn-listener.php&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;mc_gross&quot; value=&quot;500.00&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;custom&quot; value=&quot;test custom data&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;address_status&quot; value=&quot;confirmed&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;item_number1&quot; value=&quot;6&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;item_number2&quot; value=&quot;4&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;payer_id&quot; value=&quot;FW5W7ZUC3T4KL&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;tax&quot; value=&quot;0.00&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;address_street&quot; value=&quot;1234 Rock Road&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;payment_date&quot; value=&quot;14:55 15 Jan 07 2005 PST&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;payment_status&quot; value=&quot;Completed&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;address_zip&quot; value=&quot;12345&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;mc_shipping&quot; value=&quot;0.00&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;mc_handling&quot; value=&quot;0.00&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;first_name&quot; value=&quot;Jason&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;last_name&quot; value=&quot;Anderson&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;mc_fee&quot; value=&quot;0.02&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;address_name&quot; value=&quot;Jason Anderson&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;notify_version&quot; value=&quot;1.6&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;payer_status&quot; value=&quot;verified&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;business&quot; value=&quot;paypal@emailaddress.com&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;address_country&quot; value=&quot;United States&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;num_cart_items&quot; value=&quot;2&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;mc_handling1&quot; value=&quot;0.00&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;mc_handling2&quot; value=&quot;0.00&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;address_city&quot; value=&quot;Los Angeles&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;verify_sign&quot; value=&quot;AlUbUcinRR5pIo2KwP4xjo9OxxHMAi6.s6AES.4Z6C65yv1Ob2eNqrHm&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;mc_shipping1&quot; value=&quot;0.00&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;mc_shipping2&quot; value=&quot;0.00&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;tax1&quot; value=&quot;0.00&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;tax2&quot; value=&quot;0.00&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;txn_id&quot; value=&quot;TESTER&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;payment_type&quot; value=&quot;instant&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;last_name=Borduin&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;payer_email&quot; value=&quot;test@domain.com&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;item_name1&quot; value=&quot;Rubber+clog&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;address_state&quot; value=&quot;CA&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;payment_fee&quot; value=&quot;0.02&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;item_name2&quot; value=&quot;Roman sandal&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;invoice&quot; value=&quot;123456&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;quantity&quot; value=&quot;1&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;quantity1&quot; value=&quot;1&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;receiver_id&quot; value=&quot;5HRS8SCK9NSJ2&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;quantity2&quot; value=&quot;1&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;txn_type&quot; value=&quot;web-accept&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;mc_gross_1&quot; value=&quot;0.01&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;mc_currency&quot; value=&quot;USD&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;mc_gross_2&quot; value=&quot;0.01&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;payment_gross&quot; value=&quot;0.02&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;subscr_id&quot; value=&quot;PP-1234&quot;&gt;
&lt;input name=&quot;test&quot; type=&quot;submit&quot; value=&quot;test&quot;&gt;
&lt;/form&gt;
</pre>
<p>When testing this way, the IPN script will run through your Invalid IPN code because the post did not come from PayPal&#8217;s server. As such, you&#8217;ll need to adjust your IPN script to force a Valid response. If you&#8217;re using my IPN template you can adjust line 56 to&#8230;</p>
<pre class="brush: php">

if(strcmp ($res, &quot;VERIFIED&quot;) == 0 || 1 == 1)
</pre>
<p>Then, simply set the action of the form to your IPN listener and then submit it. This way you&#8217;ll be able to see the on-screen result of your IPN script and can easily troubleshoot any errors that may exist. You can add or remove any fields you&#8217;d like from the test form and you can adjust the names according to what fields you expect to get from the IPN you&#8217;re testing for. Once you&#8217;re able to successfully run your test IPN within a browser without any errors you can remove the forced Validity and move on to the next step.</p>
<h2>2 - PayPal Developer IPN Simulator</h2>
<p>PayPal provides an <a href="http://www.paypaldeveloper.com/t5/PayPal-Developer-Blog/IPN-Simulator/ba-p/81042#A674" target="_blank">IPN Simulator</a> from within your <a href="http://developer.paypal.com" target="_blank">developer account</a>. You can use the simulator to easily send test IPN&#8217;s to your server for a number of different scenarios. At this point you&#8217;ll just need to make sure your IPN script is configured to run on the sandbox servers (see the notes at the top of the IPN template) and then these IPN Simulator posts will validate because they are indeed coming from PayPal&#8217;s server. Once these simulated IPN&#8217;s are working as expected you&#8217;re ready to launch.</p>
<h2>3 - Deploy</h2>
<p>At this point you&#8217;re ready to set your IPN script to production mode instead of sandbox mode and then upload it to your live web server. You can enable IPN within your PayPal profile or you can also include the NotifyURL field in your standard payment buttons or API requests to PayPal.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.usbswiper.com/blog/2008/12/29/how-to-test-paypal-instant-payment-notification-ipn/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Real-Life Example of the Advantage of PayPal&#8217;s Dispute Resolution Center</title>
		<link>http://www.usbswiper.com/blog/2008/12/29/real-life-example-of-the-advantage-of-paypals-dispute-resolution-center/</link>
		<comments>http://www.usbswiper.com/blog/2008/12/29/real-life-example-of-the-advantage-of-paypals-dispute-resolution-center/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 06:43:53 +0000</pubDate>
		<dc:creator>Andrew Angell</dc:creator>
		
		<category><![CDATA[eBay / PayPal]]></category>

		<category><![CDATA[address verification]]></category>

		<category><![CDATA[avs]]></category>

		<category><![CDATA[charge-back]]></category>

		<category><![CDATA[chargeback]]></category>

		<category><![CDATA[cvv2]]></category>

		<category><![CDATA[dispute]]></category>

		<category><![CDATA[dispute resolution]]></category>

		<category><![CDATA[disputes]]></category>

		<category><![CDATA[paypal]]></category>

		<guid isPermaLink="false">https://www.usbswiper.com/blog/?p=41</guid>
		<description><![CDATA[PayPal's Dispute Resolution Center can save you time and money!  Here's one example of how...]]></description>
			<content:encoded><![CDATA[<p>When you use PayPal as your credit card processing merchant you are protected in many different ways. Standard protection such as Address Verification System (AVS) and Credit Card Security Digits (CVV2) are provided and in most cases should be enough to avoid any problems. However, mistakes happen and sometimes merchandise can be shipped when it should not have been. <a href="http://www.paypal.com/cgi-bin/webscr?cmd=xpt/cps/general/PPDisputeResolution-outside" target="_blank">PayPal&#8217;s Dispute Resolution Center</a> can help insure that you will not lose your product in the event of a charge-back due to fraudulant activity. Here&#8217;s one example&#8230;</p>
<p>The only ATM machine near my home for my bank is located inside a local Price Chopper grocery store. I stopped by to get some cash out of my account one day and while in a rush made a very stupid mistake and left my debit card in the ATM machine. I got back home just about 30 minutes later and I realized what I had done. I immediately went back up to the Price Chopper and went to the customer service desk. They had my debit card there for me and gave it back. Whew!</p>
<p>The next day I logged into my online banking just to make sure nothing funny had happened. Sure enough, I discovered a $3,000 charge to a kitchen and bath web site for a bunch of cabinets that was NOT mine! I immediately called my bank and submitted a dispute on the transaction. They gave me a temporary refund of the funds, explained that an investigation would ensue and that it could take up to 90 days before it was completely settled. I asked &#8220;What about this kitchen and bath company? Is anybody going to notify them that this was a fraudulant charge?&#8221; I was insured that yes, they would indeed be informed, but it might not be for weeks.</p>
<p>Well, at this point I was feeling pretty stupid about leaving my debit card in the ATM machine and I was also curious about the seller and who might have done this with my card. I personally called the kitchen &amp; bath company and informed them of the fraudulant transaction. Now, even though I made a dumb mistake and left my card in the machine, this is where the seller messed up. They proceeded to ship the merchandise to an address in New Jersey even though the billing address on the credit card (which was included in the order, apparently) was in the Kansas City area, where I&#8217;m from. This was a big mistake. Had I not personally called to inform the seller that the fraudulant transaction had taken place the merchandie would have reached its destination and the fraudsters could have very well have gotten away with the product. By the time the bank&#8217;s investigation made it back to the seller it would have been too late. The credit card company would then take the funds back from the seller to cover what they put back into my account. Because of the fact that the seller had shipped to an address other than the billing address on the credit card (an AVS mis-match, or as PayPal would call it, and Unconfirmed address) they would not have been covered by any type of seller protection from that credit card merchant. At this point they would have been out their product and the $3,000. Needless to say, they were very pleased that I called and informed them of the problem in time for them to put a stop-shipment on the merchandise and get it routed back to their warehouse. Again, had I not called and informed the seller of this problem they would have had no idea it was fraudulant until the bank contacted them up to 90 days later. With <a href="http://www.paypal.com/cgi-bin/webscr?cmd=xpt/cps/general/PPDisputeResolution-outside" target="_blank">PayPal&#8217;s Dispute Resolution Center</a> this would not have been a problem.</p>
<p>The Dispute Resolution Center is an area of your PayPal account where you can easily manage any disputes/chargebacks that might occur from transactions you have processed. In the example above, if the seller had used PayPal to process the credit card they would have received a new dispute notification when I initially filed the charge-back with my bank. Then, even if I hadn&#8217;t called them to inform them of the problem they would have gotten notification from the PayPal dispute area and would have still had time to put a stop-shipment on the goods. Also, with PayPal&#8217;s new Expanded Seller Protection program the seller may have been eligble even after shipping to the Unconfirmed address. If not, there would have been red flags in the transaction details page within the PayPal account warning the seller not to ship the merchandise without further investigation.</p>
<p>This is just one example of how using PayPal as your merchant processor can save valuable time and keep dispute losses to a minimum.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.usbswiper.com/blog/2008/12/29/real-life-example-of-the-advantage-of-paypals-dispute-resolution-center/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PayPal Instant Payment Notification (IPN) PHP Template</title>
		<link>http://www.usbswiper.com/blog/2008/12/26/paypal-instant-payment-notification-ipn-php-template/</link>
		<comments>http://www.usbswiper.com/blog/2008/12/26/paypal-instant-payment-notification-ipn-php-template/#comments</comments>
		<pubDate>Sat, 27 Dec 2008 03:03:22 +0000</pubDate>
		<dc:creator>Andrew Angell</dc:creator>
		
		<category><![CDATA[eBay / PayPal]]></category>

		<category><![CDATA[instant payment notification]]></category>

		<category><![CDATA[ipn integration]]></category>

		<category><![CDATA[ipn template]]></category>

		<category><![CDATA[paypal]]></category>

		<category><![CDATA[paypal ipn]]></category>

		<guid isPermaLink="false">https://www.usbswiper.com/blog/?p=34</guid>
		<description><![CDATA[Using this PHP template you can easily configure PayPal Instant Payment Notification and get started right away!]]></description>
			<content:encoded><![CDATA[<p><em><strong>NOTE: </strong>This template has been turned into an installable solution available at <a href="http://developer.paypal-portal.com/pdn/board/message?board.id=ipn&amp;thread.id=14078">PayPalDeveloper.com</a>.  The template here will still work fine, but you might like the full solution better.</em></p>
<p>PayPal&#8217;s IPN feature is a great way to easily integrate standard payment buttons or automate back-end procedures for <a href="https://www.paypal.com/us/cgi-bin/webscr?cmd=_wp-pro-overview-outside&amp;pal=M5VRAQYEFCSK6">Payments Pro solutions</a>. While it&#8217;s actually very simple, the process can be confusing when you first begin developing and I&#8217;ve seen people give up before they even truly get started.</p>
<p>The following script is a basic PHP template that handles everything you need to get started with <a href="https://www.usbswiper.com/paypalipn.php">PayPal Instant Payment Notification</a>. There are a couple of simple options at the top of the script for handling test servers and SSL. The template handles verifying the POST data with PayPal&#8217;s servers to ensure it&#8217;s valid and then stores every possible IPN value in PHP variables that are ready for use. If a particular field was not included in the IPN received then it&#8217;s simply populated with an empty value, but it&#8217;s still available within the script.</p>
<p>You can begin at the very bottom and simply do whatever you want with the store data, whether it&#8217;s update a database, format an email and send it to customers, send a text message notification to customers or yourself, etc.</p>
<p>I&#8217;ve also included a SQL file you can  use to easily create database tables for use with PayPal&#8217;s IPN system.  Later I&#8217;ll be completing this entire solution as an easily installed all-in-one package.</p>
<p>Happy scripting!</p>
<pre class="brush: php">

&lt;?php
////////////////////////////////////////////////////////////
// Angell EYE : PayPal IPN Template : 02.01.2009 //////////
//////////////// angelleye.com  //////////////////////
/////////////////////////////////////////////////////////
// PayPal now provides a variable called test_ipn on sandbox IPN&#039;s for simple flagging of sandbox IPN vs. production IPN
$sandbox = isset($_POST[&#039;test_ipn&#039;]) ? true : false;
$ssl = $sandbox ? false : false;
$ppHost = $sandbox ? &#039;www.sandbox.paypal.com&#039; : &#039;www.paypal.com&#039;;

// read the post from PayPal system and add &#039;cmd&#039;
$req = &#039;cmd=_notify-validate&#039;;

// Store each $_POST value in a NVP string: 1 string encoded and 1 string decoded
$IPNDecoded = &#039;&#039;;
foreach ($_POST as $key =&gt; $value)
{
$value = urlencode(stripslashes($value));
$req .= &quot;&amp;amp;$key=$value&quot;;
$IPNDecoded .= $key . &quot; = &quot; . urldecode($value) .&quot;&lt;br /&gt;&lt;br /&gt;&quot;;
}

// post back to PayPal system to validate using SSL or not based on flag set above.
if($ssl)
{
$header = &#039;&#039;;
$header .= &quot;POST /cgi-bin/webscr HTTP/1.0\r\n&quot;;
$header .= &quot;Host: &quot; . $ppHost . &quot;:443\r\n&quot;;
$header .= &quot;Content-Type: application/x-www-form-urlencoded\r\n&quot;;
$header .= &quot;Content-Length: &quot; . strlen($req) . &quot;\r\n\r\n&quot;;
$fp = fsockopen (&#039;ssl://&#039; . $ppHost, 443, $errno, $errstr, 30);
}
else
{
$header = &#039;&#039;;
$header .= &quot;POST /cgi-bin/webscr HTTP/1.0\r\n&quot;;
$header .= &quot;Host: &quot; . $ppHost . &quot;:80\r\n&quot;;
$header .= &quot;Content-Type: application/x-www-form-urlencoded\r\n&quot;;
$header .= &quot;Content-Length: &quot; . strlen($req) . &quot;\r\n\r\n&quot;;
$fp = fsockopen ($ppHost, 80, $errno, $errstr, 30);
}

if (!$fp)
{
$IsValid = false;
}
else
{
// Response from PayPal was good.  Now check to see if it returned verified or invalid.  Simply set $IsValud to true/false accordingly.
fputs ($fp, $header . $req);
while(!feof($fp))
{
$res = fgets ($fp, 1024);
if(strcmp ($res, &quot;VERIFIED&quot;) == 0)
$IsValid = true;
elseif (strcmp ($res, &quot;INVALID&quot;) == 0)
$IsValid = false;
}
fclose ($fp);
}

// Buyer Information
$address_city = isset($_POST[&#039;address_city&#039;]) ? $_POST[&#039;address_city&#039;] : &#039;&#039;;
$address_country = isset($_POST[&#039;address_country&#039;]) ? $_POST[&#039;address_country&#039;] : &#039;&#039;;
$address_country_code = isset($_POST[&#039;address_country_code&#039;]) ? $_POST[&#039;address_country_code&#039;] : &#039;&#039;;
$address_name = isset($_POST[&#039;address_name&#039;]) ? $_POST[&#039;address_name&#039;] : &#039;&#039;;
$address_state = isset($_POST[&#039;address_state&#039;]) ? $_POST[&#039;address_state&#039;] : &#039;&#039;;
$address_status = isset($_POST[&#039;address_status&#039;]) ? $_POST[&#039;address_status&#039;] : &#039;&#039;;
$address_street = isset($_POST[&#039;address_street&#039;]) ? $_POST[&#039;address_street&#039;] : &#039;&#039;;
$address_zip = isset($_POST[&#039;address_zip&#039;]) ? $_POST[&#039;address_zip&#039;] : &#039;&#039;;
$first_name = isset($_POST[&#039;first_name&#039;]) ? $_POST[&#039;first_name&#039;] : &#039;&#039;;
$last_name = isset($_POST[&#039;last_name&#039;]) ? $_POST[&#039;last_name&#039;] : &#039;&#039;;
$payer_business_name = isset($_POST[&#039;payer_business_name&#039;]) ? $_POST[&#039;payer_business_name&#039;] : &#039;&#039;;
$payer_email = isset($_POST[&#039;payer_email&#039;]) ? $_POST[&#039;payer_email&#039;] : &#039;&#039;;
$payer_id = isset($_POST[&#039;payer_id&#039;]) ? $_POST[&#039;payer_id&#039;] : &#039;&#039;;
$payer_status = isset($_POST[&#039;payer_status&#039;]) ? $_POST[&#039;payer_status&#039;] : &#039;&#039;;
$contact_phone = isset($_POST[&#039;contact_phone&#039;]) ? $_POST[&#039;contact_phone&#039;] : &#039;&#039;;
$residence_country = isset($_POST[&#039;residence_country&#039;]) ? $_POST[&#039;residence_country&#039;] : &#039;&#039;;

// Basic Information
$notify_version = isset($_POST[&#039;notify_version&#039;]) ? $_POST[&#039;notify_version&#039;] : &#039;&#039;;
$charset = isset($_POST[&#039;charset&#039;]) ? $_POST[&#039;charset&#039;] : &#039;&#039;;
$business = isset($_POST[&#039;business&#039;]) ? $_POST[&#039;business&#039;] : &#039;&#039;;
$item_name = isset($_POST[&#039;item_name&#039;]) ? $_POST[&#039;item_name&#039;] : &#039;&#039;;
$item_number = isset($_POST[&#039;item_number&#039;]) ? $_POST[&#039;item_number&#039;] : &#039;&#039;;
$quantity = isset($_POST[&#039;quantity&#039;]) ? $_POST[&#039;quantity&#039;] : &#039;&#039;;
$receiver_email = isset($_POST[&#039;receiver_email&#039;]) ? $_POST[&#039;receiver_email&#039;] : &#039;&#039;;
$receiver_id = isset($_POST[&#039;receiver_id&#039;]) ? $_POST[&#039;receiver_id&#039;] : &#039;&#039;;

// Cart Items
$num_cart_items = isset($_POST[&#039;num_cart_items&#039;]) ? $_POST[&#039;num_cart_items&#039;] : &#039;&#039;;

$i = 1;
$cart_items = array();
while(isset($_POST[&#039;item_number&#039; . $i]))
{
$item_number = isset($_POST[&#039;item_number&#039; . $i]) ? $_POST[&#039;item_number&#039; . $i] : &#039;&#039;;
$item_name = isset($_POST[&#039;item_name&#039; . $i]) ? $_POST[&#039;item_name&#039; . $i] : &#039;&#039;;
$quantity = isset($_POST[&#039;quantity&#039; . $i]) ? $_POST[&#039;quantity&#039; . $i] : &#039;&#039;;
$mc_gross = isset($_POST[&#039;mc_gross_&#039; . $i]) ? $_POST[&#039;mc_gross_&#039; . $i] : &#039;&#039;;
$mc_handling = isset($_POST[&#039;mc_handling&#039; . $i]) ? $_POST[&#039;mc_handling&#039; . $i] : &#039;&#039;;
$mc_shipping = isset($_POST[&#039;mc_shipping&#039; . $i]) ? $_POST[&#039;mc_shipping&#039; . $i] : &#039;&#039;;
$custom = isset($_POST[&#039;custom&#039; . $i]) ? $_POST[&#039;custom&#039; . $i] : &#039;&#039;;
$option_name1 = isset($_POST[&#039;option_name1_&#039; . $i]) ? $_POST[&#039;option_name1_&#039; . $i] : &#039;&#039;;
$option_selection1 = isset($_POST[&#039;option_selection1_&#039; . $i]) ? $_POST[&#039;option_selection1_&#039; . $i] : &#039;&#039;;
$option_name2 = isset($_POST[&#039;option_name2_&#039; . $i]) ? $_POST[&#039;option_name2_&#039; . $i] : &#039;&#039;;
$option_selection2 = isset($_POST[&#039;option_selection2_&#039; . $i]) ? $_POST[&#039;option_selection2_&#039; . $i] : &#039;&#039;;

$current_item = array(
&#039;item_number&#039; =&gt; $item_number,
&#039;item_name&#039; =&gt; $item_name,
&#039;quantity&#039; =&gt; $quantity,
&#039;mc_gross&#039; =&gt; $mc_gross,
&#039;mc_handling&#039; =&gt; $mc_handling,
&#039;mc_shipping&#039; =&gt; $mc_shipping,
&#039;custom&#039; =&gt; $custom,
&#039;option_name1&#039; =&gt; $option_name1,
&#039;option_selection1&#039; =&gt; $option_selection1,
&#039;option_name2&#039; =&gt; $option_name2,
&#039;option_selection2&#039; =&gt; $option_selection2
);

array_push($cart_items, $current_item);
$i++;
}

// Advanced and Custom Information
$custom = isset($_POST[&#039;custom&#039;]) ? $_POST[&#039;custom&#039;] : &#039;&#039;;
$invoice = isset($_POST[&#039;invoice&#039;]) ? $_POST[&#039;invoice&#039;] : &#039;&#039;;
$memo = isset($_POST[&#039;memo&#039;]) ? $_POST[&#039;memo&#039;] : &#039;&#039;;
$option_name1 = isset($_POST[&#039;option_name1&#039;]) ? $_POST[&#039;option_name1&#039;] : &#039;&#039;;
$option_selection1 = isset($_POST[&#039;option_selection1&#039;]) ? $_POST[&#039;option_selection1&#039;] : &#039;&#039;;
$option_name2 = isset($_POST[&#039;option_name2&#039;]) ? $_POST[&#039;option_name2&#039;] : &#039;&#039;;
$option_selection2 = isset($_POST[&#039;option_selection2&#039;]) ? $_POST[&#039;option_selection2&#039;] : &#039;&#039;;
$tax = isset($_POST[&#039;tax&#039;]) ? $_POST[&#039;tax&#039;] : &#039;&#039;;

// Website Payments Standard, Website Payments Pro, and Refund Information
$auth_id = isset($_POST[&#039;auth_id&#039;]) ? $_POST[&#039;auth_id&#039;] : &#039;&#039;;
$auth_exp = isset($_POST[&#039;auth_exp&#039;]) ? $_POST[&#039;auth_exp&#039;] : &#039;&#039;;
$auth_amount = isset($_POST[&#039;auth_amount&#039;]) ? $_POST[&#039;auth_amount&#039;] : &#039;&#039;;
$auth_status = isset($_POST[&#039;auth_status&#039;]) ? $_POST[&#039;auth_status&#039;] : &#039;&#039;;

// Fraud Management Filters
$i = 1;
$fraud_management_filters = array();
while(isset($_POST[&#039;fraud_management_filters_&#039; . $i]))
{
$filter_name = isset($_POST[&#039;fraud_management_filter_&#039; . $i]) ? $_POST[&#039;fraud_management_filter_&#039; . $i] : &#039;&#039;;

array_push($fraud_management_filters, $filter_name);
$i++;
}

$mc_gross = isset($_POST[&#039;mc_gross&#039;]) ? $_POST[&#039;mc_gross&#039;] : &#039;&#039;;
$mc_handling = isset($_POST[&#039;mc_handling&#039;]) ? $_POST[&#039;mc_handling&#039;] : &#039;&#039;;
$mc_shipping = isset($_POST[&#039;mc_shipping&#039;]) ? $_POST[&#039;mc_shipping&#039;] : &#039;&#039;;
$mc_fee = isset($_POST[&#039;mc_fee&#039;]) ? $_POST[&#039;mc_fee&#039;] : &#039;&#039;;
$num_cart_items = isset($_POST[&#039;num_cart_items&#039;]) ? $_POST[&#039;num_cart_items&#039;] : &#039;&#039;;
$parent_txn_id = isset($_POST[&#039;parent_txn_id&#039;]) ? $_POST[&#039;parent_txn_id&#039;] : &#039;&#039;;
$payment_date = isset($_POST[&#039;payment_date&#039;]) ? $_POST[&#039;payment_date&#039;] : &#039;&#039;;
$payment_status = isset($_POST[&#039;payment_status&#039;]) ? $_POST[&#039;payment_status&#039;] : &#039;&#039;;
$payment_type = isset($_POST[&#039;payment_type&#039;]) ? $_POST[&#039;payment_type&#039;] : &#039;&#039;;
$pending_reason = isset($_POST[&#039;pending_reason&#039;]) ? $_POST[&#039;pending_reason&#039;] : &#039;&#039;;
$protection_eligibility  = isset($_POST[&#039;protection_eligibility&#039;]) ? $_POST[&#039;protection_eligibility&#039;] : &#039;&#039;;
$reason_code = isset($_POST[&#039;reason_code&#039;]) ? $_POST[&#039;reason_code&#039;] : &#039;&#039;;
$remaining_settle = isset($_POST[&#039;remaining_settle&#039;]) ? $_POST[&#039;remaining_settle&#039;] : &#039;&#039;;
$shipping_method = isset($_POST[&#039;shipping_method&#039;]) ? $_POST[&#039;shipping_method&#039;] : &#039;&#039;;
$shipping = isset($_POST[&#039;shipping&#039;]) ? $_POST[&#039;shipping&#039;] : &#039;&#039;;
$tax = isset($_POST[&#039;tax&#039;]) ? $_POST[&#039;tax&#039;] : &#039;&#039;;
$transaction_entity = isset($_POST[&#039;transaction_entity&#039;]) ? $_POST[&#039;transaction_entity&#039;] : &#039;&#039;;
$txn_id = isset($_POST[&#039;txn_id&#039;]) ? $_POST[&#039;txn_id&#039;] : &#039;&#039;;
$txn_type = isset($_POST[&#039;txn_type&#039;]) ? $_POST[&#039;txn_type&#039;] : &#039;&#039;;
// Currency and Currency Exchange Information
$exchange_rate = isset($_POST[&#039;exchange_rate&#039;]) ? $_POST[&#039;exchange_rate&#039;] : &#039;&#039;;
$mc_currency = isset($_POST[&#039;mc_currency&#039;]) ? $_POST[&#039;mc_currency&#039;] : &#039;&#039;;
$settle_amount = isset($_POST[&#039;settle_amount&#039;]) ? $_POST[&#039;settle_amount&#039;] : &#039;&#039;;
$settle_currency = isset($_POST[&#039;settle_currency&#039;]) ? $_POST[&#039;settle_currency&#039;] : &#039;&#039;;

// Auction Variables
$auction_buyer_id = isset($_POST[&#039;auction_buyer_id&#039;]) ? $_POST[&#039;auction_buyer_id&#039;] : &#039;&#039;;
$auction_closing_date = isset($_POST[&#039;auction_closing_date&#039;]) ? $_POST[&#039;auction_closing_date&#039;] : &#039;&#039;;
$auction_multi_item = isset($_POST[&#039;auction_multi_item&#039;]) ? $_POST[&#039;auction_multi_item&#039;] : &#039;&#039;;
$for_auction = isset($_POST[&#039;for_auction&#039;]) ? $_POST[&#039;for_auction&#039;] : &#039;&#039;;

// Mass Payments
$i = 1;
$mass_payments = array();
while(isset($_POST[&#039;masspay_txn_id_&#039; . $i]))
{
$masspay_txn_id = isset($_POST[&#039;masspay_txn_id_&#039; . $i]) ? $_POST[&#039;masspay_txn_id_&#039; . $i] : &#039;&#039;;
$mc_currency = isset($_POST[&#039;mc_currency_&#039; . $i]) ? $_POST[&#039;mc_currency_&#039; . $i] : &#039;&#039;;
$mc_fee = isset($_POST[&#039;mc_fee_&#039; . $i]) ? $_POST[&#039;mc_fee_&#039; . $i] : &#039;&#039;;
$mc_gross = isset($_POST[&#039;mc_gross_&#039; . $i]) ? $_POST[&#039;mc_gross_&#039; . $i] : &#039;&#039;;
$receiver_email = isset($_POST[&#039;receiver_email_&#039; . $i]) ? $_POST[&#039;receiver_email_&#039; . $i] : &#039;&#039;;
$status = isset($_POST[&#039;status_&#039; . $i]) ? $_POST[&#039;status_&#039; . $i] : &#039;&#039;;
$unique_id = isset($_POST[&#039;unique_id_&#039; . $i]) ? $_POST[&#039;unique_id_&#039; . $i] : &#039;&#039;;

$current_payment_data_set = array(
&#039;masspay_txn_id&#039; =&gt; $masspay_txn_id,
&#039;mc_currency&#039; =&gt; $mc_currency,
&#039;mc_fee&#039; =&gt; $mc_fee,
&#039;mc_gross&#039; =&gt; $mc_gross,
&#039;receiver_email&#039; =&gt; $receiver_email,
&#039;status&#039; =&gt; $status,
&#039;unique_id&#039; =&gt; $unique_id
);

array_push($mass_payments, $current_payment_data_set);
$i++;
}
// Recurring Payments Information
$initial_payment_status = isset($_POST[&#039;initial_payment_status&#039;]) ? $_POST[&#039;initial_payment_status&#039;] : &#039;&#039;;
$initial_payment_txn_id = isset($_POST[&#039;initial_payment_txn_id&#039;]) ? $_POST[&#039;initial_payment_txn_id&#039;] : &#039;&#039;;
$recurring_payment_id = isset($_POST[&#039;recurring_payment_id&#039;]) ? $_POST[&#039;recurring_payment_id&#039;] : &#039;&#039;;
$product_name = isset($_POST[&#039;product_name&#039;]) ? $_POST[&#039;product_name&#039;] : &#039;&#039;;
$product_type = isset($_POST[&#039;product_type&#039;]) ? $_POST[&#039;product_type&#039;] : &#039;&#039;;
$period_type = isset($_POST[&#039;period_type&#039;]) ? $_POST[&#039;period_type&#039;] : &#039;&#039;;
$payment_cycle = isset($_POST[&#039;payment_cycle&#039;]) ? $_POST[&#039;payment_cycle&#039;] : &#039;&#039;;
$outstanding_balance = isset($_POST[&#039;outstanding_balance&#039;]) ? $_POST[&#039;outstanding_balance&#039;] : &#039;&#039;;
$amount_per_cycle = isset($_POST[&#039;amount_per_cycle&#039;]) ? $_POST[&#039;amount_per_cycle&#039;] : &#039;&#039;;
$initial_payment_amount = isset($_POST[&#039;initial_payment_amount&#039;]) ? $_POST[&#039;initial_payment_amount&#039;] : &#039;&#039;;
$profile_status = isset($_POST[&#039;profile_status&#039;]) ? $_POST[&#039;profile_status&#039;] : &#039;&#039;;
$amount = isset($_POST[&#039;amount&#039;]) ? $_POST[&#039;amount&#039;] : &#039;&#039;;
$time_created = isset($_POST[&#039;time_created&#039;]) ? $_POST[&#039;time_created&#039;] : &#039;&#039;;
$next_payment_date = isset($_POST[&#039;next_payment_date&#039;]) ? $_POST[&#039;next_payment_date&#039;] : &#039;&#039;;
$rp_invoice_id = isset($_POST[&#039;rp_invoice_id&#039;]) ? $_POST[&#039;rp_invoice_id&#039;] : &#039;&#039;;

// Subscription Variables
$subscr_date = isset($_POST[&#039;subscr_date&#039;]) ? $_POST[&#039;subscr_date&#039;] : &#039;&#039;;
$subscr_effective = isset($_POST[&#039;subscr_effective&#039;]) ? $_POST[&#039;subscr_effective&#039;] : &#039;&#039;;
$period1 = isset($_POST[&#039;period1&#039;]) ? $_POST[&#039;period1&#039;] : &#039;&#039;;
$period2 = isset($_POST[&#039;period2&#039;]) ? $_POST[&#039;period2&#039;] : &#039;&#039;;
$period3 = isset($_POST[&#039;period3&#039;]) ? $_POST[&#039;period3&#039;] : &#039;&#039;;
$amount1 = isset($_POST[&#039;amount1&#039;]) ? $_POST[&#039;amount1&#039;] : &#039;&#039;;
$amount2 = isset($_POST[&#039;amount2&#039;]) ? $_POST[&#039;amount2&#039;] : &#039;&#039;;
$amount3 = isset($_POST[&#039;amount3&#039;]) ? $_POST[&#039;amount3&#039;] : &#039;&#039;;
$mc_amount1 = isset($_POST[&#039;mc_amount1&#039;]) ? $_POST[&#039;mc_amount1&#039;] : &#039;&#039;;
$mc_amount2 = isset($_POST[&#039;mc_amount2&#039;]) ? $_POST[&#039;mc_amount2&#039;] : &#039;&#039;;
$mc_amount3 = isset($_POST[&#039;mc_amount3&#039;]) ? $_POST[&#039;mc_amount3&#039;] : &#039;&#039;;
$mc_currency = isset($_POST[&#039;mc_currency&#039;]) ? $_POST[&#039;mc_currency&#039;] : &#039;&#039;;
$recurring = isset($_POST[&#039;recurring&#039;]) ? $_POST[&#039;recurring&#039;] : &#039;&#039;;
$reattempt = isset($_POST[&#039;reattempt&#039;]) ? $_POST[&#039;reattempt&#039;] : &#039;&#039;;
$retry_at = isset($_POST[&#039;retry_at&#039;]) ? $_POST[&#039;retry_at&#039;] : &#039;&#039;;
$recur_times = isset($_POST[&#039;recur_times&#039;]) ? $_POST[&#039;recur_times&#039;] : &#039;&#039;;
$username = isset($_POST[&#039;username&#039;]) ? $_POST[&#039;username&#039;] : &#039;&#039;;
$password = isset($_POST[&#039;password&#039;]) ? $_POST[&#039;password&#039;] : &#039;&#039;;
$subscr_id = isset($_POST[&#039;subscr_id&#039;]) ? $_POST[&#039;subscr_id&#039;] : &#039;&#039;;

// Dispute Notification Variables
$case_id = isset($_POST[&#039;case_id&#039;]) ? $_POST[&#039;case_id&#039;] : &#039;&#039;;
$case_type = isset($_POST[&#039;case_type&#039;]) ? $_POST[&#039;case_type&#039;] : &#039;&#039;;
$case_creation_date = isset($_POST[&#039;case_creation_date&#039;]) ? $_POST[&#039;case_creation_date&#039;] : &#039;&#039;;
?&gt;
</pre>
<p>And here is a SQL file you can use to easily create the database tables.</p>
<pre class="brush: sql">

-- phpMyAdmin SQL Dump
-- version 3.1.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Feb 20, 2009 at 11:17 PM
-- Server version: 5.0.67
-- PHP Version: 5.2.6

SET SQL_MODE=&quot;NO_AUTO_VALUE_ON_ZERO&quot;;

--
-- Database: `paypal_ipn`
--

-- --------------------------------------------------------

--
-- Table structure for table `paypal_disputes`
--

CREATE TABLE IF NOT EXISTS `paypal_disputes` (
`id` tinyint(10) NOT NULL auto_increment,
`txn_id` varchar(25) collate utf8_bin NOT NULL,
`case_id` varchar(25) collate utf8_bin NOT NULL,
`case_type` varchar(25) collate utf8_bin NOT NULL,
`case_creation_date` varchar(100) collate utf8_bin NOT NULL,
`payment_date` varchar(100) collate utf8_bin NOT NULL,
`receipt_id` varchar(25) collate utf8_bin NOT NULL,
`verify_sign` varchar(255) collate utf8_bin NOT NULL,
`payer_email` varchar(127) collate utf8_bin NOT NULL,
`payer_id` varchar(20) collate utf8_bin NOT NULL,
`invoice` varchar(127) collate utf8_bin NOT NULL,
`reason_code` varchar(25) collate utf8_bin NOT NULL,
`custom` varchar(255) collate utf8_bin NOT NULL,
`notify_version` varchar(25) collate utf8_bin NOT NULL,
`creation_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;

--
-- Dumping data for table `paypal_disputes`
--

-- --------------------------------------------------------

--
-- Table structure for table `paypal_ipn_log`
--

CREATE TABLE IF NOT EXISTS `paypal_ipn_log` (
`id` tinyint(4) NOT NULL auto_increment,
`created_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
`ipn_data_serialized` text collate utf8_bin NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;

--
-- Dumping data for table `paypal_ipn_log`
--

-- --------------------------------------------------------

--
-- Table structure for table `paypal_mass_payments`
--

CREATE TABLE IF NOT EXISTS `paypal_mass_payments` (
`id` tinyint(4) NOT NULL auto_increment,
`masspay_txn_id` varchar(25) collate utf8_bin NOT NULL,
`mc_currency` varchar(50) collate utf8_bin NOT NULL,
`mc_fee` double NOT NULL,
`mc_gross` double NOT NULL,
`receiver_email` varchar(127) collate utf8_bin NOT NULL,
`status` varchar(25) collate utf8_bin NOT NULL,
`unique_id` varchar(20) collate utf8_bin NOT NULL,
`creation_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;

--
-- Dumping data for table `paypal_mass_payments`
--

-- --------------------------------------------------------

--
-- Table structure for table `paypal_orders`
--

CREATE TABLE IF NOT EXISTS `paypal_orders` (
`id` tinyint(10) unsigned NOT NULL auto_increment,
`receiver_email` varchar(127) collate utf8_bin NOT NULL,
`payment_status` varchar(25) collate utf8_bin NOT NULL,
`pending_reason` varchar(25) collate utf8_bin NOT NULL,
`payment_date` varchar(100) collate utf8_bin NOT NULL,
`mc_gross` double NOT NULL,
`mc_fee` double NOT NULL,
`tax` double NOT NULL,
`mc_currency` varchar(10) collate utf8_bin NOT NULL,
`txn_id` varchar(25) collate utf8_bin NOT NULL,
`txn_type` varchar(25) collate utf8_bin NOT NULL,
`first_name` varchar(75) collate utf8_bin NOT NULL,
`last_name` varchar(75) collate utf8_bin NOT NULL,
`address_street` varchar(200) collate utf8_bin NOT NULL,
`address_city` varchar(50) collate utf8_bin NOT NULL,
`address_state` varchar(40) collate utf8_bin NOT NULL,
`address_zip` varchar(20) collate utf8_bin NOT NULL,
`address_country` varchar(64) collate utf8_bin NOT NULL,
`address_status` varchar(25) collate utf8_bin NOT NULL,
`payer_email` varchar(127) collate utf8_bin NOT NULL,
`payer_status` varchar(25) collate utf8_bin NOT NULL,
`payment_type` varchar(25) collate utf8_bin NOT NULL,
`notify_version` varchar(50) collate utf8_bin NOT NULL,
`verify_sign` varchar(255) collate utf8_bin NOT NULL,
`address_name` varchar(130) collate utf8_bin NOT NULL,
`protection_eligibility` varchar(50) collate utf8_bin NOT NULL,
`ipn_status` varchar(25) collate utf8_bin NOT NULL,
`subscr_id` varchar(25) collate utf8_bin NOT NULL,
`custom` varchar(255) collate utf8_bin NOT NULL,
`reason_code` varchar(25) collate utf8_bin NOT NULL,
`contact_phone` varchar(25) collate utf8_bin NOT NULL,
`item_name` varchar(127) collate utf8_bin NOT NULL,
`item_number` varchar(127) collate utf8_bin NOT NULL,
`invoice` varchar(127) collate utf8_bin NOT NULL,
`for_auction` tinyint(10) NOT NULL,
`auction_buyer_id` varchar(75) collate utf8_bin NOT NULL,
`auction_closing_date` varchar(100) collate utf8_bin NOT NULL,
`auction_multi_item` double NOT NULL default &#039;1&#039;,
`creation_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
`address_country_code` varchar(2) collate utf8_bin NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;

--
-- Dumping data for table `paypal_orders`
--

-- --------------------------------------------------------

--
-- Table structure for table `paypal_order_items`
--

CREATE TABLE IF NOT EXISTS `paypal_order_items` (
`id` tinyint(10) NOT NULL auto_increment,
`order_id` tinyint(10) NOT NULL,
`subscr_id` varchar(25) collate utf8_bin NOT NULL,
`item_name` varchar(130) collate utf8_bin NOT NULL,
`item_number` varchar(130) collate utf8_bin NOT NULL,
`os0` varchar(200) collate utf8_bin NOT NULL,
`on0` varchar(75) collate utf8_bin NOT NULL,
`os1` varchar(200) collate utf8_bin NOT NULL,
`on1` varchar(75) collate utf8_bin NOT NULL,
`quantity` double NOT NULL default &#039;0&#039;,
`custom` varchar(255) collate utf8_bin NOT NULL,
`mc_gross` double NOT NULL default &#039;0&#039;,
`mc_handling` double NOT NULL default &#039;0&#039;,
`mc_shipping` double NOT NULL default &#039;0&#039;,
`creation_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;

--
-- Dumping data for table `paypal_order_items`
--

-- --------------------------------------------------------

--
-- Table structure for table `paypal_recurring_payments`
--

CREATE TABLE IF NOT EXISTS `paypal_recurring_payments` (
`id` tinyint(10) NOT NULL auto_increment,
`mc_gross` double NOT NULL default &#039;0&#039;,
`protection_eligibility` varchar(50) collate utf8_bin NOT NULL,
`payment_date` varchar(100) collate utf8_bin NOT NULL,
`payment_status` varchar(25) collate utf8_bin NOT NULL,
`mc_fee` double NOT NULL default &#039;0&#039;,
`notify_version` varchar(25) collate utf8_bin NOT NULL,
`payer_status` varchar(25) collate utf8_bin NOT NULL,
`currency_code` varchar(10) collate utf8_bin NOT NULL,
`verify_sign` varchar(255) collate utf8_bin NOT NULL,
`amount` double NOT NULL default &#039;0&#039;,
`txn_id` varchar(25) collate utf8_bin NOT NULL,
`payment_type` varchar(25) collate utf8_bin NOT NULL,
`receiver_email` varchar(130) collate utf8_bin NOT NULL,
`receiver_id` varchar(15) collate utf8_bin NOT NULL,
`txn_type` varchar(25) collate utf8_bin NOT NULL,
`mc_currency` varchar(25) collate utf8_bin NOT NULL,
`residence_country` varchar(2) collate utf8_bin NOT NULL,
`receipt_id` varchar(50) collate utf8_bin NOT NULL,
`transaction_subject` varchar(150) collate utf8_bin NOT NULL,
`shipping` double NOT NULL default &#039;0&#039;,
`product_type` varchar(50) collate utf8_bin NOT NULL,
`time_created` varchar(100) collate utf8_bin NOT NULL,
`rp_invoice_id` varchar(127) collate utf8_bin NOT NULL,
`ipn_status` varchar(25) collate utf8_bin NOT NULL,
`creation_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;

--
-- Dumping data for table `paypal_recurring_payments`
--

-- --------------------------------------------------------

--
-- Table structure for table `paypal_recurring_payment_profiles`
--

CREATE TABLE IF NOT EXISTS `paypal_recurring_payment_profiles` (
`id` tinyint(10) NOT NULL auto_increment,
`payment_cycle` varchar(50) collate utf8_bin NOT NULL,
`txn_type` varchar(30) collate utf8_bin NOT NULL,
`last_name` varchar(75) collate utf8_bin NOT NULL,
`first_name` varchar(75) collate utf8_bin NOT NULL,
`next_payment_date` varchar(100) collate utf8_bin NOT NULL,
`residence_country` varchar(2) collate utf8_bin NOT NULL,
`initial_payment_amount` double NOT NULL default &#039;0&#039;,
`rp_invoice_id` varchar(127) collate utf8_bin NOT NULL,
`currency_code` varchar(10) collate utf8_bin NOT NULL,
`time_created` varchar(100) collate utf8_bin NOT NULL,
`verify_sign` varchar(255) collate utf8_bin NOT NULL,
`period_type` varchar(25) collate utf8_bin NOT NULL,
`payer_status` varchar(25) collate utf8_bin NOT NULL,
`payer_email` varchar(130) collate utf8_bin NOT NULL,
`receiver_email` varchar(130) collate utf8_bin NOT NULL,
`payer_id` varchar(20) collate utf8_bin NOT NULL,
`product_type` varchar(50) collate utf8_bin NOT NULL,
`payer_business_name` varchar(130) collate utf8_bin NOT NULL,
`shipping` double NOT NULL default &#039;0&#039;,
`amount_per_cycle` double NOT NULL default &#039;0&#039;,
`profile_status` varchar(25) collate utf8_bin NOT NULL,
`notify_version` varchar(25) collate utf8_bin NOT NULL,
`amount` double NOT NULL default &#039;0&#039;,
`outstanding_balance` double NOT NULL default &#039;0&#039;,
`recurring_payment_id` varchar(50) collate utf8_bin NOT NULL,
`product_name` varchar(130) collate utf8_bin NOT NULL,
`ipn_status` varchar(25) collate utf8_bin NOT NULL,
`creation_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;

--
-- Dumping data for table `paypal_recurring_payment_profiles`
--

-- --------------------------------------------------------

--
-- Table structure for table `paypal_subscriptions`
--

CREATE TABLE IF NOT EXISTS `paypal_subscriptions` (
`id` tinyint(10) NOT NULL auto_increment,
`custom` varchar(255) collate utf8_bin NOT NULL,
`subscr_id` varchar(25) collate utf8_bin NOT NULL,
`sub_event` varchar(50) collate utf8_bin NOT NULL,
`subscr_date` varchar(100) collate utf8_bin NOT NULL,
`subscr_effective` varchar(100) collate utf8_bin NOT NULL,
`period1` varchar(50) collate utf8_bin NOT NULL,
`period2` varchar(50) collate utf8_bin NOT NULL,
`period3` varchar(50) collate utf8_bin NOT NULL,
`amount1` double NOT NULL default &#039;0&#039;,
`amount2` double NOT NULL default &#039;0&#039;,
`amount3` double NOT NULL default &#039;0&#039;,
`mc_amount1` double NOT NULL default &#039;0&#039;,
`mc_amount2` double NOT NULL default &#039;0&#039;,
`mc_amount3` double NOT NULL default &#039;0&#039;,
`recurring` varchar(10) collate utf8_bin NOT NULL,
`reattempt` varchar(10) collate utf8_bin NOT NULL,
`retry_at` varchar(100) collate utf8_bin NOT NULL,
`recur_times` varchar(25) collate utf8_bin NOT NULL,
`username` varchar(70) collate utf8_bin NOT NULL,
`password` varchar(30) collate utf8_bin NOT NULL,
`txn_id` varchar(25) collate utf8_bin NOT NULL,
`payer_email` varchar(130) collate utf8_bin NOT NULL,
`residence_country` varchar(2) collate utf8_bin NOT NULL,
`mc_currency` varchar(10) collate utf8_bin NOT NULL,
`verify_sign` varchar(255) collate utf8_bin NOT NULL,
`payer_status` varchar(25) collate utf8_bin NOT NULL,
`first_name` varchar(75) collate utf8_bin NOT NULL,
`last_name` varchar(75) collate utf8_bin NOT NULL,
`receiver_email` varchar(130) collate utf8_bin NOT NULL,
`payer_id` varchar(15) collate utf8_bin NOT NULL,
`notify_version` varchar(25) collate utf8_bin NOT NULL,
`item_name` varchar(130) collate utf8_bin NOT NULL,
`item_number` varchar(130) collate utf8_bin NOT NULL,
`ipn_status` varchar(25) collate utf8_bin NOT NULL,
`creation_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;

--
-- Dumping data for table `paypal_subscriptions`
--

-- --------------------------------------------------------

--
-- Table structure for table `paypal_subscription_payments`
--

CREATE TABLE IF NOT EXISTS `paypal_subscription_payments` (
`id` tinyint(10) NOT NULL auto_increment,
`first_name` varchar(75) collate utf8_bin NOT NULL,
`last_name` varchar(75) collate utf8_bin NOT NULL,
`payer_email` varchar(130) collate utf8_bin NOT NULL,
`memo` text collate utf8_bin NOT NULL,
`item_name` varchar(130) collate utf8_bin NOT NULL,
`item_number` varchar(130) collate utf8_bin NOT NULL,
`os0` varchar(200) collate utf8_bin NOT NULL,
`on0` varchar(65) collate utf8_bin NOT NULL,
`os1` varchar(200) collate utf8_bin NOT NULL,
`on1` varchar(65) collate utf8_bin NOT NULL,
`quantity` double NOT NULL default &#039;0&#039;,
`payment_date` varchar(100) collate utf8_bin NOT NULL,
`payment_type` varchar(25) collate utf8_bin NOT NULL,
`txn_id` varchar(25) collate utf8_bin NOT NULL,
`mc_gross` double NOT NULL default &#039;0&#039;,
`mc_fee` double NOT NULL default &#039;0&#039;,
`payment_status` varchar(25) collate utf8_bin NOT NULL,
`pending_reason` varchar(25) collate utf8_bin NOT NULL,
`txn_type` varchar(30) collate utf8_bin NOT NULL,
`tax` double NOT NULL default &#039;0&#039;,
`mc_currency` varchar(25) collate utf8_bin NOT NULL,
`reason_code` varchar(25) collate utf8_bin NOT NULL,
`custom` varchar(255) collate utf8_bin NOT NULL,
`address_country` varchar(50) collate utf8_bin NOT NULL,
`subscr_id` varchar(25) collate utf8_bin NOT NULL,
`payer_status` varchar(25) collate utf8_bin NOT NULL,
`ipn_status` varchar(25) collate utf8_bin NOT NULL,
`creation_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;

--
-- Dumping data for table `paypal_subscription_payments`
--
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.usbswiper.com/blog/2008/12/26/paypal-instant-payment-notification-ipn-php-template/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PayPal&#8217;s eBay Payment Holding Policy, Why I Agree, and How to Work with it.</title>
		<link>http://www.usbswiper.com/blog/2008/12/17/paypals-ebay-payment-holding-policy-why-i-agree-and-how-to-work-with-it/</link>
		<comments>http://www.usbswiper.com/blog/2008/12/17/paypals-ebay-payment-holding-policy-why-i-agree-and-how-to-work-with-it/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 13:09:31 +0000</pubDate>
		<dc:creator>Andrew Angell</dc:creator>
		
		<category><![CDATA[eBay / PayPal]]></category>

		<category><![CDATA[disputes]]></category>

		<category><![CDATA[ebay]]></category>

		<category><![CDATA[escrow]]></category>

		<category><![CDATA[payment holding]]></category>

		<category><![CDATA[payment holds]]></category>

		<category><![CDATA[paypal]]></category>

		<category><![CDATA[policy]]></category>

		<guid isPermaLink="false">https://www.usbswiper.com/blog/?p=26</guid>
		<description><![CDATA[By implementing systems like this “Escrow” holding, huge problems can be avoided and if you follow the guidelines of the system it will not be a nuisance.]]></description>
			<content:encoded><![CDATA[<p>I seem to be alone on an island with the idea that I  actually agree with PayPal’s new system for new or low volume eBay  sellers.  I understand it can be  frustrating and especially confusing for new sellers, however, I believe it will  solve more problems than it causes and if you work with the system properly everybody  can be happy.  I’ll discuss more about the  reasons this system has been introduced later.   For now, let’s talk about how we can work with the system, because like  it or not, if we’re going to sell on eBay, we have to.</p>
<p>So, we sold our item on eBay and now “evil” PayPal has  placed a temporary hold on these funds, however, they’re telling us to go ahead  and ship it.  The way this new system  works is that our funds will not be released until one of the following things  happens:</p>
<ul>
<li>Your buyer leaves positive feedback</li>
<li>3 days pass after delivery confirmation (via  tracking number)</li>
<li>21 days have passed</li>
</ul>
<p>Obviously, we don’t want to wait 21 days for our money.  So how can we ensure that one of the first  two things happens in a timely manner so that we can have access to our money  as quickly as possible?  Here are a few  things to consider.</p>
<p><strong>Handling Feedback</strong></p>
<p>eBay’s Selling Manager application provides an easy way to  automate the process of requesting feedback from your buyers.  You can create rules to send a feedback  reminder <em>x</em> number of days after  shipping it.  Beyond that, you can easily  find all of your sold items that need feedback and with just a few clicks you  can send out feedback request emails to every one of them with a personal,  customized message to each.</p>
<p>If the Selling Manager doesn’t offer enough help you can use  the eBay web services API to develop custom tools to completely automate the  process of requesting feedback from buyers who have not left any, as well as leaving  feedback for your buyers on a set schedule, after they’ve left one for you,  or however you’d like to handle it.  You  could even create a system that automatically tracked all of your current  shipments and sent out reminders on the same day your customer received their  item.  Within the reminder, ask them to  inspect their item and ensure they’re happy and then please leave a feedback on  eBay.</p>
<p>Of course, the key to obtaining a positive feedback quickly  is to be honest about what you’re selling and maintain good communication with  your buyer throughout the entire process.   If your buyer is truly happy with your service and the product they  received they are much more likely to take a few moments and leave you a  feedback.</p>
<p><strong>Tracking Numbers –  Proof of Delivery</strong></p>
<p>PayPal will also release the funds once three days have  passed after proof-of-delivery (tracking number shows delivered).  If you use PayPal’s shipping buttons to print  shipping labels for your products then this step is taken care of  automatically.  The tracking number is  entered into the transaction details and PayPal’s system can easily track it  and release the funds accordingly.  This  probably covers the majority of you.</p>
<p><em>Here’s the part PayPal  screwed up!  They do plan to fix it,  though.</em></p>
<p>If you are NOT using PayPal’s shipping buttons to print  shipping labels it can be a nightmare to maintain the tracking numbers in  PayPal so that their system can successfully release funds on time.  Currently, the only way you can get your  tracking information into PayPal if it was generated elsewhere is to manually  add it.  There is no access to tracking  information via PayPal’s web services API!</p>
<p>This problem could indeed be a big one.  I have a couple of clients that use FedEx for  shipping so they don’t even have the choice of using PayPal’s shipping features  to generate shipping labels.  As such,  the only option they have is to employ somebody to enter tracking numbers  manually into PayPal’s system.  As such,  they typically skip this and focus on obtaining positive feedback from the  buyers.</p>
<p><strong>Why is PayPal Doing  This?</strong></p>
<p>I think the easiest way to explain why this system has been  put into place is to provide an example scenario in which not having this  system hurts everybody.  I’ve seen it all  too often.  Consider the following:</p>
<p><em>Buyer purchases a  desktop computer on eBay for $1000 from Seller.   Seller states in the auction that the computer has 4 RAM slots.  He also states that he has a 7 day return  policy should anything go wrong with the sale. </em></p>
<p><em>Buyer pays for the item  via PayPal and Seller has the money instantly.   Seller is an honest guy that just needed to get rid of this  computer.  He ships the computer and  assumes everything will be just fine.   Seller proceeds to spend the $1000 on this month’s bills and his PayPal  account is now at $0. </em></p>
<p><em>Buyer receives the  computer and sees that it only has 2 RAM slots in it.  He had already purchased 4 sticks of RAM and  was ready to load up his new machine and is rather upset.  Buyer contacts Seller and explains the  situation and also opens a new PayPal dispute claiming the item was not as  described.</em></p>
<p><em>Seller, again, is an  honest guy.  In the PayPal dispute he  apologizes for his mistake and agrees that Buyer should get a full refund upon  returning his item.  Buyer returns the item  and provides proof-of-delivery on the returned merchandise.  PayPal sides with Buyer on the dispute and  attempts to refund Buyer.</em></p>
<p><em>The problem is that  Seller already spent the money.  Seller’s  PayPal account now goes into the -$1000 balance.  PayPal has to explain to Buyer that because  the Seller has insufficient funds they cannot refund the money even though they  sided with Buyer on the dispute.  Buyer,  of course, is not happy with this news. </em></p>
<p><em>Seller is also not  happy because his PayPal account is now -$1000 they’re coming after him for  that money.  Seller is struggling to pay  it back, though, because he already spent it on his bills.</em></p>
<p><em>At this point Buyer is  unhappy with PayPal, Seller is unhappy with PayPal, and PayPal is unhappy that  they now have 2 people spreading the word on blogs that PayPal is a horrible  thing.</em></p>
<p>That is just one of the many examples I’ve seen that could  have been avoided if the Seller would have simply waited until the buyer had  received his item and was completely happy BEFORE spending the money.  Buyer would have gotten his refund and Seller  could have re-listed the item and sold it again with the correct specifications.</p>
<p>Here’s another scenario to consider:</p>
<p><em>Scammer has a list of  phished eBay and PayPal accounts.   Scammer proceeds to list items on these accounts that are high dollar  and quick sellers.  Things like iPhones,  laptops, and the likes.  Scammer sells  approximately 20 of these items without any intention of ever delivering a  single thing to anybody.  Unsuspecting  buyers purchase these items and send payment right away.  Scammer then moves the money from these  payments between a bunch of different phished accounts to make it hard to track  and eventually gets out with cash or might even use the funds to purchase items  and have them shipped to “drop-spots” where they will be able to obtain the  merchandise. </em></p>
<p><em>In such a case, once  PayPal discovers this has happened they are forced to freeze ALL ACCOUNTS  INVOLVED while they investigate and try to track down all of the money that has  now flooded their system with disputes.   Now you’ve got a whole mess of upset customers.</em></p>
<p>Again, this scam could have been avoided had the funds not  been made available until after the buyers actually had their items, which in  this case would have been never.  Then,  when disputes were filed the funds would still be available to refund to the  buyer.</p>
<p>Once more, these are just a couple examples of the many  crazy scenarios I’ve seen with buyers and sellers on eBay using PayPal.  By implementing systems like this “Escrow”  holding, huge problems can be avoided and if you follow the guidelines of the  system it will not be a nuisance.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.usbswiper.com/blog/2008/12/17/paypals-ebay-payment-holding-policy-why-i-agree-and-how-to-work-with-it/feed/</wfw:commentRss>
		</item>
		<item>
		<title>USBSwiper 3.3 Released</title>
		<link>http://www.usbswiper.com/blog/2008/12/06/usbswiper-33-released/</link>
		<comments>http://www.usbswiper.com/blog/2008/12/06/usbswiper-33-released/#comments</comments>
		<pubDate>Sat, 06 Dec 2008 16:35:10 +0000</pubDate>
		<dc:creator>Andrew Angell</dc:creator>
		
		<category><![CDATA[Software Updates]]></category>

		<category><![CDATA[3.3]]></category>

		<category><![CDATA[new release]]></category>

		<category><![CDATA[software update]]></category>

		<category><![CDATA[usb swiper]]></category>

		<category><![CDATA[usbswiper]]></category>

		<guid isPermaLink="false">https://www.usbswiper.com/blog/?p=18</guid>
		<description><![CDATA[Don&#8217;t let the small jump from 3.2 to 3.3 fool you. The new USBSwiper is  packed with feature requests! Take a look at what&#8217;s included&#8230;
PCI Compliance Updates
In  previous versions, credit card data was encrypted, however, it was  still stored internally within USBSwiper. With version 3.3 this is no  longer the case. [...]]]></description>
			<content:encoded><![CDATA[<p>Don&#8217;t let the small jump from 3.2 to 3.3 fool you. The new USBSwiper is  packed with feature requests! Take a look at what&#8217;s included&#8230;</p>
<p><strong>PCI Compliance Updates</strong><br />
In  previous versions, credit card data was encrypted, however, it was  still stored internally within USBSwiper. With version 3.3 this is no  longer the case. Card data is only stored until it&#8217;s successfully  processed, at which point the data is wiped clean from USBSwiper and  only &#8220;display&#8221; fields are shown (ie. xxxx-xxxx-xxxx-4532).</p>
<p><strong>Invoice Items Updates</strong><br />
The  drop-down list in the items area of invoices now sorts alphabetically  instead of numerically on the internal ID. Also, the custom item ID  field can be edited directly on the Invoices screen to add items rather  than through the drop-down list or the search area. This way you can  quickly add items if you know your own ID or if you have a bar-code  system in place.</p>
<p><strong>Authorization Features Now Included</strong><br />
USBSwiper  3.3 includes the ability to authorize a credit card prior to capturing  the final order amount. This feature was requested mostly from  restaurant owners who would typically need to apply a tip after  authorization the customer&#8217;s credit card. You may configure USBSwiper  to automatically authorize all new invoices or you may set each  individual invoice to authorize only when necessary. The authorization  is just for $1.00 and immediately releases the authorization back to  the bank. It&#8217;s simply used to ensure the card is valid.</p>
<p><strong>Sales Tax, Discount Codes, Handling Fee Updates</strong><br />
These  features have been completely revamped to allow multiple options for  each. You may now set up a complete table of all sales tax rates you  might need. For example, if you charge different rates for different  counties/cities you can easily include them. Also, inventory items may  be marked as Taxable to ensure only the items you need to tax are  included in the sales tax calculations. Discount Codes and Handling  Fees can be maintained much like sales tax. You can add as many  different codes as you like and each can be either flat-rate or  percentage based. You may set defaults for each within your Setup  screen and you may adjust invoice individually as well.</p>
<p><strong>Currency Updates</strong><br />
Version  3.3 now allows you to adjust the currency processed on the invoice. You  may set a default currency within your Setup screen and you may also  adjust the currency on each individual invoice as needed.</p>
<p><strong>More General Updates</strong></p>
<ul>
<li> Internal notes from USBSwiper are now included in requests to PayPal so they can be seen in the PayPal transaction details.</li>
<li>Partial  refunds and the ability to leave refund notes has been included.  Multiple partial refunds are also available up to the original full  amount.</li>
<li>Added option to print invoices without displaying the  options dialog so you don&#8217;t have to say OK when you print an invoice.  This option can be set within your Setup screen via a check box.</li>
<li>Fixed  invoice items so that if you edit the name(s) on the invoice screen it  reflects on receipts and in PayPal transaction details. Previously, it  would still use the name that was stored in Products.</li>
<li>Added last 4 digits of credit card number and the PayPal transaction ID to all receipts.</li>
<li>Added shipping address information on Invoices.  If shipping information is included it&#8217;s passed to PayPal accordingly.</li>
<li>Re-activating  a software license no longer creates additional Setup records,  therefore, you can re-activate without causing confguration problems.</li>
<li>Fixed a bug where a validation error would occur when switching to Key mode after having already swiped a credit card.</li>
<li>Added options to the payment type field to help maintain all types of transactions:  Cash, Check, Money Order, Other.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.usbswiper.com/blog/2008/12/06/usbswiper-33-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>USBSwiper 3.2 Released</title>
		<link>http://www.usbswiper.com/blog/2008/07/05/usbswiper-32-released/</link>
		<comments>http://www.usbswiper.com/blog/2008/07/05/usbswiper-32-released/#comments</comments>
		<pubDate>Sat, 05 Jul 2008 18:41:06 +0000</pubDate>
		<dc:creator>Andrew Angell</dc:creator>
		
		<category><![CDATA[Software Updates]]></category>

		<category><![CDATA[3.2]]></category>

		<category><![CDATA[new version release]]></category>

		<category><![CDATA[usbswiper]]></category>

		<guid isPermaLink="false">https://www.usbswiper.com/blog/?p=15</guid>
		<description><![CDATA[Security Updates
All API  credentials and credit card swipe data is now masked and encrypted  within the software. You will no longer be able to see this information  anywhere on screen.
Invoicing Updates
Previously,  the only way you could add items to your invoices was to click on the  ID column of the [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Security Updates</strong><br />
All API  credentials and credit card swipe data is now masked and encrypted  within the software. You will no longer be able to see this information  anywhere on screen.</p>
<p><strong>Invoicing Updates</strong><br />
Previously,  the only way you could add items to your invoices was to click on the  ID column of the list within the invoice and select products from the  drop down list provided. This worked well if you&#8217;re only dealing with a  couple of items but was horrible for handling any real type of  inventory at all.</p>
<p>You can still add items using the ID drop down  menu, however, there is now a feature to search for an item by Item ID,  Name, or Price. You simply click an Add Item button on the returned  item to add it to your current invoice. This allows you to add items  much more quickly and without the hassle of the drop down.</p>
<p><strong>Error Reporting</strong><br />
Previously  when an error was returned trying to charge a credit card you had to  click into the log in order to find the error information. Now, anytime  an error is returned it will be displayed immediately in a pop-up  dialog so you know right away what went wrong without any confusion or  extra clicks involved.</p>
<p><strong>Receipt Printing Updates</strong><br />
There are now layouts to handle the following receipt printer sizes: 2.25&#8243;, 3&#8243;, 4&#8243; and full 8.5&#8243; x 11&#8243;.  Also,  the receipt layouts now dynamically adjust according to the number of  items on them so you&#8217;re not wasting any of your receipt paper roll!</p>
<p>The  items on the invoice and receipts have been adjusted to sort first by  price (high to low) and then by name (alphabetically).</p>
<p><strong>Automated Features Updates</strong><br />
We  have added options in your Setup panel which allow you to activate the  automation of various tasks within USBSwiper. The following features  are available&#8230;</p>
<ul>
<li>Automatically include sales tax / handling fees on all new invoices.</li>
<li>Automatically process the credit card upon swiping so you don&#8217;t have to click the process button!</li>
<li> Automatically print receipts upon a successful transaction.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.usbswiper.com/blog/2008/07/05/usbswiper-32-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>USBSwiper Star Developer at eBay Live! 2008</title>
		<link>http://www.usbswiper.com/blog/2008/06/25/3/</link>
		<comments>http://www.usbswiper.com/blog/2008/06/25/3/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 07:03:53 +0000</pubDate>
		<dc:creator>Andrew Angell</dc:creator>
		
		<category><![CDATA[eBay / PayPal]]></category>

		<category><![CDATA[eBay Live 2008]]></category>

		<category><![CDATA[ebay star developer]]></category>

		<category><![CDATA[paypal developer conference 2008]]></category>

		<category><![CDATA[paypal star developer]]></category>

		<category><![CDATA[star developer award]]></category>

		<guid isPermaLink="false">https://www.usbswiper.com/blog/?p=3</guid>
		<description><![CDATA[Andrew Angell receives a PayPal Star Developer Award at eBay Live! 2008 in Chicago, IL.  Only seven developers were awarded this year for achievements that improve the user experience and customer service on PayPal and eBay.
&#8220;eBay and its community depends upon third-party developers to drive innovation and to create the tools that drive buyer [...]]]></description>
			<content:encoded><![CDATA[<p>Andrew Angell receives a PayPal Star Developer Award at eBay Live! 2008 in Chicago, IL.  Only seven developers were awarded this year for achievements that improve the user experience and customer service on PayPal and eBay.</p>
<div class="wp-caption alignnone" style="width: 384px"><img title="Star Developer Award Winner" src="http://www.usbswiper.com/images/Star-Developer-Award-Winner.jpg" alt="John Donahoe and Glenn Lim Present Andrew Angell with an eBay Live! 2008 Star Developer Award." width="374" height="248" /><p class="wp-caption-text">John Donahoe, CEO of eBay, and and Glenn Lim, Manager of PayPal Developer Services,  present Andrew Angell with an eBay Live! 2008 Star Developer Award.</p></div>
<p>&#8220;eBay and its community depends upon third-party developers to drive innovation and to create the tools that drive buyer and seller engagement,&#8221; said Max Mancini, senior director of Platform and Disruptive Innovation at eBay, who announced the winners today at the seventh annual eBay Developers Conference at Chicago&#8217;s McCormick Place West convention center. &#8220;It&#8217;s with great honor that we recognize these award winners for their achievements and innovation.&#8221;</p>
<p><strong>Award Winners Included</strong></p>
<ul>
<li>DSR Rockstar - <a href="http://www.zfirm.com/products/shiprush.shtml" target="_blank">ShipRush</a> by <a href="http://www.zfirm.com/" target="_blank">Z-Firm</a> (USA)</li>
<li> Most Innovative Application - <a href="http://www.youtube.com/watch?v=KKdqbRjrbrs" target="_blank">Jaast for Wii</a> by <a href="http://www.scendix.com/" target="_blank">Scendix Software</a> (Germany)</li>
<li> Early Adopter - <a href="http://www.iribbit.com/" target="_blank">iRibbit</a> by <a href="http://www.silksystem.com/" target="_blank">Aduci</a> (USA)</li>
<li> Service to the Developer Community - Joe Fox (elzorro) of <a href="http://thisisbd.com/" target="_blank">BD Network</a> (UK)</li>
<li>Best Design - <a href="http://www.kyozou.com/widgets.asp" target="_blank">Kyozou Widget</a> by <a href="http://www.kyozou.com/" target="_blank">Kyozou</a> (Canada)</li>
<li>PayPal Most Innovative Application - <a href="http://www.eventbrite.com/" target="_blank">Eventbrite</a> (USA)</li>
<li>PayPal Service to the Developer Community - Andrew Angell (<a href="http://www.angelleye.com" target="_blank">angelleye</a>) of <a href="https://www.usbswiper.com">USBSwiper</a> (USA)</li>
</ul>
<p><strong>Award Runners-Up Include</strong></p>
<ul>
<li>DSR Rockstar - <a href="http://www.hostedsupport.com/index.cfm?fuse=products.ezsupportebay" target="_blank">ezSupport for eBay</a> by <a href="http://www.hostedsupport.com/" target="_blank">HostedSupport</a> (USA)</li>
<li>Most Innovative Application - Mobile Alerts for Sellers by <a href="http://ahtxt.com/" target="_blank">ahTXT</a> (USA)</li>
<li> Early Adopter - <a href="http://www.iwascoding.com/GarageBuy/" target="_blank">GarageBuy</a> by <a href="http://www.iwascoding.com/" target="_blank">iwascoding</a> (Germany)</li>
<li> Service to the Developer Community - Anthony Sukow of <a href="http://www.terapeak.com/" target="_blank">Terapeak</a> (Canada)</li>
<li> Best Design - Video advertisements for eBay listings by <a href="http://www.vzaar.com/" target="_blank">Vzaar</a> (UK)</li>
</ul>
<p>The Star Developer Awards are presented annually to recognize the talent and dedication of members of the eBay Developers Program who have shown the most innovative use of the eBay and PayPal platforms and made extraordinary contributions to the community.</p>
<p>&#8220;The Star Developer Awards embody the best of what the eBay platform is all about by taking advantage of an extensive and unique set of ecommerce-focused Web services, driving community engagement with buyers and sellers wherever they are, and creating sustainable businesses,&#8221; said Kumar Kandaswamy, senior manager, eBay Developers Program.</p>
<p>The PayPal Developer Community, established in 2001, is an online community of 400,000 registered Web developers, Web designers and software developers who provide e-commerce technology solutions using the PayPal platform. The program is among the largest of its kind in the world, offering developers free access to technical tools, online payments resources and related third-party applications. More information about the PayPal Developer Community can be viewed at <a href="http://www.paypaldeveloper.com" target="_blank">PayPalDeveloper.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.usbswiper.com/blog/2008/06/25/3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Andrew Angell - PayPal ACE Developer Case Study</title>
		<link>http://www.usbswiper.com/blog/2008/04/11/andrew-angell-paypal-ace-developer-case-study/</link>
		<comments>http://www.usbswiper.com/blog/2008/04/11/andrew-angell-paypal-ace-developer-case-study/#comments</comments>
		<pubDate>Fri, 11 Apr 2008 13:44:35 +0000</pubDate>
		<dc:creator>Andrew Angell</dc:creator>
		
		<category><![CDATA[eBay / PayPal]]></category>

		<category><![CDATA[ace developer]]></category>

		<category><![CDATA[paypal]]></category>

		<category><![CDATA[paypal certified]]></category>

		<category><![CDATA[star developer]]></category>

		<guid isPermaLink="false">https://www.usbswiper.com/blog/?p=21</guid>
		<description><![CDATA[Pressing Problems, Quick Answers
Not long after he landed his first programming job, Drew Angell realized he was in over his head. He needed to ramp up his education – and fast. Training videos helped him with classic ASP and PHP while web discussion forums taught him how to work with XML web services. In his [...]]]></description>
			<content:encoded><![CDATA[<h2>Pressing Problems, Quick Answers</h2>
<p>Not long after he landed his first programming job, Drew Angell realized he was in over his head. He needed to ramp up his education – and fast. Training videos helped him with classic ASP and PHP while web discussion forums taught him how to work with XML web services. In his search for information about PayPal, Angell stumbled across the PayPal Developer Community forums.</p>
<p>“I jumped in and started asking questions – and from there I was off and running,” Angell recalls. “If I got a PayPal API error that I couldn’t find in the documentation, someone on the Developer Community always stepped up with an explanation. And if I had a specific technical question, I would often get an answer from a PayPal employee within 24 hours.”</p>
<h2>Sparking New Ideas</h2>
<p>Today, Angell specializes in PayPal and eBay integration. He continues to hang out in the Developer Community – but now he’s the one providing answers. “People often ask questions that are covered in the PayPal documentation, so I just point them in the right direction,” says Angell. “Almost every question you can think of is covered in the Integration Center on Developer Central – it’s just a matter of knowing where to look.”</p>
<p>Why would a busy developer like Angell keep sharing free advice in the Developer Community? “I learn best by helping other people,” he says. “And when people ask me a tough question, it often triggers ideas for my next project.”</p>
<h2>Boosting Business</h2>
<p>By providing knowledgeable answers on a public forum, Angell has gained recognition as an expert in PayPal integration. As a result, he’s attracted new business. “I’ve had potential clients contact me and say, ‘I saw you answering everyone’s questions in the Developer Community, so I figured you were the guy to call for my next project,’” says Angell. “Building up a good reputation in the Developer Community is like a résumé for the electronic age.”</p>
<p>Forgoing traditional advertising, Angell recently used Developer Community to announce a new application he developed. It allows customers to charge credit cards via a USB swiper, rather than typing information into PayPal Virtual Terminal. “I posted a link to my video demo [at www.usbswiper.com] and got quite a few hits,” says Angell. “Developer Community is ideal for getting your name out. If you can solve people’s problems, word spreads quickly.”</p>
<h2>Becoming an Ace Developer</h2>
<p>Angell recently earned another perk from Developer Community when PayPal named him an Ace Developer – an honor reserved for those who make at least 150 highly rated posts. “It was cool,” says Angell. “They sent me a T-shirt, and I’m proud to wear it. I keep going back to Developer Community, not only to share my knowledge, but also to get answers that I know I can trust.”</p>
]]></content:encoded>
			<wfw:commentRss>http://www.usbswiper.com/blog/2008/04/11/andrew-angell-paypal-ace-developer-case-study/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
