suchal / php-paypal-ipn
已分支。一个用于监听和处理来自PayPal服务器的即时支付通知(IPN)的类。
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2024-09-21 02:05:11 UTC
README
警告:版本2.5.1+具有不同的命名空间!现在是wadeshuler\paypalipn
!
分支自:https://github.com/Quixotix/PHP-PayPal-IPN/
分支自优秀的Quixotix PayPal IPN 脚本,该脚本现已停止维护。从现在开始,您应该使用此存储库,因为我已经解决了它的问题,并使其复活。
此分支修复了原始存储库中的已知问题,并根据PayPal文档和当今的标准更新了代码。
注意:SSLv3问题已修复!
这已被修复,并且可以开箱即用,旧的Quixotix
存储库不再工作!
请注意:我仍在整理此包。这些文档中仍有一些原始存储库的残留物,所以请耐心等待。我并不是试图删除他的名字,并给予Quixotix对其原始工作的全部信用。他的存储库自2012年以来就没有更新过,现在是2015年,它不再维护。如果需要我做任何事情,或者重新措辞,以确保他得到适当的信用,请让我知道。
@TODO 重新编码以遵循最佳实践(camelCase等)。
@TODO 完成更新README和文档。
@TODO 添加安全性以验证支付状态已完成以及所有者的PayPal电子邮件地址。
@TODO 更新示例。
要求:PHP >= 5.3
PHP >= 5.3的PayPal即时支付通知(IPN)类(如果您至少不是5.3,那么我帮不上忙!我不会支持已死亡版本!)
在您的PHP IPN脚本中使用IpnListener
类来处理POST数据的编码、向PayPal回发以及解析来自PayPal的响应。
使用Composer安装
现在支持Composer!
Packagist: https://packagist.org.cn/packages/wadeshuler/php-paypal-ipn
composer.json
{
"require": {
"wadeshuler/php-paypal-ipn": "*"
}
}
use wadeshuler\paypalipn\IpnListener;
$listener = new IpnListener();
// default options
$listener->use_sandbox = true;
$listener->use_curl = true;
$listener->follow_location = false;
$listener->timeout = 30;
$listener->verify_ssl = true;
if ($verified = $listener->processIpn())
{
// handle successful ipn request
} else {
// handle invalid ipn request
}
请参阅example\ipn.php
中的示例文件。
功能
- 通过设置
use_sandbox
属性在实时和沙盒之间切换。 - 通过设置
use_ssl
属性支持安全SSL和平文HTTP事务(建议使用SSL)。 - 通过设置
use_curl
属性支持cURL和fsockopen网络库(建议使用cURL)。 - 验证来自PayPal服务器的HTTP "200"响应状态代码。
- 使用
getTextReport()
方法获取整个IPN的详细文本报告,以便在电子邮件和日志中供管理员使用。 - 抛出各种异常以区分代码或服务器配置中的常见错误与无效IPN响应。
入门
此代码面向Web开发者。您应该从概念上了解IPN过程是如何工作的,以及您应该在何时以及为什么使用IPN。阅读PayPal即时支付通知指南是一个好起点。
您还应该有一个PayPal沙盒账户,其中包含一个测试买家账户和一个测试卖家账户。登录到您的沙盒账户后,在“测试工具”菜单下有一个IPN模拟器,您可以使用它来测试您的IPN监听器。
一旦您设置了测试账户,您只需创建一个PHP脚本作为您的IPN监听器。在该脚本中,使用如下所示的IpnListener()
类。对于更详细的示例,请查看源代码中的example/ipn.php
脚本。
<?php
require_once('vendor/autoload.php');
$listener = new \wadeshuler\paypalipn\IpnListener();
$listener->use_sandbox = true;
if ($verified = $listener->processIpn())
{
// Valid IPN
/*
1. Check that $_POST['payment_status'] is "Completed"
2. Check that $_POST['txn_id'] has not been previously processed
3. Check that $_POST['receiver_email'] is your Primary PayPal email
4. Check that $_POST['payment_amount'] and $_POST['payment_currency'] are correct
*/
} else {
// Invalid IPN
}
?>
文档
文档尚未生成,但,在IpnListener.php
文件中包含phpDocumentor风格的文档字符串(注释),解释了重要的公共属性和方法。
我还在我的博客上写了一个更深入的IPN教程:[PayPal IPN with PHP](http://www.micahcarrick.com/paypal-ipn-with-php.html "PayPal IPN with PHP")
示例报告
以下是由getTextReport()
方法返回的报告示例。您可以通过扩展IpnListener()
类或直接在ipn脚本中访问数据来创建自己的报告。
--------------------------------------------------------------------------------
[09/09/2011 8:35 AM] - https://www.sandbox.paypal.com/cgi-bin/webscr (curl)
--------------------------------------------------------------------------------
HTTP/1.1 200 OK
Date: Fri, 09 Sep 2011 13:35:39 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
Set-Cookie: c9MWDuvPtT9GIMyPc3jwol1VSlO=Ch-NORlHUjlmbEm__KG9LupR4mfMfQTkx1QQ6hHDyc0RImWr88NY_ILeICENiwtVX3iw4jEnT1-1gccYjQafWrQCkDmiykNT8TeDUg7R7L0D9bQm47PTG8MafmrpyrUAxQfst0%7c_jG1ZL6CffJgwrC-stQeqni04tKaYSIZqyqhFU7tKnV520wiYOw0hwk5Ehrh3hLDvBxkpm%7cYTFdl0w0YpEqxu0D1jDTVTlEGXlmLs4wob2Glu9htpZkFV9O2aCyfQ4CvA2kLJmlI6YiXm%7c1315575340; domain=.paypal.com; path=/; Secure; HttpOnly
Set-Cookie: cookie_check=yes; expires=Mon, 06-Sep-2021 13:35:40 GMT; domain=.paypal.com; path=/; Secure; HttpOnly
Set-Cookie: navcmd=_notify-validate; domain=.paypal.com; path=/; Secure; HttpOnly
Set-Cookie: navlns=0.0; expires=Thu, 04-Sep-2031 13:35:40 GMT; domain=.paypal.com; path=/; Secure; HttpOnly
Set-Cookie: Apache=10.72.109.11.1315575339707456; path=/; expires=Sun, 01-Sep-41 13:35:39 GMT
X-Cnection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
VERIFIED
--------------------------------------------------------------------------------
test_ipn 1
payment_type instant
payment_date 06:34:51 Sep 09, 2011 PDT
payment_status Completed
address_status confirmed
payer_status verified
first_name John
last_name Smith
payer_email buyer@paypalsandbox.com
payer_id TESTBUYERID01
address_name John Smith
address_country United States
address_country_code US
address_zip 95131
address_state CA
address_city San Jose
address_street 123, any street
business seller@paypalsandbox.com
receiver_email seller@paypalsandbox.com
receiver_id TESTSELLERID1
residence_country US
item_name something
item_number AK-1234
quantity 1
shipping 3.04
tax 2.02
mc_currency USD
mc_fee 0.44
mc_gross 12.34
mc_gross_1 9.34
txn_type web_accept
txn_id 51991334
notify_version 2.1
custom xyz123
charset windows-1252
verify_sign Ah5rOpfPGo5g6FNg95DMPybP51J5AUEdXS1hqyRAP6WYYwaixKNDgQRR