2014-02-20 71 views
1

原來的問題無法從paypalplatform.php得到CallPay和CallPaymentDetails共同努力

使用功能paypalplatform.php,我有以下的代碼工作正常:

$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,我似乎無法正常工作爲什麼CallPay如果CallPaymentDetails在它之前沒有被使用,則工作。

一些調試後,我可以看到,從paypalplatform.php下面一行是捕獲錯誤信息行:

$response = curl_exec($ch); 

,但我無法通過該行一步,看看它爲什麼是造成錯誤。任何人都知道這是怎麼回事?


UPDATE - 全碼

<?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); 
?> 
需要,並在輸入$ receiverEmailArray還需要輸入

頂部的$ payKey變量權

+0

您需要發佈實際的錯誤代碼和錯誤消息。 errorId'some_string_here'不是6個字符的字符串。如果只提供少量代碼和編輯的錯誤信息,如何解決這個問題? – JSON

+0

@JSON,沒有錯誤信息發生。我得到的錯誤的唯一標誌是我發佈的var_dump,這是我在調試時發現的。 – oshirowanen

+0

如果您未編輯錯誤消息,請嘗試調用'var_dump($ trackingId); die();'緊跟在'$ trackingId = generateTrackingID();'後面。我想知道您是否使用了有效的追蹤ID。 – JSON

回答

2

的問題是在paypalplatform.php

在hashcall函數中,$ API_Endpoint被聲明爲全局的,然後$ methodname被追加到我噸。 $ methodname是指示執行hashcall的操作。因爲$ API_Endpoint被直接追加(因爲它是全局的),所以後續對hashcall的調用將使用修改過的$ API_Endpoint。

第一次調用從CallPaymentDetails $ API_Endpoint到hashcall是: https://svcs.sandbox.paypal.com/AdaptivePayments/PaymentDetails

在第二個電話從CallPay $ API_Endpoint到hashcall是: https://svcs.sandbox.paypal.com/AdaptivePayments/PaymentDetails/Pay

正是這一點導致了意想不到的結果。

編輯paypalplatform.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"); 
+0

我已經更新了整個問題,希望它是現在更容易理解 – oshirowanen

+0

所有代碼都在問題中提供,我還提供了一個paypalplatform.php文件的鏈接。 – oshirowanen

+0

Th e trackingId在paypalplatform.php文件中生成。我不明白的是爲什麼當CallPay被自己使用時,trackId是有效的,但是當CallPaymentDetails在CallPay之前被使用時,trackingId是無效的。 – oshirowanen

0

我認爲它不工作,因爲它是缺少參數。

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

編輯:當它進行第一次數據庫調用時,似乎也有錯誤的函數。

+0

我已經更新了整個問題,希望現在更容易理解。 – oshirowanen

+0

在上面的問題中添加了完整的代碼。 – oshirowanen

相關問題