Coupon Code For Paypal Express Checkout

爱⌒轻易说出口 提交于 2019-11-30 13:28:13

One approach is to have a shopping cart on your site where the user can enter a promo code. Once they've entered their promo codes, and are ready to begin the checkout process, this is when you redirect them to the Express Checkout (where you send Paypal the final amount of your order, etc).

According to this post on Paypal forum, they do not have a feature to pass the discount details to the checkout process: https://www.x.com/thread/39681 ("With express checkout all discount calculations will need to be done on your site.")

How to calculate before sending price to paypal
1) Add a SEPARATE form for the promo code to your page:

<form method="GET">
    <input type="text" name="promocode"> 
    <input type="submit" value="Add Promo">
</form>

2) On the server side, check the code, update the page accordingly with new prices (e.g. re-build your select menu with new prices). Example with PHP:

<?
if(isset($_GET('promocode')) {
    $prices = processPromo($_GET('promocode'));
}
else {
    $prices = array(2000, 4000, 6000);
}
?>

If you don't have access to the server, you would have to do this with JavaScript I guess (i.e. have your promo-code and price hard-coded into the page)

To initiate express checkout on server side
Download PHP NVP SDK & examples from Paypal's website:
https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/library_download_sdks

<?php
require_once 'CallerService.php';

session_start();


ini_set('session.bug_compat_42',0);
ini_set('session.bug_compat_warn',0);

/* Gather the information to make the final call to
   finalize the PayPal payment.  The variable nvpstr
   holds the name value pairs
   */
$token =urlencode( $_SESSION['token']);
$paymentAmount =urlencode ($_SESSION['TotalAmount']);
$paymentType = urlencode($_SESSION['paymentType']);
$currCodeType = urlencode($_SESSION['currCodeType']);
$payerID = urlencode($_SESSION['payer_id']);
$serverName = urlencode($_SERVER['SERVER_NAME']);

$nvpstr='&TOKEN='.$token.'&PAYERID='.$payerID.'&PAYMENTACTION='.$paymentType.'&AMT='.$paymentAmount.'&CURRENCYCODE='.$currCodeType.'&IPADDRESS='.$serverName ;



 /* Make the call to PayPal to finalize payment
    If an error occured, show the resulting errors
    */
$resArray=hash_call("DoExpressCheckoutPayment",$nvpstr);

/* Display the API response back to the browser.
   If the response from PayPal was a success, display the response parameters'
   If the response was an error, display the errors received using APIError.php.
   */
$ack = strtoupper($resArray["ACK"]);


if($ack != 'SUCCESS' && $ack != 'SUCCESSWITHWARNING'){
    $_SESSION['reshash']=$resArray;
    $location = "APIError.php";
         header("Location: $location");
               }

?>

I know this is an old thread but wanted to put here my experience for others looking for the same thing, and maybe this did not apply then but it does apply now, at least on the sandbox meaning I have not tested this in a real transaction

When adding items that you send to paypal you basically send this

L_PAYMENTREQUEST_0_QTY0 = 1

L_PAYMENTREQUEST_0_AMT0 = 1.00

L_PAYMENTREQUEST_0_NAME0 = my item 0 name

L_PAYMENTREQUEST_0_NUMBER0 = myitem0id

Then we add another item

L_PAYMENTREQUEST_0_QTY1 = 1

L_PAYMENTREQUEST_0_AMT1 = 1.00

L_PAYMENTREQUEST_0_NAME1 = my item 1 name

L_PAYMENTREQUEST_0_NUMBER1 = myitem1id

And now we add the coupon

L_PAYMENTREQUEST_0_QTY2 = 1

L_PAYMENTREQUEST_0_AMT2 = -0.50

L_PAYMENTREQUEST_0_NAME2 = my coupon name

L_PAYMENTREQUEST_0_NUMBER2 = mycouponcode

And then we add the subtotal and total values

PAYMENTREQUEST_0_AMT = 1.50

AMT = 1.50

What I think paypal does is ads up all item totals so it would do for this order something like

1.00+1.00-0.50 = 1.50

Then compares it to your total amounts

if they match then it is a go, the customer sees this as an extra item, but obviously with the minus sign, this picture below is from a paypal sandbox express checkout transaction

Here is the method I use to create discount coupons for PayPal buttons:

Use this code for your button:

<form action="https://www.paypal.com/cgi-bin/webscr" method="post" onsubmit="this.target = 'paypal'; return ReadForm (this);">
<input type="hidden" name="cmd" value="_xclick" />
<input type="hidden" name="add" value="1" />
<input type="hidden" name="business" value="YOUR MERCHANT ACCOUNT ID NUMBER HERE" />
<input type="hidden" name="item_name" value="10 sessions" />
<input type="hidden" name="amount" value="773.00" />
<input type="hidden" name="currency_code" value="USD" />
<input type="hidden" name="baseamt" value="773.00" />
<input type="hidden" name="basedes" value="10 sessions" />
Enter Coupon code
<input type     = "text" size     = "10"  name     = "coupcode"; />
<input type="button" value="Check code" onclick="coupval =this.form.coupcode.value;  ChkCoup();" /><br/><br/>
<input type="image" id="xx" disabled="disabled" src="https://www.paypalobjects.com/WEBSCR-640-20110306-1/en_US/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" onclick="CalculateOrder(this.form)" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/WEBSCR-640-20110306-1/en_US/i/scr/pixel.gif" width="1" height="1">
</form>

Create a Javascript file and copy and paste this code into it:

<!-- var discnt = 0;   // no default percent discount   var coupons = new Array (  // place to put coupon codes   "coup1",                 // 1st coupon value - comma seperated   "coup2",                 // 2nd coupon value - add all you want   "coup3"                  // 3rd coupon value ); var coupdc  = new Array (  // place to put discounts for coupon vals   5,   10,   15 ); var coupval = "(blanket)"; // what user entered as coupon code   function ChkCoup () {      // check user coupon entry var i;   discnt = 0;              // assume the worst   for (i=0; i<coupons.length; i++) {     if (coupval == coupons[i]) {       discnt = coupdc[i];  // remember the discount amt       alert ("Valid coupon number! \n\n" + discnt +              "% discount now in effect.");       return;     }   }   alert ("'" + coupval + "'  is not a valid code!"); }   function Dollar (val) {      // force to valid dollar amount var str,pos,rnd=0;   if (val < .995) rnd = 1;  // for old Netscape browsers   str = escape (val*1.0 + 0.005001 + rnd);  // float, round, escape   pos = str.indexOf (".");   if (pos > 0) str = str.substring (rnd, pos + 3);   return str; }   function ReadForm (obj1) {  // apply the discount var amt,des;   amt = obj1.baseamt.value*1.0;       // base amount   des = obj1.basedes.value;           // base description     if (discnt > 0) {                   // only if discount is active     amt = Dollar (amt - (amt * discnt/100.0));     des = des + ", " + discnt + "% dis, COUP = " + coupval;   }     obj1.amount.value = Dollar (amt);   obj1.item_name.value = des; } //--> 

Save the file as discount.js or whatever you want it to be called and upload it to your server. Then call the script by putting this line in the < head > section of your website:

<script type="text/javascript" src="http://yourwebsite.com/discount.js"></script>

You can read the blog post I wrote on this topic at http://icode4you.net/how-to-create-a-coupon-discount-for-paypal-buttons for more information on how to specify your discount passwords and the discount amounts that are applied when the correct password is entered, as well as how to pack the Javascript to make your passwords more secure.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!