2015-11-02 4 views
0

Я звоню в CreateBillingAgreement после SetExpressCheckout, оба успешно. BILLINGAGREEMENTID возвращается командой CreateBillingAgreement.call to DoReferenceTransaction метод, дающий ошибку

Этот BILLINGAGREEMENTID передается как REFERENCEID для DoReferenceTransaction.

НВП строится как:

$nvpstr = '&TOKEN=' . $token . '&REFERENCEID=' . $billing_agreement_id . '&PAYMENTACTION=' . $paymentType . '&AMT=' . $FinalPaymentAmt; 
    $nvpstr .= '&CURRENCYCODE=' . $currencyCodeType . '&IPADDRESS=' . $serverName .'&L_ITEMCATEGORY0=Digital'.'&DESC='.urlencode("Test Recurring Payment($" . $_SESSION["Payment_Amount"] . " monthly)"); 

    $nvpstr.="&L_PAYMENTREQUEST_0_ITEMCATEGORY0=Digital"; 
    $nvpstr.="&L_PAYMENTREQUEST_0_QTY0=Digital"; 
    $nvpstr.="&L_PAYMENTREQUEST_0_NAME0=Test Name"; 
    $nvpstr.="&L_PAYMENTREQUEST_0_AMT0=".$_SESSION["Payment_Amount"]; 

    $nvpstr.="&L_NAME0=Test Name"; 
    $nvpstr.="&L_DESC0=".urlencode("Test Recurring Payment($" . $_SESSION["Payment_Amount"] . " monthly)"); 
    $nvpstr.="&L_AMT0=".$_SESSION["Payment_Amount"]; 
    $nvpstr.="&L_QTY0=1"; 

вызова метода DoReferenceTransaction дает ошибку:

Array 
(
    [TIMESTAMP] => 2015-11-02T10:20:06Z 
    [CORRELATIONID] => 3e60a1baba3b3 
    [ACK] => Failure 
    [VERSION] => 64 
    [BUILD] => 000000 
    [L_ERRORCODE0] => 10209 
    [L_ERRORCODE1] => 10004 
    [L_SHORTMESSAGE0] => Disabled 
    [L_SHORTMESSAGE1] => Invalid Data 
    [L_LONGMESSAGE0] => Preapproved Payments not enabled. 
    [L_LONGMESSAGE1] => This transaction cannot be processed. 
    [L_SEVERITYCODE0] => Error 
    [L_SEVERITYCODE1] => Error 
    [TRANSACTIONTYPE] => None 
    [PAYMENTTYPE] => None 
    [ORDERTIME] => 1970-01-01T00:00:00Z 
    [PAYMENTSTATUS] => None 
    [PENDINGREASON] => None 
    [REASONCODE] => None 
) 

Примечание: Использование Песочница счет для тестирования.

UPDATE:

function DoReferenceTransaction(){ 

    //Format the other parameters that were stored in the session from the previous calls 
    $token = urlencode($_SESSION['TOKEN']); 
    $paymentType = urlencode($_SESSION['PaymentType']); 
    $currencyCodeType = urlencode($_SESSION['currencyCodeType']); 
    //$payerID = urlencode($_SESSION['payer_id']); $_SESSION['billing_agreement_id'] 
    $billing_agreement_id = urlencode($_SESSION['billing_agreement_id']); 

$FinalPaymentAmt = urlencode($_SESSION["Payment_Amount"]); 
    $serverName = urlencode($_SERVER['SERVER_NAME']); 

    $nvpstr = '&TOKEN=' . $token . '&REFERENCEID=' . $billing_agreement_id . '&PAYMENTACTION=' . $paymentType . '&AMT=' . $FinalPaymentAmt; 
    $nvpstr .= '&CURRENCYCODE=' . $currencyCodeType . '&IPADDRESS=' . $serverName .'&L_ITEMCATEGORY0=Digital'.'&DESC='.urlencode("Test Recurring Payment($" . $_SESSION["Payment_Amount"] . " monthly)"); 

    $nvpstr.="&L_PAYMENTREQUEST_0_ITEMCATEGORY0=Digital"; 
    $nvpstr.="&L_PAYMENTREQUEST_0_QTY0=Digital"; 
    $nvpstr.="&L_PAYMENTREQUEST_0_NAME0=Test Name"; 
    $nvpstr.="&L_PAYMENTREQUEST_0_AMT0=".$_SESSION["Payment_Amount"]; 

    $nvpstr.="&L_NAME0=Test Name"; 
    $nvpstr.="&L_DESC0=".urlencode("Test Recurring Payment($" . $_SESSION["Payment_Amount"] . " monthly)"); 
    $nvpstr.="&L_AMT0=".$_SESSION["Payment_Amount"]; 
    $nvpstr.="&L_QTY0=1"; 



    /* Make the call to PayPal to finalize payment 
     If an error occured, show the resulting errors 
    */ 

     $resArray = hash_call("DoReferenceTransaction", $nvpstr); 
echo "<pre>"; 
    print_r($resArray); exit; 

    /* Display the API response back to the browser. 
     If the response from PayPal was a success, display the response parameters' 
     If the response was an error, display the errors received using APIError.php. 
    */ 
    $ack = strtoupper($resArray["ACK"]); 

    return $resArray; 
} 

NVP для DoReferenceTransaction:

&TOKEN=EC-30M31870BS241854X&REFERENCEID=B-81S156104Y376273D&PAYMENTACTION=Sale&AMT=3&CURRENCYCODE=USD&IPADDRESS=paypalrecurring.com&L_ITEMCATEGORY0=Digital&DESC=Test+Recurring+Payment%28+%243+monthly%29&L_PAYMENTREQUEST_0_ITEMCATEGORY0=Digital&L_PAYMENTREQUEST_0_QTY0=Digital&L_PAYMENTREQUEST_0_NAME0=Test Name&L_PAYMENTREQUEST_0_AMT0=3&L_NAME0=Test Name&L_DESC0=Test+Recurring+Payment%28+%243+monthly%29&L_AMT0=3&L_QTY0=1 

ответ

1

Это живой или вызов API песочнице?

Для активации этого API необходимо активировать ссылочную транзакцию в своей учетной записи PayPal.

API ссылочной транзакции недоступен для всех. Я бы посоветовал обратиться к вашему представителю PayPal, чтобы попросить их активировать его в своей учетной записи PayPal.

Если вы делаете это в песочнице, вы должны просто обновить свою учетную запись песочницы до учетной записи Pro. Это должно активировать ссылочную транзакцию в учетной записи песочницы.

Уверен, что вы должны спросить PayPal, если учетная запись вашей песочницы включена.

Можете ли вы отправить полный вызов API в свой вопрос, пожалуйста?

Update

я вижу что-то странное в вашем коде:

$nvpstr.="&L_PAYMENTREQUEST_0_ITEMCATEGORY0=Digital"; 
$nvpstr.="&L_PAYMENTREQUEST_0_QTY0=Digital"; 

Изменить его:

$nvpstr.="&L_PAYMENTREQUEST_0_ITEMCATEGORY0=Physical"; 
$nvpstr.="&L_PAYMENTREQUEST_0_QTY0=1"; 

Update 2

Я вижу несколько ошибок я n вызов API:

&TOKEN=EC-30M31870BS241854X& 
REFERENCEID=B-81S156104Y376273D& 
PAYMENTACTION=Sale& 
AMT=3& 
CURRENCYCODE=USD& 
IPADDRESS=paypalrecurring.com& 
L_ITEMCATEGORY0=Digital& 
DESC=Test+Recurring+Payment%28+%243+monthly%29& 
L_PAYMENTREQUEST_0_ITEMCATEGORY0=Digital& 
L_PAYMENTREQUEST_0_QTY0=Digital& 
L_PAYMENTREQUEST_0_NAME0=Test Name& 
L_PAYMENTREQUEST_0_AMT0=3& 
L_NAME0=Test Name& 
L_DESC0=Test+Recurring+Payment%28+%243+monthly%29& 
L_AMT0=3& 
L_QTY0=1string(606) 

Укажите действительный IP-адрес в переменной IP-адреса.

Заменить

L_PAYMENTREQUEST_0_QTY0=Digital& 

по:

L_PAYMENTREQUEST_0_QTY0=1& 

В последнем параметре есть неправильный параметр замены:

L_QTY0=1string(606) 

по:

L_QTY0=1 

В конечном итоге измените категорию предметов с цифрового на физическое. Я знаю, что вам нужны специальные права на цифровые товары с PayPal.

L_ITEMCATEGORY0=Physical& 
L_PAYMENTREQUEST_0_ITEMCATEGORY0=Physical& 
+0

Команда Paypal сказала: RT включен. – VBMali

+1

Попробуйте использовать более свежий номер версии. Например, 105 – Thomas

+0

[ВЕРСИЯ] => 64, какую версию нужно использовать? – VBMali

Смежные вопросы