我有一个非托管按钮来支付Paypal Payments,其中一个变量是:
<input type="hidden" name="amount" value="<?php echo $payment->amount;?>">
这样就完成了Paypal支付,但是我没有在我的POST数据中获得“amount”变量来使用我在notify_url设置的函数进行处理
我正在使用Micah Carrick出色的IPN听众
http://www.micahcarrick.com/paypal-ipn-with-php.html
https://github.com/Quixotix/PHP-PayPal-IPN
是否可以修改processIPN函数以将“amount”(或任何其他)变量发送到我在notify_url设置的函数?我基本上试图确保mc_gross等于最初发送的金额。我可以使用数据库查询来检查mc_gross与预期的数量,但如果我可以将该数量作为POST变量返回,则效率似乎很低。只是不确定更改IPN侦听器是否可行,如果可以,则如何操作!
process_IPN函数供参考:
public function processIpn($post_data=null) {
$encoded_data = 'cmd=_notify-validate';
if ($post_data === null) {
// use raw POST data
if (!empty($_POST)) {
$this->post_data = $_POST;
$encoded_data .= '&'.file_get_contents('php://input');
} else {
throw new Exception("No POST data found.");
}
} else {
// use provided data array
$this->post_data = $post_data;
foreach ($this->post_data as $key => $value) {
$encoded_data .= "&$key=".urlencode($value);
}
}
if ($this->use_curl) $this->curlPost($encoded_data);
else $this->fsockPost($encoded_data);
if (strpos($this->response_status, '200') === false) {
throw new Exception("Invalid response status: ".$this->response_status);
}
if (strpos($this->response, "VERIFIED") !== false) {
return true;
} elseif (strpos($this->response, "INVALID") !== false) {
return false;
} else {
throw new Exception("Unexpected response from PayPal.");
}
}
谢谢你的任何帮助!
答案 0 :(得分:3)
我已经有一段时间了,但是我从脚本中获取了一些代码。这是我制作的Paypal购买按钮的代码。
echo '<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">';
echo '<input type="hidden" name="cmd" value="_xclick">';
echo '<input type="hidden" name="business" value="seller_38292821_biz@email.com">';
echo '<input type="hidden" name="item_name" value="Ebook">';
echo '<input type="hidden" name="item_number" value="'.$booknumber.'">';
echo '<input type="hidden" name="amount" value="9.00">';
echo '<input type="hidden" name="custom" value='.$custom.'>';
echo '<input type="hidden" name="quantity" value="'.$quantity.'">';
echo '<input type="hidden" name="currency_code" value="USD">';
echo '<input type="hidden" name="no_shipping" value="1">';
echo '<input type="hidden" name="no_note" value="1">';
echo '<input type="hidden" name="notify_url" value="http://www.mywebsite.com/ipn.php">';
echo '<input type="hidden" name="return" value="http://www.mywebsite.com/support.php?clearcart=1">';
echo '<input type="hidden" name="cancel_return" value="http://www.mywebsite.com/ipncancel.php?status=cancel">';
echo '<input type="image" name="submit" border="0" src="paypal.gif" alt="PayPal - The safer, easier way to pay online">';
echo '</form>';
我有一个名为“custom”的字段,用于传递我需要进行验证的任何数据。我使用该字段传递进行购买的客户的用户名,当我的监听器脚本(ipn.php)收到POST时,它接受用户名并查询数据库并根据POST的金额检查交易金额如果它们匹配,我会运行另一个查询来更新数据库,以使用该用户名为该帐户提供数字产品。在将数字产品提供给用户帐户之前,必须满足以下条件。
if($quantity == $pendingquantity && $payment_amount == $pendingamount && $payment_currency == "USD" && $payment_status == "Completed"){
//Update database to make the product available for download for the specified account.
}
希望这可能会让你知道如何进行设置。