我已經構建了一個應用程序,該應用程序向PayPal發送一個包含登錄用戶的GUID的通知url,購買完成後調用該url,並且在驗證之後,用戶數據庫條目將purchased
列從0更新爲1.PayPal的生產工作與沙盒不同
然後,用戶單擊返回到應用程序按鈕,然後基於purchased
列顯示高級功能。
我在沙盒中過去幾個月一直在測試這個。 100%的測試時間(包括此問題後),購買完成後顯示高級選項卡。
客戶非常興奮,並且繼續前進到生產。我已經建立IPN與完全相同的URL,除了從www.sandbox.paypal.com切換到www.paypal.com並將沙箱業務列出的帳戶更改爲個人業務外,我幾乎完全沒有改變。
這個問題是,按鈕現在不顯示,直到,你刷新屏幕。點擊之前按預期工作的「返回到應用程序」按鈕,現在不顯示高級選項卡。一旦我點擊刷新 - 然後顯示。如果我把所有的東西都切換回沙箱設置,繁榮 - 它再次正常工作。
這裏是現在購買按鈕的代碼與生產賬戶:
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" id="buynowForm" target="_top">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="ACCOUNT EMAIL">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_name" value="Product">
<input type="hidden" name="amount" value="10.00">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="button_subtype" value="services">
<input type="hidden" name="no_note" value="1">
<input type="hidden" name="no_shipping" value="1">
<input type='hidden' name='notify_url' value='http://app.com/purchase/<?php echo $data[0]['uid'] ?>'>
<input type='hidden' name='return' value='http://app.com/'>
<input type="hidden" name="rm" value="1">
<input type="hidden" name="cbt" value="Return to Product Plus">
<input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynowCC_LG.gif:NonHosted">
<input type="submit" class="hidden-print visible-print" border="0" name="buysubmit" value="Click For Product Plus" alt="Click for Product Plus">
<img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
,這裏是上面叫工藝路線:
$app->post('/purchase/:uid', function ($uid) use ($app) {
$request = Slim::getInstance()->request();
$inputs = json_decode($request->getBody());
$db_conn = conn();
$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value)
{
if (get_magic_quotes_gpc())
{
$_POST[$key] = stripslashes($value);
$value = stripslashes($value);
}
$value = urlencode($value);
$req .= "&$key=$value";
}
$url = "https://www.paypal.com/cgi-bin/webscr";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
$result = curl_exec($ch);
curl_close($ch);
if (strcmp ($result, "VERIFIED") == 0)
{
$sql_st = 'UPDATE `user_data` SET `purchased` = 1 WHERE uid=:uid';
$sql = $db_conn->prepare($sql_st);
if ($sql->execute(array('uid'=>$uid))) {
$data = array('status' => "Ok");
} else {
$data = array('status' => print_r(mysql_error()));
}
}
else
{
// Did Not Process IPN Properly
}
});
真的希望這只是事情對我而言難以置信的愚蠢。任何幫助/指導表示讚賞。
技術支持,順便說一句,在這裏沒有任何幫助。仍然不確定如何解決。在滯後或隊列中找不到任何東西,可能導致速度減慢。感覺非常難倒。 –
這令人難以置信的令人沮喪。測試也是有問題的,因爲唯一的測試方法是使用沙箱(我認爲是這樣)。如果測試的唯一方法是沙箱,並且它完美地工作,那麼它應該在生產中工作...... UGH! –
它似乎是即時付款通知不是即時的。似乎需要大約10-15秒,最有可能在隊列中。在解決問題的過程中,希望儘快報告。 –