2012-04-12 4 views
1

Я разрабатываю услугу, в которой отправитель платит сумму, 95% которой поступает на один приемник и 5% на другой. (например, 100 долларов США уплачены, $ 95 за вычетом расходов на первичные и 5 долларов США на вторичные.) В этом примере отправитель видит $ 95 в качестве суммы, которую он заплатит, а не 100 долларов, и я не понимаю, почему.Paypal Adaptive Chained Payments - сумма отправителя является суммой основного получателя не общей суммы. Как исправить?

Здесь суммы устанавливаются в массиве, соответствующем другому массиву адресов электронной почты Paypal.

$receiverAmountArray = array(
     .5*$backing_amount, 
     .95*$backing_amount 
     ); 

Второй адрес электронной почты имеет значение primary. Приемник наибольшей суммы должен быть первичным.

$receiverPrimaryArray = array(
     'false', 
     'true' 
     ); 

CallPay (из библиотеки PayPal) называется:

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

Вот функция CallPay. Извините за длину:

function CallPay($actionType, $cancelUrl, $returnUrl, $currencyCode, $receiverEmailArray, $receiverAmountArray, 
         $receiverPrimaryArray, $receiverInvoiceIdArray, $feesPayer, $ipnNotificationUrl, 
         $memo, $pin, $preapprovalKey, $reverseAllParallelPaymentsOnError, $senderEmail, $trackingId) 
    { 
     /* Gather the information to make the Pay call. 
      The variable nvpstr holds the name value pairs 
     */ 

     // required fields 
     $nvpstr = "actionType=" . urlencode($actionType) . "&currencyCode=" . urlencode($currencyCode); 
     $nvpstr .= "&returnUrl=" . urlencode($returnUrl) . "&cancelUrl=" . urlencode($cancelUrl); 

     if (0 != count($receiverAmountArray)) 
     { 
      reset($receiverAmountArray); 
      while (list($key, $value) = each($receiverAmountArray)) 
      { 
       if ("" != $value) 
       { 
        $nvpstr .= "&receiverList.receiver(" . $key . ").amount=" . urlencode($value); 
       } 
      } 
     } 

     if (0 != count($receiverEmailArray)) 
     { 
      reset($receiverEmailArray); 
      while (list($key, $value) = each($receiverEmailArray)) 
      { 
       if ("" != $value) 
       { 
        $nvpstr .= "&receiverList.receiver(" . $key . ").email=" . urlencode($value); 
       } 
      } 
     } 

     if (0 != count($receiverPrimaryArray)) 
     { 
      reset($receiverPrimaryArray); 
      while (list($key, $value) = each($receiverPrimaryArray)) 
      { 
       if ("" != $value) 
       { 
        $nvpstr = $nvpstr . "&receiverList.receiver(" . $key . ").primary=" . urlencode($value); 
       } 
      } 
     } 

     if (0 != count($receiverInvoiceIdArray)) 
     { 
      reset($receiverInvoiceIdArray); 
      while (list($key, $value) = each($receiverInvoiceIdArray)) 
      { 
       if ("" != $value) 
       { 
        $nvpstr = $nvpstr . "&receiverList.receiver(" . $key . ").invoiceId=" . urlencode($value); 
       } 
      } 
     } 

     // optional fields 
     if ("" != $feesPayer) 
     { 
      $nvpstr .= "&feesPayer=" . urlencode($feesPayer); 
     } 

     if ("" != $ipnNotificationUrl) 
     { 
      $nvpstr .= "&ipnNotificationUrl=" . urlencode($ipnNotificationUrl); 
     } 

     if ("" != $memo) 
     { 
      $nvpstr .= "&memo=" . urlencode($memo); 
     } 

     if ("" != $pin) 
     { 
      $nvpstr .= "&pin=" . urlencode($pin); 
     } 

     if ("" != $preapprovalKey) 
     { 
      $nvpstr .= "&preapprovalKey=" . urlencode($preapprovalKey); 
     } 

     if ("" != $reverseAllParallelPaymentsOnError) 
     { 
      $nvpstr .= "&reverseAllParallelPaymentsOnError=" . urlencode($reverseAllParallelPaymentsOnError); 
     } 

     if ("" != $senderEmail) 
     { 
      $nvpstr .= "&senderEmail=" . urlencode($senderEmail); 
     } 

     if ("" != $trackingId) 
     { 
      $nvpstr .= "&trackingId=" . urlencode($trackingId); 
     } 

     /* Make the Pay call to PayPal */ 
     $resArray = hash_call("Pay", $nvpstr); 

     /* Return the response array */ 
     return $resArray; 
    } 

Вот значение $ nvpstr прямо перед вызовом. Возможно ли, что Paypal просто делает сумму платежа основным платежом? Это не имеет смысла в контексте последовательных платежей.

actionType=PAY¤cyCode=USD&returnUrl=https%3A%2F%2F.com%2Fview_profile.php&cancelUrl=https%3A%2F%2Fexamplefunding.com%2Fview_profile.php&receiverList.receiver(0).amount=95&receiverList.receiver(1).amount=5&receiverList.receiver(0).email=recip_1334204171_biz%40example.com&receiverList.receiver(1).email=example_1334201682_biz%40example.com&receiverList.receiver(0).primary=true&receiverList.receiver(1).primary=false&receiverList.receiver(0).invoiceId=5c4e2902cbe484a0db37284f0144994c&receiverList.receiver(1).invoiceId=6f3d8ce65d1a59b41f8822ba6129ea58&feesPayer=PRIMARYRECEIVER&memo=New+Draft+Lines+-+ExampleFunding.com&senderEmail=paypal_1334201496_per%40example.com&trackingId=mqN8SSgIq 

ответ

3

В соответствии с Paypal's Adaptive Payments Documentation:

в связанной оплаты, отправитель оплачивает первичный приемник т фармацевтическую композицию, из которой первичный приемник платит вторичных приемников. Отправитель знает только о основном приемнике, а не о вторичных приемниках.

Таким образом, он работает правильно. Для того чтобы оплатить 5% от общей суммы вторичного приемника, я должен изменить это:

$receiverAmountArray = array(
     .05*$backing_amount, 
     .95*$backing_amount 
     ); 

к этому:

$receiverAmountArray = array(
     .05*$backing_amount, 
     $backing_amount 
     ); 

Это была моя ошибка думать, что общая сумма была сумма количества отдельных получателей в массиве.

0

пример: total_amount = 100;

если мы установим ресиверList.receiver (0) .primary = true then receiverList.receiver (0) .amount = total_amount;

и receiverList.receiver (1) .amount = 95% * total_amount