Servlets 贝宝回应?

Servlets 贝宝回应?,servlets,paypal,response,Servlets,Paypal,Response,我已经建立了一个贝宝表单,如下面的例子 <form id="_xclick" name="_xclick" action="https://www.sandbox.paypal.com/webscr" method="post"> <input type="hidden" name="cmd" value="_xclick"> <input type="hidden" name="business" value="bussines email

我已经建立了一个贝宝表单,如下面的例子

<form id="_xclick" name="_xclick" action="https://www.sandbox.paypal.com/webscr" method="post">

      <input type="hidden" name="cmd" value="_xclick">
     <input type="hidden" name="business" value="bussines email goes here">
<input type="hidden" name="currency_code" value="EUR">

<input type="hidden" name="item_name" value="SomeTest">
<input type="hidden" name="amount" value="15.00">

<input type="hidden" name="notify_url" value="http://www.domain.com/notify.jsp">
<input type="hidden" name="return" value="http://www.domain.com">
    <input type="hidden" name="cancel_return" value="www.domain.com">

`

测试部分已成功完成。但我不知道如何使用买家的交易id检索paypal响应,以便更改数据库中有关客户请求的字段


请提供源代码中的paypal响应如何工作的帮助?

您需要的是实现IPN(即时支付通知)。 在您的表单中,notify_url是PayPal将向您发送IPN的url,以便您可以更新数据库。请查看以下链接了解模式详细信息(包括示例源代码):

我还建议您在表单中使用“自定义”字段,以便在IPN期间您可以轻松识别付款

<input type="hidden" name="custom" value="your_order_id">

您可以这样设置paypal通知url(IPN响应url)和成功url:

<input type="hidden" name="notify_url" value="http://localhost/demo/payment.php/ipn_response">                                            
<input type="hidden" name="return" value="http://localhost/demo/payment_successful">

注意不要在该字段中包含符号和字符。它将在生产中间歇性地失败。
     function ipn($ipn_data) {

    define('SSL_P_URL', 'https://www.paypal.com/cgi-bin/webscr');
    define('SSL_SAND_URL', 'https://www.sandbox.paypal.com/cgi-bin/webscr');
    $hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
    if (!preg_match('/paypal\.com$/', $hostname)) {
        $ipn_status = 'Validation post isn\'t from PayPal';
        if ($ipn_data == true) {
            //You can send email as well
        }
        return false;
    }

    // parse the paypal URL
    $paypal_url = ($_REQUEST['test_ipn'] == 1) ? SSL_SAND_URL : SSL_P_URL;
    $url_parsed = parse_url($paypal_url);

    $post_string = '';
    foreach ($_REQUEST as $field => $value) {
        $post_string .= $field . '=' . urlencode(stripslashes($value)) . '&';
    }
    $post_string.="cmd=_notify-validate"; // append ipn command
    // get the correct paypal url to post request to
    $paypal_mode_status = $ipn_data; //get_option('im_sabdbox_mode');
    if ($paypal_mode_status == true)
        $fp = fsockopen('ssl://www.sandbox.paypal.com', "443", $err_num, $err_str, 60);
    else
        $fp = fsockopen('ssl://www.sandbox.paypal.com', "443", $err_num, $err_str, 60);

    $ipn_response = '';

    if (!$fp) {
        // could not open the connection. If loggin is on, the error message
        // will be in the log.
        $ipn_status = "fsockopen error no. $err_num: $err_str";
        if ($ipn_data == true) {
            echo 'fsockopen fail';
        }
        return false;
    } else {
        // Post the data back to paypal
        fputs($fp, "POST $url_parsed[path] HTTP/1.1\r\n");
        fputs($fp, "Host: $url_parsed[host]\r\n");
        fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
        fputs($fp, "Content-length: " . strlen($post_string) . "\r\n");
        fputs($fp, "Connection: close\r\n\r\n");
        fputs($fp, $post_string . "\r\n\r\n");

        // loop through the response from the server and append to variable
        while (!feof($fp)) {
            $ipn_response .= fgets($fp, 1024);
        }
        fclose($fp); // close connection
    }
    // Invalid IPN transaction. Check the $ipn_status and log for details.
    if (!preg_match("/VERIFIED/s", $ipn_response)) {
        $ipn_status = 'IPN Validation Failed';

        if ($ipn_data == true) {
            echo 'Validation fail';
            print_r($_REQUEST);
        }
        return false;
    } else {
        $ipn_status = "IPN VERIFIED";
        if ($ipn_data == true) {
            echo 'SUCCESS';
            print_r($_REQUEST);
        }
        return true;
    }
}

function ipn_response() {
    //mail("sobhagya1411@gmail.com","My subject",print_r($request,true));
    $ipn_data = true;
    if ($this->ipn($_REQUEST)) {
        $this->insert_data($_REQUEST);
    }
}

function issetCheck($post, $key) {
    if (isset($post[$key])) {
        $return = $post[$key];
    } else {
        $return = '';
    }
    return $return;
}


 public function insert_data(){

     $post = $_REQUEST;    

    $item_name= $this->issetCheck($post, 'item_name');         
    $amount = $this->issetCheck($post, 'mc_gross');
    $currency = $this->issetCheck($post, 'mc_currency');
    $payer_email = $this->issetCheck($post, 'payer_email');
    $first_name = $this->issetCheck($post, 'first_name');
    $last_name = $this->issetCheck($post, 'last_name');
    $country = $this->issetCheck($post, 'residence_country');
    $txn_id = $this->issetCheck($post, 'txn_id');
    $txn_type = $this->issetCheck($post, 'txn_type');
    $payment_status = $this->issetCheck($post, 'payment_status');
    $payment_type = $this->issetCheck($post, 'payment_type');
    $payer_id = $this->issetCheck($post, 'payer_id');
    $create_date = date('Y-m-d H:i:s');
    $payment_date = date('Y-m-d H:i:s');

    $paypal_sql = "INSERT INTO ipn_data_tbl (item_name,payer_email,first_name,last_name,amount,currency,country,txn_id,txn_type,payer_id,payment_status,payment_type,create_date,payment_date)
    VALUES ($item_name,'$payer_email','$first_name','$last_name','$amount','$currency','$country','$txn_id','$txn_type','$payer_id','$payment_status','$payment_type','$create_date','$payment_date')";
    mysql_query($paypal_sql); 

}