0

私はしばらくの間これに取り組んでいます。注文ページがあり、顧客は名前、住所などの情報と、さらにいくつかの固有のフィールドを入力する必要があります。PaypalでIPNを設定しましたが、指定したページに顧客がリダイレクトされます。しかし、データはそれに付随していません。「閉ざされ」ないように、きちんと質問しているといいのですが。これが彼らのページにリダイレクトするPaypal送信ボタンのHTMLです。

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="NT2YC6LP7SWBE">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_paynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<input type="hidden" name="child_name" id="child_name" value ="<? echo $child_name; ?>" maxlength="20"/>
<input type="hidden" name="age" id="age" value ="<? echo $age; ?>" maxlength="4"/>
<input type="hidden" name="hometown" id="hometown" value ="<? echo $hometown; ?>" maxlength="32"/>
<input type="hidden" name="boy_girl" id="boy_girl" value ="<? echo $boy_girl; ?>" maxlength="4"/>
<input type="hidden" name="first_name" id="first_name" value ="<? echo $first_name; ?>" maxlength="32"/>
<input type="hidden" name="last_name" id="last_name" value ="<? echo $last_name; ?>" maxlength="32"/>
<input type="hidden" name="email" id="email" value ="<? echo $email; ?>" maxlength="64"/>
<input type="hidden" name="address1" id="address1" value ="<? echo $address1; ?>" maxlength="64"/>
<input type="hidden" name="address2" id="address2" value ="<? echo $address2; ?>" maxlength="32"/>
<input type="hidden" name="city" id="city" value ="<? echo $city; ?>" maxlength="32"/>
<input type="hidden" name="state" id="state" value ="<? echo $state; ?>" maxlength="20"/>
<input type="hidden" name="zip" id="zip" value ="<? echo $zip; ?>" maxlength="10"/>
<input type="hidden" name="country" id="country" value ="<? echo $country; ?>" maxlength="32"/>
<input type="hidden" name="payment_type" id="payment_type" value ="paypal" maxlength="6"/>
<input type="hidden" name="paid" id="paid" value ="yes" maxlength="3"/>
<input type="hidden" name="mailed" id="mailed" value ="no" maxlength="3"/>
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>

一部の変数は「Paypal変数」ではないことが指摘されており、後で修正できますが、Paypalがサポートしている変数でさえ、Paypalにアクセスした後、指定したページに戻るデータはありません。街。" これが、リダイレクト先のページにあるPHPです。

$raw_post_data = file_get_contents('php://input');
$raw_post_array = explode('&', $raw_post_data);
$myPost = array();
foreach ($raw_post_array as $keyval) {
  $keyval = explode ('=', $keyval);
  if (count($keyval) == 2)
     $myPost[$keyval[0]] = urldecode($keyval[1]);
}
$req = 'cmd=_notify-validate';
if(function_exists('get_magic_quotes_gpc')) {
   $get_magic_quotes_exists = true;
} 
foreach ($myPost as $key => $value) {        
   if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) { 
        $value = urlencode(stripslashes($value)); 
   } else {
        $value = urlencode($value);
   }
   $req .= "&$key=$value";
}

$ch = curl_init('https://www.paypal.com/cgi-bin/webscr');
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));

if( !($res = curl_exec($ch)) ) {
    // error_log("Got " . curl_error($ch) . " when processing IPN data");
    curl_close($ch);
    exit;
}
curl_close($ch);

if (strcmp ($res, "VERIFIED") == 0) {
        $child_name = htmlentities($_POST['child_name']);
        $age = $_POST['age'];
        $hometown = $_POST['hometown'];
        $boy_girl = $_POST['boy_girl'];
        $email = $_POST['email'];
        $first_name = htmlentities($_POST['first_name']);
        $last_name = htmlentities($_POST['last_name']);
        $address1 = htmlentities($_POST['address1']);
        $address2 = htmlentities($_POST['address2']);
        $city = htmlentities($_POST['city']);
        $state = $_POST['state'];
        $zip = htmlentities($_POST['zip']);
        $country = htmlentities($_POST['country']);
        $payment_type = $_POST['payment_type'];
        $paid = $_POST['paid'];
        $mailed = $_POST['mailed'];
} else if (strcmp ($res, "INVALID") == 0) {
}       

        $query = "INSERT INTO customer_list (
        number, child_name, age, hometown, boy_girl, first_name, last_name, email,
        address1, address2, city, state, zip, country, payment_type, paid, mailed)
        VALUES ('', 
        '".mysql_real_escape_string($child_name)."',
        '".mysql_real_escape_string($age)."',
        '".mysql_real_escape_string($hometown)."',
        '".mysql_real_escape_string($boy_girl)."',
        '".mysql_real_escape_string($first_name)."',
        '".mysql_real_escape_string($last_name)."',
        '".mysql_real_escape_string($email)."',
        '".mysql_real_escape_string($address1)."',
        '".mysql_real_escape_string($address2)."',
        '".mysql_real_escape_string($city)."',
        '".mysql_real_escape_string($state)."',
        '".mysql_real_escape_string($zip)."',
        '".mysql_real_escape_string($country)."',
        '".mysql_real_escape_string($payment_type)."',
        '".mysql_real_escape_string($paid)."',
        '".mysql_real_escape_string($mailed)."')";
            if ($query_run = mysql_query($query)) {

                $subject = "Thank You for Your Order";
                $message = "Thank you for placing your order with My-Letter-From-Santa-Claus.com. \n\nYou can expect to receive your personalized letter soon. Please make note of your customer number. Your customer number is: ".mysql_insert_id().". \n\nPlease send all inquiries to : info@my-letter-from-santa-claus.com";
                $from = "info@my-letter-from-santa-claus.com";
                $headers = "From:" . $from;
                mail($email, $subject, $message, $headers);
                echo 'Thank you for your order.';
                echo 'Letter For '.$child_name;
            } else {
                echo mysql_error();
            }

もちろん、自分の変数に変更することを除いて、ほとんどをx.comから直接コピーしました。データベースには何も投稿されていませんが、データをエコーすることさえできないので、それは問題ではありません。いくつかのものがデータベースに入力されていますが、それは私の注文ページからのデータではありません-それはPaypalのクレジットカード情報として入力される名と姓であり、payment_typeの場合は「instan」と表示されます(私はそれを最大にしました6文字で)しかし、HTMLの非表示の入力フィールドからわかるように、値「paypal」を投稿したいと思いました。これを修正するにはどうすればよいですか?

4

2 に答える 2

2

テストに Paypal Sandbox を使用していますか? そうでない場合は、https: //developer.paypal.com/とマニュアルを強くお勧めします: https://cms.paypal.com/cms_content/US/en_US/files/developer/PP_Sandbox_UserGuide.pdf

コードにフィールド name="business" が表示されません。これは、Paypal が出品者アカウントを識別するために使用するフィールドです。しかし、おそらくそれは「cmd」パラメータと関係があるだけです(私は_xclickを使用しています)。

これは、現時点で私にとって機能する一連のフィールドです。おそらく役立つでしょう。

<form name="_xclick" action="https://www.paypal.com/de/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_xclick">
    <input type="hidden" name="business" value="seller_email_here">
    <input type="hidden" name="notify_url" value="ipn_url_here">
    <input type="hidden" name="return" value="redirect_url">
    <input type="hidden" name="cancel_return" value="redirect_if_cancelled_url">
    <input type="hidden" name="amount" value="number_of_items">
    <input type="hidden" name="currency_code" value="EUR">
    <input type="hidden" name="item_name" value="product_name">
    <input type="hidden" name="item_number" value="product_number">
于 2012-11-12T20:56:13.563 に答える
0

問題は、ホストされたボタンを使用していることです。それらの一般的なHTMLにカスタムのものを含めることはできません。含めることができる唯一のカスタムフィールドは、PayPalボタン作成ウィザードで実行する必要があります。

また、IPNとPDTを混同しないようにする必要があります。支払い完了後にユーザーが送信されるリターンURLにデータを戻すだけの場合は、PDTになります。ただし、これを使用して後注文処理を処理することはお勧めしません。これは、ユーザーがそこに到達する保証がないためです。

IPNは、何があってもトリガーされるため、そのために使用できますが、これも、チェックアウトやPDTとはまったく別のものです。

PHPにも精通しているようですので、標準のボタンの代わりにExpressCheckoutを使用することを強くお勧めします。これを非常に簡単にするPayPal用のPHPクラスライブラリがあります。必要に応じて30分の無料トレーニングを提供できます。これは通常、あなたがいる限り、人々を稼働させるのに十分です。 PHPと配列データの操作方法を理解している。

Standardでも実行できますが、@AndreiHardauが表示しているホストボタンの使用をやめる必要があります。これにより、address1、address2、address_overideなどの追加フィールドを含めることができ、それらのフィールドはIPN、PDT、およびGetTransactionDetailsで返されます。

于 2012-11-12T23:12:40.723 に答える