define('PP_USER', '(paypalから取得)');
define('PP_PWD', '(paypalから取得)');
define('PP_SIGNATURE', '(paypalから取得)');
define('PP_CALLBACK', '(自分のcallback)');

サンドボックス
define('PP_TOKEN', 'https://api-3t.sandbox.paypal.com/nvp');
define('PP_PAYPAL', 'https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&useraction=commit&token=');

本番
define('PP_TOKEN', 'https://api-3t.paypal.com/nvp');
define('PP_PAYPAL', 'https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=');



・呼び出し
$POST_DATA = array(
'USER' => PP_USER,
'PWD' => PP_PWD,
'SIGNATURE' => PP_SIGNATURE,
'METHOD' => 'SetExpressCheckout',
'VERSION' => 124,
'PAYMENTREQUEST_0_AMT' => 1000,
'PAYMENTREQUEST_0_CURRENCYCODE' => 'JPY',
'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
'cancelUrl' => PP_CALLBACK,
'returnUrl' => PP_CALLBACK,
'LOCALECODE' => 'JP', // ここを変更すれば、paypal loginの言語を変更できる
);

$curl = curl_init(PP_TOKEN);

curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($POST_DATA));
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);

$output = curl_exec($curl);
$token = substr($output, 6, 22);

header("Location: ". PP_PAYPAL . $token);



・CALLBACK
$token = $_GET['token'];
$payer_id = $_GET['PayerID'];
// session_start すれば、$_SESSIONも使える。

if (! $payer_id) {
// エラー処理。
// どっかへ戻る。
}

$POST_DATA = array(
'USER' => PP_USER,
'PWD' => PP_PWD,
'SIGNATURE' => PP_SIGNATURE,
'METHOD' => 'DoExpressCheckoutPayment',
'VERSION' => 124,
'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
'PAYMENTREQUEST_0_AMT' => 1000,
'PAYMENTREQUEST_0_CURRENCYCODE' => 'JPY',
'TOKEN' => $token,
'PAYERID' => $payer_id,
);

$curl = curl_init(PP_TOKEN);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($POST_DATA));
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);

$retcd = curl_exec($curl);
$obj = explode('&', $retcd);
$ack;
foreach ($obj as $cc) {
if (strpos($cc, 'ACK=') !== false) {
$ack = str_replace('ACK=', "", $cc);
break;
}
}

if ($ack == "Success") {
// 成功。
// 支払日等をレコードに書き込もう。
// どっかへ戻る。
}
else {
// エラー処理。
 // どっかへ戻る。
}

 

paypal express checkout