PHP PayPal API 和沙盒问题

标签 php paypal

也许是愚蠢的问题..

我如何知道我与 PayPal API 的集成是否正常?

我的意思是代码可以很好地发送到 PayPal,PayPal 上的付款似乎工作正常,然后用户在付款后被重定向到我网站上的正确页面。

所以我假设它工作正常。

但是 PayPal 表格上没有显示价格。

我的测试账户不收费

我的其他测试账户(卖家)没有收入

我假设它起作用只是因为用户被重定向到我网站上的成功页面!

但是我怎么知道它真的有效呢?!

没有什么能让我完全确定它有效!!

请指教..

我正在使用 Express Checkout API

我只是向客户收取单件商品的费用,没有 PayPal 授权等。只是简单的 PayPal 销售。

谢谢

<?php

require_once ("paypalfunctions.php");
// ==================================
// PayPal Express Checkout Module
// ==================================

//'------------------------------------
//' The paymentAmount is the total value of 
//' the shopping cart, that was set 
//' earlier in a session variable 
//' by the shopping cart page
//'------------------------------------
$creditsAmount = $_GET["creditsAmount"];
if ($creditsAmount <= 4) {
$price = 10;
}elseif($creditsAmount <= 19 && $creditsAmount >= 5) {
$price = 7.5;
}else{
$price = 5;
}
$paymentAmount = $price * $creditsAmount;
$SubmID = $_GET["SubmID"];
$memberID = (int)$_COOKIE["memberID"];
//'------------------------------------
//' The currencyCodeType and paymentType 
//' are set to the selections made on the Integration Assistant 
//'------------------------------------
$currencyCodeType = "USD";
$paymentType = "Sale";

//'------------------------------------
//' The returnURL is the location where buyers return to when a
//' payment has been succesfully authorized.
//'
//' This is set to the value entered on the Integration Assistant 
//'------------------------------------
$returnURL = "http://domain.co.uk/modules/yobilab/copyright/PAYPAL_process.php?creditsAmount=".$creditsAmount; // AGGIUNGERE ID SUBMISSION
//$returnURL = "http://domain.co.uk/modules/yobilab/copyright/PAYPAL_process.php"; // AGGIUNGERE ID SUBMISSION
//'------------------------------------
//' The cancelURL is the location buyers are sent to when they hit the
//' cancel button during authorization of payment during the PayPal flow
//'
//' This is set to the value entered on the Integration Assistant 
//'------------------------------------
$cancelURL = "http://domain.co.uk/m/copyright/overview/".$SubmID; // AGGIUNGERE ID SUBMISSION
//$cancelURL = "http://domain.co.uk/m/copyright/error/"; // AGGIUNGERE ID SUBMISSION

//'------------------------------------
//' Calls the SetExpressCheckout API call
//'
//' The CallShortcutExpressCheckout function is defined in the file PayPalFunctions.php,
//' it is included at the top of this file.
//'-------------------------------------------------
$resArray = CallShortcutExpressCheckout ($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL);
$ack = strtoupper($resArray["ACK"]);
if($ack=="SUCCESS" || $ack=="SUCCESSWITHWARNING")
{
    RedirectToPayPal ( $resArray["TOKEN"] );
} 
else  
{
    //Display a user friendly Error on the page using any of the following error information returned by PayPal
    $ErrorCode = urldecode($resArray["L_ERRORCODE0"]);
    $ErrorShortMsg = urldecode($resArray["L_SHORTMESSAGE0"]);
    $ErrorLongMsg = urldecode($resArray["L_LONGMESSAGE0"]);
    $ErrorSeverityCode = urldecode($resArray["L_SEVERITYCODE0"]);

    echo "SetExpressCheckout API call failed. ";
    echo "Detailed Error Message: " . $ErrorLongMsg;
    echo "Short Error Message: " . $ErrorShortMsg;
    echo "Error Code: " . $ErrorCode;
    echo "Error Severity Code: " . $ErrorSeverityCode;
}
?>

最佳答案

使用 Paypal IPN(即时付款通知)通过您的 html 发送该 url,然后在该页面上放置此代码,您将在电子邮件中收到回复

<?php 
error_reporting(E_ALL ^ E_NOTICE); 
$email = $_GET['ipn_email']; 
$header = ""; 
$emailtext = ""; 
// Read the post from PayPal and add 'cmd' 
$req = 'cmd=_notify-validate'; 
if(function_exists('get_magic_quotes_gpc')) 
{  
    $get_magic_quotes_exits = true; 
} 
foreach ($_POST as $key => $value) 
// Handle escape characters, which depends on setting of magic quotes 
{  
    if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1){  
        $value = urlencode(stripslashes($value)); 
    } else { 
        $value = urlencode($value); 
    } 
    $req .= "&$key=$value"; 
} 
// Post back to PayPal to validate 
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n"; 
$header .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n"; 
$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30); 


// Process validation from PayPal 
// TODO: This sample does not test the HTTP response code. All 
// HTTP response codes must be handles or you should use an HTTP 
// library, such as cUrl 

if (!$fp) { // HTTP ERROR 
} else { 
// NO HTTP ERROR 
fputs ($fp, $header . $req); 
while (!feof($fp)) { 
    $res = fgets ($fp, 1024); 
    if (strcmp ($res, "VERIFIED") == 0) { 
        // TODO: 
        // Check the payment_status is Completed 
        // Check that txn_id has not been previously processed 
        // Check that receiver_email is your Primary PayPal email 
        // Check that payment_amount/payment_currency are correct 
        // Process payment 
        // If 'VERIFIED', send an email of IPN variables and values to the 
        // specified email address 
        foreach ($_POST as $key => $value){ 
        $emailtext .= $key . " = " .$value ."\n\n"; 
        } 
        mail($email, "Live-VERIFIED IPN", $emailtext . "\n\n" . $req); 
    } else if (strcmp ($res, "INVALID") == 0) { 
        // If 'INVALID', send an email. TODO: Log for manual investigation. 
        foreach ($_POST as $key => $value){ 
        $emailtext .= $key . " = " .$value ."\n\n"; 
        } 
        mail($email, "Live-INVALID IPN", $emailtext . "\n\n" . $req); 
    }    
} 
fclose ($fp); 
?>

关于PHP PayPal API 和沙盒问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6285331/

相关文章:

php - setPage() 函数 : 0 上的页码错误

paypal - 无法在 Paypal 沙箱中发布商品价格

c# - 底层连接已关闭 : An unexpected error occurred on a send

paypal - 如何在 Paypal 定期付款和订阅之间切换?

php - PayPal 不再重定向到返回 URL

javascript - 无法运行 php 代码, Angular 路由问题

php - 如何在 codeigniter 中获取 mysql 表的字段名称?

javascript - Ajax Vanilla JS - ajax 异步继续,无需等待 readState 4,状态 200

php - Laravel api分页指定页面

paypal - 我可以在 google play/apple store 中使用不同的支付方式进行应用内订阅吗?