Can';我们无法从PayPalpPlatform.php获取CallPay和CallPaymentDetails来协同工作

Can';我们无法从PayPalpPlatform.php获取CallPay和CallPaymentDetails来协同工作,php,paypal,paypal-adaptive-payments,Php,Paypal,Paypal Adaptive Payments,原始问题 使用中的函数,我有以下代码可以正常工作: $resArray = CallPaymentDetails( ... ); // $resArray = CallPay ( ... ); // $resArray = CallPaymentDetails( ... ); $resArray = CallPay ( ... ); 以下方法也很有效: $resArray = CallPaymentDetails( ... ); // $resArray = CallPay ( ... );

原始问题

使用中的函数,我有以下代码可以正常工作:

$resArray = CallPaymentDetails( ... );
// $resArray = CallPay ( ... );
// $resArray = CallPaymentDetails( ... );
$resArray = CallPay ( ... );
以下方法也很有效:

$resArray = CallPaymentDetails( ... );
// $resArray = CallPay ( ... );
// $resArray = CallPaymentDetails( ... );
$resArray = CallPay ( ... );
但这不起作用:

错误发生在第二行,即,
$resArray=CallPay(…),错误消息为:

'error(0).message' => string 'The trackingId some_string_here is invalid'
我看不出
trackingId
有什么问题,而且如果
CallPaymentDetails
之前没有使用
CallPaymentDetails
,我似乎也不明白为什么
CallPay
有效

经过一些调试后,我可以看到以下行是捕获错误消息的行:

$response = curl_exec($ch);
但我无法通过这条线来了解它为什么会导致错误。有人知道这是怎么回事吗


更新-完整代码

<?php
    error_reporting( E_ALL | E_STRICT );
    ini_set('display_errors', 1);

    require_once ("paypalplatform.php");

    $payKey = "existing payKey goes here";
    $transactionId = "";
    $trackingId = "";

    // if( user has already tried paying where the payment failed, get old $payKey and use in CallPaymentDetails() ) = true {
        $resArray = CallPaymentDetails( $payKey, $transactionId, $trackingId );
    // }

    var_dump($resArray);

    unset($resArray);

    $actionType = "PAY";
    $cancelUrl = "http://" . $_SERVER["SERVER_ADDR"] . "/cancel.php";
    $returnUrl = "http://" . $_SERVER["SERVER_ADDR"] . "/success.php";
    $currencyCode = "GBP";
    $receiverEmailArray = array( 'company email goes here' );
    $receiverAmountArray = array( '2' );
    $receiverPrimaryArray = array();
    $senderEmail = "";
    $feesPayer = "";
    $ipnNotificationUrl = "";
    $memo = "";
    $pin = "";
    $preapprovalKey = "";
    $reverseAllParallelPaymentsOnError = "";
    $trackingId = generateTrackingID();
    $receiverInvoiceIdArray = array( $trackingId );

    $resArray = CallPay ( $actionType, $cancelUrl, $returnUrl, $currencyCode, 
        $receiverEmailArray, $receiverAmountArray, $receiverPrimaryArray,
        $receiverInvoiceIdArray, $feesPayer, $ipnNotificationUrl, $memo, 
        $pin, $preapprovalKey, $reverseAllParallelPaymentsOnError, 
        $senderEmail, $trackingId );

    var_dump($resArray);
?>


需要输入位于顶部的$payKey变量,还需要输入$receiverEmailArray。

问题出在paypelplatform.php中

在hashcall函数中,$API_Endpoint被声明为全局,然后$methodname被附加到它$methodname是指示hashcall执行的操作。因为$API_端点被直接附加到(因为它是全局的),所以对hashcall的任何后续调用都将使用修改后的$API_端点

CallPaymentDetails$API_端点对hashcall的第一次调用是:

从CallPay$API_端点对hashcall的第二次调用是:

正是这一点导致了意想不到的结果

编辑PaypaplPlatform.php以删除所述行并修改所述行:

function hash_call($methodName, $nvpStr){
global $API_Endpoint, $API_UserName, $API_Password, $API_Signature, $API_AppID;
global $USE_PROXY, $PROXY_HOST, $PROXY_PORT;

$API_Endpoint .= "/" . $methodName; //REMOVE THIS LINE

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$API_Endpoint); //MODIFY THIS LINE
因此hashcall的开头如下所示:

function hash_call($methodName,$nvpStr){
global $API_Endpoint,$API_UserName,$API_Password,$API_Signature,$API_AppID;
global $USE_PROXY,$PROXY_HOST,$PROXY_PORT;

$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,"$API_Endpoint/$methodName");

我认为它不起作用,因为它缺少参数

  'error(0).parameter(0)' => string 'some_string_here' (length=9)

编辑:在执行第一次数据库调用时,函数似乎也有问题。

您需要发布实际的错误代码和错误消息。errorId“some_string_here”不是6个字符的字符串。如果您只提供少量代码和已编辑的错误信息,如何回答此问题?@JSON,没有错误消息发生。我得到的唯一错误迹象是我发布了var_dump,这是我在调试时发现的。如果您没有编辑错误消息,请尝试调用
var_dump($trackingId);模具()
直接在
$trackingId=generateTrackingID()之后。我想知道您是否没有使用有效的跟踪id。如果您收到的跟踪id符合您预期的规格,请尝试使用file_put_contents()将跟踪id写入文件,以查看经过几次尝试后生成的id是否始终符合您的预期。我现在不在我的工作计算机旁,因此我明天将尝试此操作。但是,我同意这与跟踪id有关。令人困惑的是,生成跟踪id的代码第一次工作,但第二次不工作。我猜取消$resArray并不能很好地解决所有问题或类似的问题?我已经更新了整个问题,希望现在更容易理解。所有代码都在问题中提供。我还提供了一个指向paypelplatform.php文件的链接。我不明白的是,为什么trackingId在CallPay单独使用时有效,而trackingId在CallPaymentDetails在CallPay之前使用时无效。你说得对!对不起,
trackingId
生成如下
trackingId=generateTrackingID()
其中函数
generateTrackingID()
位于paypalplatform.php中。这里的某个字符串是我的偏执狂,
trackingId
实际上每次都不同,我只是在这里用一些字符串替换它,以便在这里发布问题时出于隐私目的,这可能是不必要的。谢谢你的回复。这是奇怪的部分<代码>CallPaymentDetails()
不是问题所在。问题是
CallPay()
<如果
CallPaymentDetails()
没有在同一个php文件中使用,但是如果我使用在php文件中有效的
CallPaymentDetails()
,但是
CallPay()
失败,那么code>CallPay()可以正常工作。。。如果我从php文件中删除
CallPaymentDetails()
,那么
CallPay()
将重新开始工作……我已经更新了整个问题,希望现在能更容易理解。