Я работаю над интеграцией своего сайта с PayPal и получением его для работы в режиме песочницы. Я работаю в Codeigniter (PHP). Я получил уведомления IPN отлично, но не могу понять, где я ошибаюсь в PDT (нужно это, чтобы показать правильную страницу подтверждения и вернуться). Я много раз проверял токен идентификации, убедился, что файл htaccess не ограничивает доступ к обратному вызову, убедился, что электронное письмо проверено для бизнес-поля, убедитесь, что все идет в песочницу, а не на сайте, и сделана верный автозапуск включен с правильными параметрами, и даже попросил техническую поддержку (без получения какой-либо полезной помощи). Но я продолжаю получать возврат ($ response) от «FAIL» с кодом ошибки 4002. Любая помощь в том, как отлаживать это, будет с благодарностью.Ошибка передачи данных Paypal (PDT) 4002
Вот моя форма:
<form class="paypal login" action="http://########.com/paypal/purchase" method="post" id="paypal_form">
<fieldset id="inputs">
<input type="hidden" name="first_name" value="">
<input type="hidden" name="last_name" value="">
<input type="hidden" name="email" value="">
<input type="hidden" name="quantity" value="">
<input type="hidden" name="order_tc_id" value="###########">
</fieldset>
<fieldset id="actions">
<input type="submit" id="paypal-btn" class="paypal-order" alt="Order" value="Purchase"/>
</fieldset>
</form>
Вот где он идет:
$querystring = '?';
$querystring .= "business=".urlencode("[email protected]#######.net")."&";
$querystring .= "cmd=".urlencode("_xclick")."&";
$querystring .= "amount=".urlencode(krw_usd($items_no_tax_price))."&";
$querystring .= "rm=".urlencode(2)."&";
$querystring .= "quantity=".urlencode($quant)."&";
$querystring .= "first_name=".urlencode($first_name)."&";
$querystring .= "last_name=".urlencode($last_name)."&";
$querystring .= "email=".urlencode($email)."&";
$querystring .= "currency_code=".urlencode("USD")."&";
$querystring .= "return=".urlencode(stripslashes($return_url))."&";
$querystring .= "cancel_return=".urlencode(stripslashes($cancel_url))."&";
$querystring .= "notify_url=".urlencode(stripslashes($notify_url));
header('location:https://www.sandbox.paypal.com/cgi-bin/webscr'.$querystring);
А вот возвращение URL:
$request = curl_init();
curl_setopt_array($request, array
(
CURLOPT_URL => 'https://www.sandbox.paypal.com/cgi-bin/webscr',
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => http_build_query(array
(
'cmd' => '_notify-synch',
'tx' => $tx,
'at' => '#############################',
)),
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_HEADER => 0,
));
$response = curl_exec($request);
$status = curl_getinfo($request, CURLINFO_HTTP_CODE);
curl_close($request);
$response = substr($response, 7);
$response = urldecode($response);
preg_match_all('/^([^=\s]++)=(.*+)/m', $response, $m, PREG_PATTERN_ORDER);
$response = array_combine($m[1], $m[2]);
if(isset($response['charset']) AND strtoupper($response['charset']) !== 'UTF-8')
{
foreach($response as $key => &$value)
{
$value = mb_convert_encoding($value, 'UTF-8', $response['charset']);
}
$response['charset_original'] = $response['charset'];
$response['charset'] = 'UTF-8';
}
ksort($response);
foreach($response as $k=>$v)
{
echo "Key: " . $k . ", Value: " . $v;
echo "<br>";
}
Кажется, что проблема с возвратом url и paypal не может вернуться после оплаты и дает вам 4002 (Внутренняя ошибка). Пожалуйста, убедитесь, что вы можете связаться с возвращаемым URL-адресом, указанным вами –
Спасибо за ответ, но я думаю, что возвращаемый URL-адрес определенно доступен, потому что перенаправление идет туда идеально. И уведомление IPN не имеет проблем попасть на свою страницу с аналогичным маршрутом с теми же настройками. – briamkin