Paypal 贝宝自适应支付

Paypal 贝宝自适应支付,paypal,paypal-adaptive-payments,Paypal,Paypal Adaptive Payments,我想向两个接收者付款,即买方以100美元购买货物,接收者1得到90美元,接收者2得到10美元。我使用的是链式付款方式。我在接收人1的账户中获得100,这是可以的,但我无法获得接收人2的付款。已设置接收方的帐户id,但此处未给出。我做错了什么?谢谢 <?php require_once('../includes/config.php'); require_once('../includes/paypal.class.php'); $PayPalConfig = array(

我想向两个接收者付款,即买方以100美元购买货物,接收者1得到90美元,接收者2得到10美元。我使用的是链式付款方式。我在接收人1的账户中获得100,这是可以的,但我无法获得接收人2的付款。已设置接收方的帐户id,但此处未给出。我做错了什么?谢谢

<?php
require_once('../includes/config.php');
require_once('../includes/paypal.class.php');

$PayPalConfig = array(
                      'Sandbox' => $sandbox,
                      'DeveloperAccountEmail' => $developer_account_email,
                      'ApplicationID' => $application_id,
                      'DeviceID' => $device_id,
                      'IPAddress' => $_SERVER['REMOTE_ADDR'],
                      'APIUsername' => $api_username,
                      'APIPassword' => $api_password,
                      'APISignature' => $api_signature,
                      'APISubject' => $api_subject
                    );

$PayPal = new PayPal_Adaptive($PayPalConfig);

$PayRequestFields = array(
                        'ActionType' => 'PAY_PRIMARY',                              
                        'CancelURL' => $domain.'cancel.php',                        
                        'CurrencyCode' => 'USD',                                
                        'FeesPayer' => 'EACHRECEIVER',                                  
                        'IPNNotificationURL' => '',                         
                        'Memo' => '',                                       
                        'Pin' => '',                                        
                        'PreapprovalKey' => '',                              
                        'ReturnURL' => $domain.'return.php',                                    
                        'ReverseAllParallelPaymentsOnError' => '',          
                        'SenderEmail' => '',                                
                        'TrackingID' => ''                                  
                        );

$ClientDetailsFields = array(
                        'CustomerID' => '',                                 
                        'CustomerType' => '',                               
                        'GeoLocation' => '',                                
                        'Model' => '',                                      
                        'PartnerName' => ''                                 
                        );

$FundingTypes = array('ECHECK', 'BALANCE', 'CREDITCARD');                   

$Receivers = array();
$Receiver = array(
                'Amount' => '100.00',                                           
                'Email' => 'receiver1accountid',                                                
                'InvoiceID' => '',                                          
                'PaymentType' => 'GOODS',                                       
                'PaymentSubType' => '',                                     
                'Phone' => array('CountryCode' => '', 'PhoneNumber' => '', 'Extension' => ''), 
                'Primary' => 'true'                                             
                );
array_push($Receivers,$Receiver);

$Receiver = array(
                'Amount' => '10.00',                                            
                'Email' => 'receiver2accountid',                                                
                'InvoiceID' => '',                                          
                'PaymentType' => 'GOODS',                                       
                'PaymentSubType' => '',                                     
                'Phone' => array('CountryCode' => '', 'PhoneNumber' => '', 'Extension' => ''), 
                'Primary' => 'false'                                                
                );
array_push($Receivers,$Receiver);

$SenderIdentifierFields = array(
                                'UseCredentials' => ''                      
                                );

$AccountIdentifierFields = array(
                                'Email' => '',                              
                                'Phone' => array('CountryCode' => '', 'PhoneNumber' => '', 'Extension' => '')                               
                                );

$PayPalRequestData = array(
                    'PayRequestFields' => $PayRequestFields, 
                    'ClientDetailsFields' => $ClientDetailsFields, 
                    'FundingTypes' => $FundingTypes, 
                    'Receivers' => $Receivers, 
                    'SenderIdentifierFields' => $SenderIdentifierFields, 
                    'AccountIdentifierFields' => $AccountIdentifierFields
                    );


$PayPalResult = $PayPal->Pay($PayPalRequestData);

if(!$PayPalResult)
    {
        $errors = array('Errors'=>$PayPalResult['Errors']);

echo '<pre />';
print_r($errors);
exit();
    }
    else
    {

        header('Location: '.$PayPalResult['RedirectURL']);


$ExecutePaymentFields = array(
                            'PayKey' => $PayPalResult['PayKey'],                                
                            'FundingPlanID' => ''                           
                            );

$PayPalRequestData = array('ExecutePaymentFields' => $ExecutePaymentFields);


$PayPalResult = $PayPal->ExecutePayment($PayPalRequestData);
if(!$PayPalResult)
    {
        $errors = array('Errors'=>$PayPalResult['Errors']);

echo '<pre />';
print_r($errors);
exit();
    }
    else
    {

echo '<pre />';
print_r($PayPalResult);
}
}

?>

你的问题是使用PAY_PRIMARY而不是PAY。根据贝宝的文件

仅对于链接付款,请指定此值以延迟向 次级接收器;只有支付给主接收方的款项才是有效的 已处理

你真的需要推迟吗,还是说你只是在分手之后?看起来你试图同时触发它们,所以没有必要延迟

在您的情况下,您可以简单地设置主接收器和辅助接收器,然后使用ActionType Pay而不是Pay_primary调用Pay。这仍然会将其拆分为链式付款,其中买家在结账时只会看到主收款人,但次收款人会像您预期的那样在同一时间收到付款

根据我的理解,我已经调整了你的代码以满足你的需要

<?php
require_once('../includes/config.php');
require_once('../includes/paypal.class.php');

$PayPalConfig = array(
                      'Sandbox' => $sandbox,
                      'DeveloperAccountEmail' => $developer_account_email,
                      'ApplicationID' => $application_id,
                      'DeviceID' => $device_id,
                      'IPAddress' => $_SERVER['REMOTE_ADDR'],
                      'APIUsername' => $api_username,
                      'APIPassword' => $api_password,
                      'APISignature' => $api_signature,
                      'APISubject' => $api_subject
                    );

$PayPal = new PayPal_Adaptive($PayPalConfig);

$PayRequestFields = array(
                        'ActionType' => 'PAY',                              
                        'CancelURL' => $domain.'cancel.php',                        
                        'CurrencyCode' => 'USD',                                
                        'FeesPayer' => 'EACHRECEIVER',                                  
                        'IPNNotificationURL' => '',                         
                        'Memo' => '',                                       
                        'Pin' => '',                                        
                        'PreapprovalKey' => '',                              
                        'ReturnURL' => $domain.'return.php',                                    
                        'ReverseAllParallelPaymentsOnError' => '',          
                        'SenderEmail' => '',                                
                        'TrackingID' => ''                                  
                        );

$ClientDetailsFields = array(
                        'CustomerID' => '',                                 
                        'CustomerType' => '',                               
                        'GeoLocation' => '',                                
                        'Model' => '',                                      
                        'PartnerName' => ''                                 
                        );

$FundingTypes = array('ECHECK', 'BALANCE', 'CREDITCARD');                   

$Receivers = array();
$Receiver = array(
                'Amount' => '100.00',                                           
                'Email' => 'receiver1accountid',                                                
                'InvoiceID' => '',                                          
                'PaymentType' => 'GOODS',                                       
                'PaymentSubType' => '',                                     
                'Phone' => array('CountryCode' => '', 'PhoneNumber' => '', 'Extension' => ''), 
                'Primary' => 'true'                                             
                );
array_push($Receivers,$Receiver);

$Receiver = array(
                'Amount' => '10.00',                                            
                'Email' => 'receiver2accountid',                                                
                'InvoiceID' => '',                                          
                'PaymentType' => 'GOODS',                                       
                'PaymentSubType' => '',                                     
                'Phone' => array('CountryCode' => '', 'PhoneNumber' => '', 'Extension' => ''), 
                'Primary' => 'false'                                                
                );
array_push($Receivers,$Receiver);

$SenderIdentifierFields = array(
                                'UseCredentials' => ''                      
                                );

$AccountIdentifierFields = array(
                                'Email' => '',                              
                                'Phone' => array('CountryCode' => '', 'PhoneNumber' => '', 'Extension' => '')                               
                                );

$PayPalRequestData = array(
                    'PayRequestFields' => $PayRequestFields, 
                    'ClientDetailsFields' => $ClientDetailsFields, 
                    'FundingTypes' => $FundingTypes, 
                    'Receivers' => $Receivers, 
                    'SenderIdentifierFields' => $SenderIdentifierFields, 
                    'AccountIdentifierFields' => $AccountIdentifierFields
                    );


$PayPalResult = $PayPal->Pay($PayPalRequestData);

if($PayPal->APICallSuccessful($PayPalResult['Ack']))
{
    // Redirect to PayPal so user can complete payment.
    header('Location: '.$PayPalResult['RedirectURL']);
}
else
{
    // Error    
    echo '<pre />';
    print_r($PayPalResult['Errors']);
    exit();
}
?>
同样,在这种情况下,您不必担心使用ExecutePayment。它会简单地将用户重定向到PayPal,在那里他们完成付款,这样做后,他们会像现在一样返回到您的重定向URL,但二次付款将同时触发

如果你真的想因为某种原因推迟二次付款,大多数人在触发二次付款前都会等待一天/一周/等,那么请告诉我,我可以帮你


另一个提示:如果您使用的是,其中包含了一个新功能PayWithOptions,这将允许您在组合中包含SetPaymentOptions,这样您就可以提供有关付款的更多详细信息,而无需自行设置其他呼叫。我建议你用这个。所有设置都是一样的,但是它附带了一些额外的参数,您可以设置这些参数,这些参数对不同的项目很有用。

谢谢Andrew!我刚做完。但是,我只想同时支付两笔款项。感谢您的宝贵意见,当然也感谢您构建的库。它真的很震撼。再次感谢……。@Andrew Angell嗨,我想推迟二次付款,因为二次收款人只有在完成任务后才会被记入贷方。那么,你能告诉我你的想法吗?建议一些链接…您将使用此线程涵盖的相同类型的示例,除非您将操作设置为PAY_PRIMARY而不是PAY。