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()
将重新开始工作……我已经更新了整个问题,希望现在能更容易理解。