私は 2 年間使用している php スクリプトを持っており、paypal が http 1.1 に変更されたときに機能するように変更しました。ほぼすべてのトランザクションで機能しましたが、最近失敗し、理由がわかりません。以下はコードです。
応答を見ようとすると失敗します。無効です
住所の非標準文字と何か関係があるのでしょうか?
IPNリクエストを何度も送信しようとしましたが、常に失敗します
function paypal_ipn() {
$req = 'cmd=_notify-validate';
foreach($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&{$key}={$value}";
}
$res = '';
$ch = curl_init(paypal_url());
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'));
$res = curl_exec($ch);
curl_close($ch);
if(PAYPAL_IPN_DEBUG && !empty($_POST)) {
$fname = 'ipn_intial_' . date('Y.m.d-h.i.s', time()) . '.txt';
file_put_contents('log/' . $fname, $req);
$fname = 'ipn_intial_result_' . date('Y.m.d-h.i.s', time()) . '.txt';
file_put_contents('log/' . $fname, $res);
}
if(strcmp($res, "VERIFIED") == 0) {
switch($_POST['txn_type'])
{
case 'web_accept':
$data = array();
$data['name'] = $_POST['first_name'] . ' ' . $_POST['last_name'];
$data['email'] = $_POST['payer_email'];
$data['txn_id'] = $_POST['txn_id'];
$data['payment_status'] = 'Completed';
$res = save_payment($data);
if ($res) {
$data = payment_details(array('txn_id' => $data['txn_id']));
mail_notification($data);
}
break;
case 'subscr_signup':
$params = array();
$params['name'] = $_POST['first_name'] . ' ' . $_POST['last_name'];
$params['email'] = $_POST['payer_email'];
$params['subscr_id'] = $_POST['subscr_id'];
$params['subscr_status'] = 'payment';
$data = save_subscription($params);
subscr_notification($data);
break;
case 'subscr_cancel':
$data = subscr_details(array('subscr_id' => $_POST['subscr_id']));
if ($data)
{
mysql_update('subscriptions', array('subscr_id' => $_POST['subscr_id']), array('subscr_status' => 'cancelled', 'cancel_date' => date('Y-m-d H:i:s')));
}
break;
}
}
if(PAYPAL_IPN_DEBUG && !empty($_POST)) {
$fname = 'ipn_' . date('Y.m.d-h.i.s', time()) . '.txt';
file_put_contents('log/' . $fname, serialize($_POST));
}
}