详细参考:
https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_Appx_websitestandard_htmlvariables
定义常量paypalurl
const PAYPAL_URL = 'https://www.sandbox.paypal.com/';
将要传送的数据记录为一个数组
$paypalData = array(
'add' => 1,
'cmd' => '_ext-enter',
'redirect_cmd' => '_xclick',
'business' => $paypalAccount, --------liangliangfeng211@gmail.com这个是收款人的paypal账号
'item_name' => '51customimprint shopping cart',
'item_number' => $order->id,
'first_name' => $address->first_name,
'last_name' => $address->last_name,
'address1' => $address->address1,
'city' => $address->city,
'state' => $address->state_or_province,
'zip' => $address->zip_code,
'amount' => $order->subtotal,
'shipping' => $order->shipping_fee,
'no_note' => 1,
'currency_code' => 'USD',
'lc' => 'US'
);
将这个数组转化为一个url地址
$paypalArguments = array();
foreach($paypalData as $k => $v){
array_push($paypalArguments, $k . '=' . urlencode($v));
}
$paypalUrl = self::PAYPAL_URL . '?' . implode('&', $paypalArguments);
$this->_redirect($paypalUrl);
次に、テストするときに、Paypal インターフェースのアドレスを次のように設定する必要があります:
https://www.sandbox.paypal.com/cgi-bin/webscr
基本プロセス
顧客が支払いを行うと、PayPal は指定された URL (type=”hidden” name=”notify_url” value=” “) のサーバーに通知を送信します。この通知には、顧客のすべての支払い情報 (顧客名、金額など) と暗号化されたコードが含まれます。サーバーは通知を受けると、暗号化コードを含むその情報を安全な PayPal URL に送り返します。 PayPal は、暗号化された文字列をチェックしてトランザクションを認証します。この IPN データの PayPal への返送により「なりすまし」が防止されるため、IPN が PayPal からのものであることを確認できます。検証する際、PayPal は正当性の確認をサーバーに送り返します。
ヒント: 即時支払い通知を有効にするには、ユーザー情報からの通知を受信できる URL を入力する必要があります。
即時支払い通知を有効にすると、支払いを受け取るたびにサーバーが通知を受け取り、この通知は非表示の「FORM POST」で指定された URL に送信され、すべての支払い情報が含まれます。通知の FORM 変数は、このページの下部にリストされています。
PayPal から IPN を受け取るたびに、注文を実行する前に、以下で説明する通知確認プロセスを完了する必要があります。記載された情報を確認することで、取引が正当であることが保証されます。
通知確認 IPN
支払いが PayPal アカウントに入金されたことを確認するには、「receiver_email」として使用される電子メール アドレスが PayPal アカウントに登録され確認されていることを確認する必要があります。
サーバーが即時支払い通知を受信したら、PayPal への HTTP POST を作成して通知を確認する必要があります。 POST は https://www.paypal.com/cgi-bin/webscr
に送信する必要があります。受信したすべてのフォーム変数を受信したとおりに送信する必要があります。また、値「_notify-validate」を持つ「cmd」という名前の変数 (たとえば、cmd=_notify-validate) を POST 文字列に追加する必要があります。
PayPal はこの POST に返信し、返信の本文に「VERIFIED」または「INVALID」という単語を含めます。 VERIFIED の応答を受け取った場合、注文を実行する前に実行する必要があるいくつかのチェックがあります:
「保留中」や「失敗」などの他の結果に対しても IPN が送信されるため、「payment_status」が「完了」であることを確認します。
詐欺師が古い完了したトランザクションを再利用するのを防ぐために、「txn_id」が重複していないか確認してください。
詐欺師のアカウントに支払いが送られるのを防ぐために、「receiver_email」が PayPal アカウントに登録されているメール アドレスであることを確認してください。
他の取引詳細 (商品番号や価格など) をチェックして、価格が変更されていないことを確認したら、IPN データでデータベースを更新し、購入を処理できます。
「無効な」通知を受け取った場合は、不審な通知とみなされ、調査される必要があります。