Адаптивные цепные платежи Paypal. Сумма отправителя является суммой основного получателя, а не общей суммой. Как исправить?

Я разрабатываю сервис, в котором отправитель платит сумму, 95% которой идет одному получателю, а 5% - другому. (например, уплачено 100 долларов США, 95 долларов США за вычетом сборов за первичную отправку и 5 долларов США за дополнительную плату.) В этом примере отправитель видит в качестве своей суммы платежа 95 долларов США, а не 100 долларов США, и я не понимаю, почему.

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

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

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

$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

person Michael    schedule 12.04.2012    source источник


Ответы (2)


Согласно Paypal Документация по адаптивным платежам:

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

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

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

к этому:

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

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

person Michael    schedule 12.04.2012

пример: общая_сумма = 100;

если мы установим ReceiveList.receiver(0).primary=true, тогда ReceiveList.receiver(0).amount = total_amount;

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

person Scott.N    schedule 13.04.2012