使用PAYPAL API时无效的事务

时间:2014-07-16 11:32:30

标签: php paypal

我正在使用PAYPAL API。

我成功调用了setExpressCheckout(在调用此方法之后我获得了ACK = Success),因此获得了一个我可以继续的完整链接。

获取完整链接(https://www.paypal.com/cgi-bin/webscr?cmd=_flow&SESSION=[SESSION_TOKEN])后,完整链接代表一个页面,其中包含错误。

错误:

此交易无效。请返回收件人的网站,使用他们的常规结帐流程完成您的交易。

返回商家

目前,我们无法处理您的请求。请返回并尝试其他选项

这是我的代码:

<?php

/*.
    require_module 'standard';
    require_module 'standard_reflection';
    require_module 'spl';
    require_module 'mysqli';
    require_module 'hash';
    require_module 'session';
    require_module 'streams';
.*/

//turn php errors on
//ini_set('track_errors', true);
    require_once __DIR__ . "/stdlib/all.php";
    require_once __DIR__ . "/SqlManager.php";

/*. array .*/ $body_data = null;
$body_data_txt = "";
/*. string .*/ $htmlpage  = "";
/*. array .*/ $keyAr  = array();
/*. array .*/ $tokenAr = array();
$response = "";
    /*. SqlManager .*/ $sqlm = null;

session_start();

$url = trim('https://api-3t.paypal.com/nvp');
$urlRun = trim('https://www.paypal.com/cgi-bin/webscr');

$body_data = array( 'USER' => *****",
                    'PWD' => "******",                                    
                    'SIGNATURE' => "*****",
                    'VERSION' => "95.0",
                    'PAYMENTREQUEST_0_PAYMENTACTION' => "Sale",
                    'PAYMENTREQUEST_0_AMT' => (string)$_SESSION["AMOUNT"],
                    'PAYMENTREQUEST_0_CURRENCYCODE' => 'USD',
                    'RETURNURL' => "******",
                    'CANCELURL' => "******",
                    'METHOD' => "SetExpressCheckout"
                                );

$body_data_txt = http_build_query($body_data, '', chr(38));
try
{
    $sqlm = new SqlManager(true);
    //create request and add headers
    $params = array(
            'http' => array(
                'protocol_version' => "1.1",
                'method' => "POST",
                'header' => "".
                    "Connection: close\r\n".
                    "Content-Length: ".strlen($body_data_txt)."\r\n".
                    "Content-type: "."application/x-www-form-urlencoded"."\r\n",
                'content' => $body_data_txt
            ));

    //create stream context
     $ctx = stream_context_create($params);

    //open the stream and send request
    try {
        $fp = fopen($url, 'r', false, $ctx);
    } catch(ErrorException $e) {
        throw new ErrorException("cannot open url" . $url . " error:" . $e->getMessage());
    }
     //get response
     $response = (string)stream_get_contents($fp);
     //check to see if stream is open
     if ($response === "") {
        throw new Exception("php error message = " . "$php_errormsg");
     }

     //close the stream
     fclose($fp);   

     $key = explode("&", $response);

     $keyAr = array();
     foreach ($key as $i => $value) {
        $tmpAr = explode("=", $value);
        if(sizeof($tmpAr) > 1) {
            $keyAr[$tmpAr[0]] = $tmpAr[1];
        }
     }

     if (substr($response, 0, 1) === "<") {
        echo $response;
     } else {
            // Extract the response details.
         if((0 == sizeof($keyAr)) || !array_key_exists('ACK', $keyAr) || (string)$keyAr["ACK"] !== "Success") {
            if (array_key_exists('L_ERRORCODE0', $keyAr) && array_key_exists('L_LONGMESSAGE0', $keyAr)) {
               echo cast("string", htmlspecialchars(urldecode((string)$keyAr["L_ERRORCODE0"]))) . ',' .
                    cast("string", htmlspecialchars(urldecode((string)$keyAr["L_LONGMESSAGE0"])));
            } else {
                echo "Unkown server response!";
            }
         } else {
// ********************************************
               $htmlpage = $urlRun . "?cmd=_express-checkout&".  "TOKEN=" . (string)$keyAr["TOKEN"]; // ******************* IS THIS LINE OK????
// ********************************************
               echo "ok," . $htmlpage; 
            } 
        }
    }

catch(Exception $e)
{
  echo 'Message: ||' .cast("string", str_replace('"', '\\"', $e->getMessage())).'||';
}
?>

$ htmlpage获得了完整的链接(请参阅带有星号标记的行&#39;这条线确定&#39;)

我的帐户是商家帐户。 可能是问题的原因是什么? 似乎有种配置问题 - 我会检查任何设置吗?

谢谢:)

1 个答案:

答案 0 :(得分:0)

问题是我用'TOKEN ='打开了paypal页面,我应该打开'token =' (大写字母事项)。

该行:

$ htmlpage = $ urlRun。 “?CMD = _express结账&安培;”。 “TOKEN =”。 (字符串)$ keyAr [ “TOKEN”];

应该是:

$ htmlpage = $ urlRun。 “?CMD = _express结账&安培;”。 “token =”。 (字符串)$ keyAr [ “TOKEN”];

谢谢,无论如何:)