PayPalã¨ã¯ã€ä¸–ç•Œå„地ã§åˆ©ç”¨ã•ã‚Œã¦ã„るオンラインã®ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆæ±ºæ¸ˆã‚µãƒ¼ãƒ“スã§ã™ã€‚
ショッピングサイトãªã©ã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³æ±ºæ¸ˆãŒå¿…è¦ãªã‚µã‚¤ãƒˆã§ã‚ˆã利用ã•ã‚Œã¦ã„ã¾ã™ã€‚
ã“ã®è¨˜äº‹ã§ã¯ã€PHPã§PayPalã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³æ±ºæ¸ˆå‡¦ç†ã‚’実装ã™ã‚‹æ–¹æ³•ã‚’紹介ã—ã¾ã™ã€‚
デベãƒãƒƒãƒ‘ーã®ãƒšãƒ¼ã‚¸ã§ã¯ã€C#ã€VBã€VBScriptã€Coldfusionã€Java/JSPã€PERLã€PHPã®ã‚µãƒ³ãƒ—ルコードãŒç”¨æ„ã•ã‚Œã¦ã„ã¾ã™ã€‚
ã¾ãŸã€ãã®ä»–ã®è¨€èªžã§ã‚‚基本的ãªã“ã¨ã¯åŒã˜ãªã®ã§å‚考ã«ã—ã¦ã¿ã¦ãã ã•ã„。
PaypalSandboxを利用ã™ã‚‹ã“ã¨ã§ã€æ±ºæ¸ˆã‚µãƒ¼ãƒ“スã®ãƒ†ã‚¹ãƒˆç’°å¢ƒã‚’構築ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
テスト環境ã®æ§‹ç¯‰æ‰‹é †ã¯ç°¡å˜ã§ã™ã€‚
1. PayPalアカウントã®ä½œæˆ
2. Sandbox accountsã®ç”»é¢ã§ã€Personalã¨Businessã®2ã¤ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’作æˆ
3. 上記ã®ãƒ†ã‚¹ãƒˆã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§æ¤œè¨¼
通常ã®æ±ºæ¸ˆå‡¦ç†ã§ã¯ã€www.paypal.comを使用ã—ã¾ã™ãŒã€ãƒ†ã‚¹ãƒˆç”¨ã¯www.sandbox.paypal.comã¨ãªã‚Šã¾ã™ã€‚
本番ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã‹ã‚‰ãƒ‰ãƒ¡ã‚¤ãƒ³ã‚’テスト用ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã ã‘ã§ã™ã€‚
実際ã«æ±ºæ¸ˆå‡¦ç†ã‚’è¡Œã†ãƒ—ãƒã‚°ãƒ©ãƒ ã¯ä¸‹è¨˜ã‚’ã”覧ãã ã•ã„。
フォームを作æˆã—ã€PayPalã«æƒ…å ±ã‚’æ¸¡ã—ã¾ã™ã€‚
※テスト環境ã®å ´åˆã¯ã€actionãŒã€Œhttps://www.sandbox.paypal.com/cgi-bin/webscrã€ã¨ãªã‚‹ã€‚
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" name="frm1">
<input type="hidden" name="charset" value="UTF-8" />
<input type="hidden" name="cmd" value="_ext-enter" />
<input type="hidden" name="redirect_cmd" value="_xclick" />
<input type="hidden" name="business" value="[売り手ã®PayPalã«ç™»éŒ²ã•ã‚ŒãŸãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹]" />
<input type="hidden" name="item_name" value="Deposit in account" />
<input type="hidden" name="item_number" value="101" />
<input type="hidden" name="amount" value="[金é¡]" />
<input type="hidden" name="invoice" id="invoice" value="[ユニークID]" />
<input type="hidden" name="shipping" value="0" />
<input type="hidden" name="no_shipping" value="2" />
<input type="hidden" name="currency_code" value="JPY" />
<input type="hidden" name="lc" value="en" />
<input name="cancel_return" type="hidden" id="cancel_return" value="[cancel時ã«æˆ»ã‚‹ãƒšãƒ¼ã‚¸ã®ãƒ‘ス]" />
<input name="return" type="hidden" id="return" value="[è¿”ã£ã¦ãるページã®URL]" />
<input name="notify_url" type="hidden" id="notify_url" value="[後処ç†ãƒšãƒ¼ã‚¸ã®ãƒ‘ス]" />
<input type="hidden" name="first_name" value="firstname" />
<input type="hidden" name="last_name" value="lastname" />
<input type="hidden" name="zip" value="xxx-xxxx" />
<input type="hidden" name="city" value="" />
<input type="hidden" name="address1" value="" />
<input type="hidden" name="H_PhoneNumber" value="" />
<input type="hidden" name="email" value="info@example.jp" />
</form>
ã“ã¡ã‚‰ã§ã¯ã€æ±ºæ¸ˆå¾Œã®å¾Œå‡¦ç†ã‚’è¡Œã„ã¾ã™ã€‚
IPNã«æŽ¥ç¶šã—ã¦ã€å‡¦ç†ãŒæ£ã—ã„ã‹ãƒã‚§ãƒƒã‚¯ã—ãŸã‚Šã€DBをアップデートã—ãŸã‚Šã—ã¾ã™ã€‚
※テスト環境ã®å ´åˆã¯ã€HostãŒã€Œwww.sandbox.paypal.comã€ã¨ãªã‚‹ã€‚
$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
$header .= "POST /cgi-bin/webscr HTTP/1.1¥r¥n";
$header .= "Content-Type: application/x-www-form-urlencoded¥r¥n";
$header .= "Content-Length: " . strlen($req) . "¥r¥n";
$header .= "Host: www.paypal.com¥r¥n";
$header .= "Connection: close¥r¥n";
$header .= "¥r¥n";
$fp = fsockopen ("ssl://www.paypal.com", 443, $errno, $errstr, 30);
//paypalã‹ã‚‰ã®æƒ…å ±å–å¾—
$item_name = $_POST['item_name'];
$item_number = $_POST['item_number'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$Invoice = isset($_POST['invoice']) ? $_POST['invoice'] : "0";
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];
$fname = $_POST['first_name'];
$lname = $_POST['last_name'];
$memail = $_POST['payer_email'];
if (!$fp) {
//error
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp(trim($res), "VERIFIED") == 0) {
//success
} else if (strcmp(trim($res), "INVALID") == 0) {
//error
}
}
fclose ($fp);
}