0

2 人の受取人に支払いをしたいです。つまり、買い手は商品を 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);
}
}

?>
4

1 に答える 1

8

問題は、PAY の代わりに PAY_PRIMARY を使用することです。PayPalのドキュメントによると...

連鎖支払いの場合のみ、この値を指定して、2 番目の受取人への支払いを遅らせます。一次受取人への支払いのみが処理されます。

あなたは本当にそれを遅らせる必要がありますか、それともあなたは一般的に分割の直後ですか? 両方を同時にトリガーしようとしているように見えるので、遅延の必要はありません。

あなたの場合、あなたが持っているようにプライマリとセカンダリのレシーバーを設定するだけで、PAY_PRIMARY の代わりに PAY の ActionType で Pay を呼び出すことができます。これでもチェーン支払いとして分割されますが (買い手はチェックアウト時に主な受取人しか見えません)、2 つ目の受取人は期待どおりに同時に支払いを受け取ります。

私の理解に基づいて、あなたが望むことを行うようにコードを調整しました...

<?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 にリダイレクトして支払いを完了させるだけで、現在のように RedirectURL に戻されますが、同時に 2 番目の支払いがトリガーされます。

なんらかの理由で 2 回目の支払いを本当に遅らせたい場合 (ほとんどの人は、2 回目の支払いを開始する前に 1 日/1 週間/など待つことになります)、私に知らせてください。

別のヒント:私のライブラリの最新バージョンを使用している場合は、新しい関数 PayWithOptions が含まれています。これにより、SetPaymentOptions() をミックスに含めることができるため、追加の呼び出しを設定せずに支払いに関する詳細を提供できます。自分で。これを使用することをお勧めします。すべてが同じようにセットアップされますが、さまざまなプロジェクトに役立つ設定可能な追加パラメーターがいくつか付属しています。

于 2012-11-27T06:53:30.307 に答える