使用PayPal IPN-如何选择付款接收人?

使用PayPal IPN-如何选择付款接收人?,paypal,paypal-ipn,Paypal,Paypal Ipn,下面是我用来处理信用卡的脚本。现在,根据$clientId和$clientSecret支付给我。我需要收件人是可变的基于用户贝宝电子邮件。如果我有用户的PayPal电子邮件,我将如何获取适当的信息以将钱发送给用户 #!/usr/bin/php <?php # Sandbox $host = 'https://api.sandbox.paypal.com'; $clientId = 'ATopphBpQ1BOCE3Bi5QLdXH8XjH_btoKoXXHsMNSUVe9cx_nbiB0f

下面是我用来处理信用卡的脚本。现在,根据$clientId和$clientSecret支付给我。我需要收件人是可变的基于用户贝宝电子邮件。如果我有用户的PayPal电子邮件,我将如何获取适当的信息以将钱发送给用户

#!/usr/bin/php
<?php

# Sandbox
$host = 'https://api.sandbox.paypal.com';
$clientId = 'ATopphBpQ1BOCE3Bi5QLdXH8XjH_btoKoXXHsMNSUVe9cx_nbiB0fpglcwNE';
$clientSecret = 'EFvOWhDKf9-F9uEEHaA4LV_t373Zk-B0-h2vT6d-1BjaqsrPo_DWH74wTJ_M';

$token = '';
// function to read stdin
function read_stdin() {
        $fr=fopen("php://stdin","r");   // open our file pointer to read from stdin
        $input = fgets($fr,128);        // read a maximum of 128 characters
        $input = rtrim($input);         // trim any trailing spaces.
        fclose ($fr);                   // close the file handle
        return $input;                  // return the text entered
}

function get_access_token($url, $postdata) {
    global $clientId, $clientSecret;
    $curl = curl_init($url); 
    curl_setopt($curl, CURLOPT_POST, true); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_USERPWD, $clientId . ":" . $clientSecret);
    curl_setopt($curl, CURLOPT_HEADER, false); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata); 
#   curl_setopt($curl, CURLOPT_VERBOSE, TRUE);
    $response = curl_exec( $curl );
    if (empty($response)) {
        // some kind of an error happened
        die(curl_error($curl));
        curl_close($curl); // close cURL handler
    } else {
        $info = curl_getinfo($curl);
        echo "Time took: " . $info['total_time']*1000 . "ms<br>";
        curl_close($curl); // close cURL handler
        if($info['http_code'] != 200 && $info['http_code'] != 201 ) {
            echo "Received error: " . $info['http_code']. "<br>";
            echo "Raw response:".$response."<br>";
            die();
        }
    }

    // Convert the result from JSON format to a PHP array 
    $jsonResponse = json_decode( $response );
    return $jsonResponse->access_token;
}

function make_post_call($url, $postdata) {
    global $token;
    $curl = curl_init($url); 
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array(
                'Authorization: Bearer '.$token,
                'Accept: application/json',
                'Content-Type: application/json'
                ));

    curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata); 
    #curl_setopt($curl, CURLOPT_VERBOSE, TRUE);
    $response = curl_exec( $curl );
    if (empty($response)) {
        // some kind of an error happened
        die(curl_error($curl));
        curl_close($curl); // close cURL handler
    } else {
        $info = curl_getinfo($curl);
        echo "Time took: " . $info['total_time']*1000 . "ms<br>";
        curl_close($curl); // close cURL handler
        if($info['http_code'] != 200 && $info['http_code'] != 201 ) {
            echo "Received error: " . $info['http_code']. "<br>";
            echo "Raw response:".$response."<br>";
            die();
        }
    }

    // Convert the result from JSON format to a PHP array 
    $jsonResponse = json_decode($response, TRUE);
    return $jsonResponse;
}

function make_get_call($url) {
    global $token;
    $curl = curl_init($url); 
    curl_setopt($curl, CURLOPT_POST, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array(
                'Authorization: Bearer '.$token,
                'Accept: application/json',
                'Content-Type: application/json'
                ));

    #curl_setopt($curl, CURLOPT_VERBOSE, TRUE);
    $response = curl_exec( $curl );
    if (empty($response)) {
        // some kind of an error happened
        die(curl_error($curl));
        curl_close($curl); // close cURL handler
    } else {
        $info = curl_getinfo($curl);
        echo "Time took: " . $info['total_time']*1000 . "ms<br>";
        curl_close($curl); // close cURL handler
        if($info['http_code'] != 200 && $info['http_code'] != 201 ) {
            echo "Received error: " . $info['http_code']. "<br>";
            echo "Raw response:".$response."<br>";
            die();
        }
    }

    // Convert the result from JSON format to a PHP array 
    $jsonResponse = json_decode($response, TRUE);
    return $jsonResponse;
}

echo "<br>";
echo "###########################################<br>";
echo "Obtaining OAuth2 Access Token.... <br>";
$url = $host.'/v1/oauth2/token'; 
$postArgs = 'grant_type=client_credentials';
$token = get_access_token($url,$postArgs);
echo "Got OAuth Token: ".$token;
echo "<br> <br>";
echo "###########################################<br>";
echo "Making a Credit Card Payment... <br>";
$url = $host.'/v1/payments/payment';
$payment = array(
        'intent' => 'sale',
        'payer' => array(
            'payment_method' => 'credit_card',
            'funding_instruments' => array ( array(
                    'credit_card' => array (
                        'number' => '5500005555555559',
                        'type'   => 'mastercard',
                        'expire_month' => 12,
                        'expire_year' => 2018,
                        'cvv2' => 111,
                        'first_name' => 'Joe',
                        'last_name' => 'Shopper'
                        )
                    ))
            ),
        'transactions' => array (array(
                'amount' => array(
                    'total' => '7.47',
                    'currency' => 'USD'
                    ),
                'description' => 'payment by a credit card using a test script'
                ))
        );
        echo "<b>Payer Variable Details:</b> :";
        print_r($payment['payer']);
$json = json_encode($payment);
$json_resp = make_post_call($url, $json);
foreach ($json_resp['links'] as $link) {
    if($link['rel'] == 'self'){
        $payment_detail_url = $link['href'];
        $payment_detail_method = $link['method'];
    }
}
$related_resource_count = 0;
$related_resources = "";
foreach ($json_resp['transactions'] as $transaction) {
    if($transaction['related_resources']) {
        $related_resource_count = count($transaction['related_resources']);
        foreach ($transaction['related_resources'] as $related_resource) {
            if($related_resource['sale']){
                $related_resources = $related_resources."sale ";
                $sale = $related_resource['sale'];
                foreach ($sale['links'] as $link) {
                    if($link['rel'] == 'self'){
                        $sale_detail_url = $link['href'];
                        $sale_detail_method = $link['method'];
                    }else if($link['rel'] == 'refund'){
                        $refund_url = $link['href'];
                        $refund_method = $link['method'];
                    }
                }
            } else if($related_resource['refund']){
                $related_resources = $related_resources."refund";
            }   
        }
    }
}

echo "Payment Created successfully: " . $json_resp['id'] ." with state '". $json_resp['state']."'<br>";
echo "Payment related_resources:". $related_resource_count . "(". $related_resources.")";
echo "<br> <br>";
echo "###########################################<br>";
echo "Obtaining Payment Details... <br>";
$json_resp = make_get_call($payment_detail_url);
echo "Payment details obtained for: " . $json_resp['id'] ." with state '". $json_resp['state']. "'";
echo "<br> <br>";
echo "###########################################<br>";
echo "Obtaining Sale details...<br>";
$json_resp = make_get_call($sale_detail_url);
echo "Sale details obtained for: " . $json_resp['id'] ." with state '". $json_resp['state']."'";
echo "<br> <br>";
echo "###########################################<br>";
echo "Refunding a Sale... <br>";
$refund = array(
        'amount' => array(
            'total' => '7.47',
            'currency' => 'USD'
            )
           );
$json = json_encode($refund);
$json_resp = make_post_call($refund_url, $json);
echo "Refund processed " . $json_resp['id'] ." with state '". $json_resp['state']."'";
echo "<br> <br>";
echo "###########################################<br>";
echo "Obtaining Sale details...<br>";
$json_resp = make_get_call($sale_detail_url);
echo "Sale details obtained for: " . $json_resp['id'] ." with state '". $json_resp['state']."'";
echo "<br> <br>";
echo "###########################################<br>";
echo "Obtaining Payment Details... <br>";
$json_resp = make_get_call($payment_detail_url);
$related_resource_count = 0;
$related_resources = "";
foreach ($json_resp['transactions'] as $transaction) {
    if($transaction['related_resources']) {
        $related_resource_count = count($transaction['related_resources']);
        foreach ($transaction['related_resources'] as $related_resource) {
            if($related_resource['sale']){
                $related_resources = $related_resources."sale ";
            } else if($related_resource['refund']){
                $related_resources = $related_resources."refund";
            }
        }

    }
}

echo "Payment details obtained for: " . $json_resp['id'] ." with state '". $json_resp['state']. "' <br>";
echo "Payment related_resources:". $related_resource_count . "(". $related_resources.")";
echo "<br> <br>";
echo "###########################################<br>";
echo "Saving a Credit Card in vault... <br>";
$url = $host.'/v1/vault/credit-card';
$creditcard = array(
        'payer_id' => 'testuser@yahoo.com',
        'number' => '4417119669820331',
        'type'   => 'visa',
        'expire_month' => 11,
        'expire_year' => 2018,
        'first_name' => 'John',
        'last_name' => 'Doe'
        );
$json = json_encode($creditcard);
$json_resp = make_post_call($url, $json);
$credit_card_id = $json_resp['id'];
echo "Credit Card saved ".$credit_card_id." with state '".$json_resp['state']."'";
echo "<br> <br>";
echo "###########################################<br>";
echo "Making a Payment with saved credit card... <br>";
$url = $host.'/v1/payments/payment';
$payment = array(
                'intent' => 'sale',
                'payer' => array(
                        'payment_method' => 'credit_card',
                        'funding_instruments' => array ( array(
                                        'credit_card_token' => array (
                                                'credit_card_id' => $credit_card_id,
                                                'payer_id' => 'testuser@yahoo.com'
                                                )
                                        ))
                        ),
                'transactions' => array (array(
                                'amount' => array(
                                        'total' => '7.47',
                                        'currency' => 'USD'
                                        ),
                                'description' => 'payment using a saved card'
                                ))
                );
$json = json_encode($payment);
$json_resp = make_post_call($url, $json);
echo "Payment Created successfully: " . $json_resp['id'] ." with state '". $json_resp['state']."'<br>";
echo "<br> <br>";
echo "###########################################<br>";
echo "Obtaining all Payments (list) ... <br>";
$payment_list_url = $host.'/v1/payments/payment?start_id=PAY-1JJ14633E59990232KE6QU3I';
$json_resp = make_get_call($payment_list_url);
echo "Number of Payment resources returned: " . count($json_resp['payments']);
$counter = 0;
foreach ($json_resp['payments'] as $payment) {
    echo "<br>" . $counter++ . ". " . $payment['id'];
}
echo "<br>Next Payment ID: ". $json_resp['next_id'];
echo "<br>Obtaining subset (2-4) of the Payments ... <br>";
$payment_list_url = $host.'/v1/payments/payment?start_index=1&count=3';
$json_resp = make_get_call($payment_list_url);
echo "Number of Payment resources returned: " . count($json_resp['payments']);
$counter = 0;
foreach ($json_resp['payments'] as $payment) {
        echo "<br>" . $counter++ . ". " . $payment['id'];
}
echo "<br>Next Payment ID: ". $json_resp['next_id'];
echo "<br>Obtaining the next 10 starting from the previous next_id ... <br>";
$payment_list_url = $host.'/v1/payments/payment?start_id='.$json_resp['next_id'];
$json_resp = make_get_call($payment_list_url);
echo "Number of Payment resources returned: " . count($json_resp['payments']);
$counter = 0;
foreach ($json_resp['payments'] as $payment) {
        echo "<br>" . $counter++ . ". " . $payment['id'];
}
echo "<br> <br>";
echo "###########################################<br>";
echo "Making a Credit Card Authorization... <br>";
$url = $host.'/v1/payments/payment';
$payment = array(
                'intent' => 'authorize',
                'payer' => array(
                        'payment_method' => 'credit_card',
                        'funding_instruments' => array ( array(
                                        'credit_card' => array (
                                                'number' => '5500005555555559',
                                                'type'   => 'mastercard',
                                                'expire_month' => 12,
                                                'expire_year' => 2018,
                                                'cvv2' => 111,
                                                'first_name' => 'Joe',
                                                'last_name' => 'Shopper'
                                                )
                                        ))
                        ),
                'transactions' => array (array(
                                'amount' => array(
                                        'total' => '7.47',
                                        'currency' => 'USD'
                                        ),
                                'description' => 'payment by a credit card using a test script'
                                ))
                );
$json = json_encode($payment);
$json_resp = make_post_call($url, $json);
foreach ($json_resp['links'] as $link) {
        if($link['rel'] == 'self'){
                $payment_detail_url = $link['href'];
                $payment_detail_method = $link['method'];
        }
}
$related_resource_count = 0;
$related_resources = "";
foreach ($json_resp['transactions'] as $transaction) {
        if($transaction['related_resources']) {
                $related_resource_count = count($transaction['related_resources']);
                foreach ($transaction['related_resources'] as $related_resource) {
                        if($related_resource['authorization']){
                                $related_resources = $related_resources."authorization ";
                                $authorization = $related_resource['authorization'];
                                foreach ($authorization['links'] as $link) {
                                        if($link['rel'] == 'self'){
                                                $auth_detail_url = $link['href'];
                                                $auth_detail_method = $link['method'];
                                        }else if($link['rel'] == 'refund'){
                                                $refund_url = $link['href'];
                                                $refund_method = $link['method'];
                                        }else if($link['rel'] == 'void'){
                                                $void_url = $link['href'];
                                                $void_method = $link['method'];
                                        }else if($link['rel'] == 'capture'){
                                                $capture_url = $link['href'];
                                                $capture_method = $link['method'];
                                        }
                                }
                        } else if($related_resource['refund']){
                                $related_resources = $related_resources."refund";
                        }
                }
        }
}

echo "Payment Created successfully: " . $json_resp['id'] ." with state '". $json_resp['state']."'<br>";
echo "Payment related_resources:". $related_resource_count . "(". $related_resources.")";
echo "<br> <br>";
echo "###########################################<br>";
echo "Obtaining Payment Details... <br>";
$json_resp = make_get_call($payment_detail_url);
echo "Payment details obtained for: " . $json_resp['id'] ." with state '". $json_resp['state']. "'";
echo "<br> <br>";
echo "###########################################<br>";
echo "Obtaining Authorization details...<br>";
$json_resp = make_get_call($auth_detail_url);
echo "Authorization details obtained for: " . $json_resp['id'] ." with state '". $json_resp['state']."'";
echo "<br> <br>";
echo "###########################################<br>";
echo "Capturing Authorization ...<br>";
$capture = array(
                'amount' => array(
                        'total' => '5.47',
                        'currency' => 'USD'
                        )
               );
$json = json_encode($capture);
$json_resp = make_post_call($capture_url, $json);
echo "Capture processed " . $json_resp['id'] ." with state '". $json_resp['state']."'";
foreach ($json_resp['links'] as $link) {
        if($link['rel'] == 'self'){
                $capture_detail_url = $link['href'];
                $capture_detail_method = $link['method'];
        }else if($link['rel'] == 'refund'){
                    $refund_url = $link['href'];
                    $refund_method = $link['method'];
            }
}
echo "<br> <br>";
echo "###########################################<br>";
echo "Obtaining Authorization details...<br>";
$json_resp = make_get_call($auth_detail_url);
echo "Authorization details obtained for: " . $json_resp['id'] ." with state '". $json_resp['state']."'";
echo "<br> <br>";
echo "###########################################<br>";
echo "Obtaining Capture details...<br>";
$json_resp = make_get_call($capture_detail_url);
echo "Capture details obtained for: " . $json_resp['id'] ." with state '". $json_resp['state']."'";
echo "<br> <br>";
echo "###########################################<br>";
echo "Refunding a Capture... <br>";
$refund = array(
                'amount' => array(
                        'total' => '2.47',
                        'currency' => 'USD'
                        )
               );
$json = json_encode($refund);
$json_resp = make_post_call($refund_url, $json);
echo "Refund processed " . $json_resp['id'] ." with state '". $json_resp['state']."'";
echo "<br> <br>";
echo "###########################################<br>";
echo "Obtaining Capture details...<br>";
$json_resp = make_get_call($capture_detail_url);
echo "Capture details obtained for: " . $json_resp['id'] ." with state '". $json_resp['state']."'";
echo "<br> <br>";
echo "###########################################<br>";
echo "Voiding Authorization ...<br>";
$void = array();
$json = json_encode($void);
$json_resp = make_post_call($void_url, $json);
echo "Void processed " . $json_resp['id'] ." with state '". $json_resp['state']."'";
echo "<br> <br>";
echo "###########################################<br>";
echo "Obtaining Authorization details...<br>";
$json_resp = make_get_call($auth_detail_url);
echo "Authorization details obtained for: " . $json_resp['id'] ." with state '". $json_resp['state']."'";
echo "<br> <br>";
echo "###########################################<br>";
echo "Obtaining parent Payment Details for the Authorization ... <br>";
$json_resp = make_get_call($payment_detail_url);
$related_resource_count = 0;
$related_resources = "";
foreach ($json_resp['transactions'] as $transaction) {
        if($transaction['related_resources']) {
                $related_resource_count = count($transaction['related_resources']);
                foreach ($transaction['related_resources'] as $related_resource) {
                        if($related_resource['authorization']){
                                $related_resources = $related_resources."authorization ";
                        } else if($related_resource['capture']){
                                $related_resources = $related_resources."capture ";
                        } else if($related_resource['refund']){
                                $related_resources = $related_resources."refund ";
                           }
                }

        }
}

echo "Payment details obtained for: " . $json_resp['id'] ." with state '". $json_resp['state']. "' <br>";
echo "Payment related_resources:". $related_resource_count . "(". $related_resources.")";
echo "<br> <br>";

die;
//END CREDIT CARD FUNCTIONS

//Paypal Payment
echo "###########################################<br>";
echo "Initiating a Payment with PayPal Account... <br>";
$url = $host.'/v1/payments/payment';
$payment = array(
                'intent' => 'sale',
                'payer' => array(
                        'payment_method' => 'paypal'
        ),
                'transactions' => array (array(
                                'amount' => array(
                                        'total' => '7.47',
                                        'currency' => 'USD'
                                        ),
                                'description' => 'payment using a PayPal account'
                                )),
        'redirect_urls' => array (
            'return_url' => 'http://project.aimlessmedia.com/001/return.php?cancelled=0&returned=1',
            'cancel_url' => 'http://project.aimlessmedia.com/001/return.php?cancelled=1&returned=1'
        )
                );
$json = json_encode($payment);
$json_resp = make_post_call($url, $json);
foreach ($json_resp['links'] as $link) {
    if($link['rel'] == 'execute'){
        $payment_execute_url = $link['href'];
        $payment_execute_method = $link['method'];
    } else  if($link['rel'] == 'approval_url'){
            $payment_approval_url = $link['href'];
            $payment_approval_method = $link['method'];
        }
}
echo "Payment Created successfully: " . $json_resp['id'] ." with state '". $json_resp['state']."'<br><br>";
echo "Please goto ".$payment_approval_url." in your browser and approve the payment with a PayPal Account.<br>";
echo "Enter PayerId from the return url to continue:";
$payerId = read_stdin();
echo "<br> <br>";
echo "###########################################<br>";
echo "Executing the PayPal Payment for PayerId (".$payerId.")... <br>";
$payment_execute = array(
        'payer_id' => $payerId
           );
$json = json_encode($payment_execute);
$json_resp = make_post_call($payment_execute_url, $json);
echo "Payment Execute processed " . $json_resp['id'] ." with state '". $json_resp['state']."'";
echo "<br> <br>";


?>
#/usr/bin/php

我认为目前还不支持用信用卡支付收件人的电子邮件

检查此处:(向下滚动至“验证问题”)

目前不支持通过电子邮件指定收款人

您当前不能使用电子邮件指示收款人