Paypal Payment Data Transfer(PDT) Error 4002

时间秒杀一切 提交于 2019-12-07 12:12:37

问题


I'm working on integrating my website with paypal and getting it to work in sandbox mode. I am working in Codeigniter (PHP). I have gotten IPN notifications working perfectly but can't seem to figure out where I'm going wrong with PDT(need this to show a proper confirmation page and return). I have checked the identity token numerous times, made sure the htaccess file doesn't limit access on the call back, made sure the email is verified for the business field, made sure everything is going to sandbox and not the live site, and made sure auto-return is enabled with the correct paramters, and even asked technical support(without receiving any useful help). But I keep getting a return ($response) of "FAIL" with an error code of 4002. Any help in how to debug this will be greatly appreciated.

Here is my form:

<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>

Here is where it goes:

$querystring = '?';
$querystring .= "business=".urlencode("paypal@#######.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);

And here is the return 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>";
}

回答1:


$tx_token = strtoupper($_GET['tx']), it`s work.



来源:https://stackoverflow.com/questions/20781504/paypal-payment-data-transferpdt-error-4002

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!