Php 从cURL付款向paypal IPN添加自定义变量

Php 从cURL付款向paypal IPN添加自定义变量,php,codeigniter,curl,paypal,Php,Codeigniter,Curl,Paypal,我的问题:设置将在IPN上返回的paypal变量 因此,背景: 我正在与CodeIgniter合作,我正在使用一个预先制作的在线库来处理整个paypal的事情。图书馆承担着繁重的工作,而且效果很好。 [这是我正在使用的图书馆][1] 据我所知,该库使用XML格式向paypal发送一个包含所有所需信息的cURL请求,基本上如paypal本身所示[here][2] 这个库的文档记录很差,我不知道如何采取下一步 下一步是,向将显示在IPN上的cURL请求添加数据 确切地说;我会找到一种添加数据的方法,

我的问题:设置将在IPN上返回的paypal变量

因此,背景: 我正在与CodeIgniter合作,我正在使用一个预先制作的在线库来处理整个paypal的事情。图书馆承担着繁重的工作,而且效果很好。 [这是我正在使用的图书馆][1]

据我所知,该库使用XML格式向paypal发送一个包含所有所需信息的cURL请求,基本上如paypal本身所示[here][2]

这个库的文档记录很差,我不知道如何采取下一步

下一步是,向将显示在IPN上的cURL请求添加数据

确切地说;我会找到一种添加数据的方法,我更感兴趣的是这应该是如何结束的

这是cURL请求的一个经典事务部分(根据我收集的信息):

我想知道我需要的信息应该是什么样子的,例如,如果我想传递userID,它会是类似于

"userID":"4",
它应该嵌套在其他参数中吗

如果需要任何其他代码,我会很乐意发布它,我确实广泛地搜索了这个主题,我找到的所有答案都与表单和隐藏字段有关,而不是我的情况(如前所述,paypal是通过使用cURL的PHP函数激发的)

提前谢谢

编辑:

你好!!感谢您的回复,也非常感谢您的精彩演讲:) 我将自适应支付控制器与支付方法结合使用

我刚刚意识到发票ID确实被退回了,这非常合适。 不过,我在您的回答中遗漏了一些内容,IPN没有返回许多字段,包括customerID(这是我尝试使用的,我只是假设没有返回任何内容)

以下是IPN捕获的我的返回论点:

    cmd=_notify-validate
    &transaction_subject=
    &payment_date=12%3A02%3A40+Jan+29%2C+2014+PST
    &txn_type=web_accept
    &last_name=patrick
    &residence_country=US
    &item_name=
    &payment_gross=50.00
    &mc_currency=USD
    &business=test@example.com //not the actual email
    &payment_type=instant
    &protection_eligibility=Ineligible
    &verify_sign=ASsSVovq77sBsVg2xPiCnEG3N9AIAD1pW3tgoSX59hTmz9AA9lT6AH0E
    &payer_status=verified
    &test_ipn=1
    &tax=0.00
    &payer_email=patrick.buyer%40gmail.com
    &txn_id=69J264685H5924531&quantity=0
    &receiver_email=test@example.com //not the actual email
    &first_name=patrick
    &payer_id=5MLPF23854T8Q
    &receiver_id=F5K3CSR99E9WA
    &item_number=
    &payment_status=Completed
    &payment_fee=1.75
    &mc_fee=1.75
    &mc_gross=50.00
    &custom=
    &charset=windows-1252
    &notify_version=3.7
    &ipn_track_id=50879f4bb9d2
似乎并非所有控制器的控件都由IPN返回。 发票将完全符合我的要求,我将按答复进行标记。 非常感谢你的时间和努力

编辑2: $PayPalResult['RawResponse']由于某种原因不存在,我对$PayPalResult进行了var_转储(在adaptive_payment controller中,就在我重定向到paypal之前)

简而言之,我的IPN类正在被调用,但它找不到任何要处理的信息(我已经通过日志确认了这一点,调试显示该类已被调用,但不存在$\u POST数据)

编辑3:

XML请求生成得很好,我测试的特定属性是myownID,它出现在请求中

由于某些原因,虽然没有发送回$u POST信息。 IPN方法中的这一行:

$this->_日志('debug-IPN导出应用程序为'.var_导出($_POST))

在我的日志中显示如下内容: 调试-应用程序的IPN导出为

[XMLRequest] =>
ReturnAllen\u USPAYhttp://httpexample.no-ip.biz/ROOT/index.php/userControllers/regularuserActions/viewShoppingCartAPP-80W284485P519543TmyownIDIsrael109.67.55.127ILSBALANCECREDITCARDhttp://httpexample.no-ip.biz/root/index.php/main/IPN25XXXXXX@gmail.com5SERVICEfalsehttp://httpexample.no-ip.biz/ROOT/index.php/userControllers/regularuserActions/paypalSuccess

编辑:从应用程序IPN接收到我的IPN方法的最新IPN属性

cmd=_notify-validate&
transaction=
&payment_request_date=Sun+Feb+02+08%3A25%3A52+PST+2014
&return_url=http%3A%2F%2Fhttpexample.no-ip.biz%2FROOT%2Findex.php%2FuserControllers%2FregularuserActions%2FpaypalSuccess
&fees_payer=EACHRECEIVER
&ipn_notification_url=http%3A%2F%2Fhttpexample.no-ip.biz%2Froot%2Findex.php%2Fpaypal%2Fpaypal_ipn%2Frunagain
&sender_email=patrick.buyer%40gmail.com
&verify_sign=AFcWxV21C7fd0v3bYYYRCpSSRl31AwGY-gIhQZM2WI9Ae63J.CxI7j4y
&test_ipn=1
&cancel_url=http%3A%2F%2Fhttpexample.no-ip.biz%2FROOT%2Findex.php%2FuserControllers%2FregularuserActions%2FviewShoppingCart
&pay_key=AP-6RR41041VH869594S
&action_type=PAY
&transaction_type=Adaptive+Payment+PAY
&status=COMPLETED
&log_default_shipping_address_in_transaction=false
&charset=windows-1252
&notify_version=UNVERSIONED
&reverse_all_parallel_payments_on_error=false

我是该库的开发人员,我很乐意提供帮助。不过,您发布的JSON内容引用了PayPal新的RESTAPI,我的库并没有使用它。它使用了,这仍然比今天的RESTAPI更成熟,限制更少

您特别使用哪种API?该库附带已设置的控制器,并在请求中包含所有可能的参数。请求中包含的任何数据也将返回到IPN中

如果需要包含自定义字段,则需要在可用时使用自定义参数,或者另一个选项是在数据库中保存数据,然后在custom或INVNUM中传递记录ID。这样,ID将返回IPN,您可以从DB中提取所有详细信息

如果正在使用Pay API,则可以在$Receiver数据中包含InvoiceID参数,该参数已包含在Pay()的控制器方法中。Pay_with_options()结合了Pay和SetPaymentOptions API,它提供了更多参数,包括可以使用的CustomID,也将返回IPN


如果您提供更多关于您正在使用的API的详细信息,我可以为您提供更多帮助。

对此进行了编辑。感谢您记住,自适应支付有一个特定于应用程序的IPN和一个特定于商户的IPN。您的应用程序将收到一个到您在API请求中指定的IPN URL的链接。我相信其中一个会包含客户ID。如果商户(卖家帐户)在自己的Paypal帐户中配置了IPN,那么他们也会收到带有交易特定数据的IPN。感谢您的回答,这是否意味着我应该获得两套不同的IPN?一个用于merchent帐户,另一个用于应用程序本身?我想这是有道理的。我猜我需要两个不同的URL来处理IPN?是的,API会有特定于应用程序的IPN的URL,然后你的PayPal配置文件会有卖家帐户IPN的位置。我似乎无法让应用程序IPN正常工作,但我不想用它来打扰你,如果您能提供有关此问题的任何文档,我将非常高兴,因为现在发票工作得非常完美(尽管通过发票传递userID属性有点奇怪:)。让我看看生成的XML请求的示例。它在结果中返回为$PayPalResult['RawResponse']
array(10) {
  ["Errors"]=>
  array(0) {
  }
  ["Ack"]=>
  string(7) "Success"
  ["Build"]=>
  string(7) "7935900"
  ["CorrelationID"]=>
  string(13) "8c2afcee2d74b"
  ["Timestamp"]=>
  string(29) "2014-01-31T02:37:38.806-08:00"
  ["PayKey"]=>
  string(20) "AP-1WW538504G900525L"
  ["PaymentExecStatus"]=>
  string(7) "CREATED"
  ["RedirectURL"]=>
  string(81) "https://www.sandbox.paypal.com/webscr?cmd=_ap-payment&paykey=AP-1WW538504G900525L"
  ["XMLRequest"]=>
  string(1439) "ReturnAllen_USPAYhttp://httpexample.no-ip.biz/ROOT/index.php/userControllers/regularuserActions/viewShoppingCartAPP-80W284485P519543T109.67.55.127USDBALANCECREDITCARDhttp://httpexample.no-ip.biz/root/index.php/main/IPNIPN100XXXXXXX@gmail.com5SERVICEfalsehttp://httpexample.no-ip.biz/ROOT/index.php/userControllers/regularuserActions/paypalSuccess"
  ["XMLResponse"]=>
  string(373) "2014-01-31T02:37:38.806-08:00Success8c2afcee2d74b7935900AP-1WW538504G900525LCREATED"
}
cmd=_notify-validate&
transaction=
&payment_request_date=Sun+Feb+02+08%3A25%3A52+PST+2014
&return_url=http%3A%2F%2Fhttpexample.no-ip.biz%2FROOT%2Findex.php%2FuserControllers%2FregularuserActions%2FpaypalSuccess
&fees_payer=EACHRECEIVER
&ipn_notification_url=http%3A%2F%2Fhttpexample.no-ip.biz%2Froot%2Findex.php%2Fpaypal%2Fpaypal_ipn%2Frunagain
&sender_email=patrick.buyer%40gmail.com
&verify_sign=AFcWxV21C7fd0v3bYYYRCpSSRl31AwGY-gIhQZM2WI9Ae63J.CxI7j4y
&test_ipn=1
&cancel_url=http%3A%2F%2Fhttpexample.no-ip.biz%2FROOT%2Findex.php%2FuserControllers%2FregularuserActions%2FviewShoppingCart
&pay_key=AP-6RR41041VH869594S
&action_type=PAY
&transaction_type=Adaptive+Payment+PAY
&status=COMPLETED
&log_default_shipping_address_in_transaction=false
&charset=windows-1252
&notify_version=UNVERSIONED
&reverse_all_parallel_payments_on_error=false