我在使用仍在开发中的Chained Payments API时遇到了问题。
说到沙箱:我读过,由于某种原因,PayKey
(Paypal为交易创建的唯一标识符)不会传回给交易。当然,在我的测试中,我得到了大部分数据(比如买家的电子邮件地址,姓名,地址信息),但我没有得到回报。
此字段不仅仅是空白,根本不存在。我正在对form
范围进行最基本的循环并将结果写入文件(显然我不会在生产中做一些基本的事情,这只是为了理解我得到的数据)。 / p>
所以我想我会传递自己的唯一标识符,将其存储在数据库中,然后通过自定义变量传递。奇怪的是,这个(custom
字段)每次都会变回空白。
最后,我认为我只是将其作为IpnNotificationUrl
的网址的一部分传递给receipt.cfm?myKey=SOMEVERYRANDOMLYGENERATEDKEYHERE
,但是当我通过IpnNotificationUrl
时,指定的网址不会被ping,无论是否我的沙盒帐户中有一个单独的IPN Notification URL
设置。每次都会正确填写帐户中指定的网址。
两个文件都是相同的,只是它们写入不同命名的文本文件。我没有从任何一个文件中得到错误。
<cfoutput><cfsavecontent variable="buildfile">--- Break ---
<cfloop list="#structkeylist(form)#" index="i">
#i#: #form[i]#
</cfloop>
</cfsavecontent></cfoutput>
<cffile file="#expandpath(".")#\dump_new.txt" action="write" output="#buildfile#" />
我需要能够创建一个密钥并通过Paypal或Paypal传递回来。
对于它的价值,这是我在GitHub上从Paypal的SDK调用
<cfinvoke component="svc.adaptivepayments" method="payRequest" returnvariable="response">
<cfinvokeargument name="returnURL" value="#request.serverURL#/success.cfm">
<cfinvokeargument name="cancelURL" value="#request.serverURL#/cancel.cfm">
<cfinvokeargument name="ipnNotificationUrl" value="http://myurl/taction/pp_rect2.cfm">
<cfinvokeargument name="senderEmail" value="">
<cfinvokeargument name="custom" value="test data">
<cfinvokeargument name="receiverAmount" value="#ArrayToList(pp_amounts)#">
<cfinvokeargument name="receiverEmail" value="#ArrayToList(pp_emails)#">
<cfinvokeargument name="receiverPrimary" value="true,false,false,false,false,false">
<cfinvokeargument name="feesPayer" value="PRIMARYRECEIVER">
<cfinvokeargument name="receiverPaymentType" value="DIGITALGOODS,DIGITALGOODS,DIGITALGOODS,DIGITALGOODS,DIGITALGOODS,DIGITALGOODS">
<cfinvokeargument name="actionType" value="PAY">
<cfinvokeargument name="currencyCode" value="USD">
</cfinvoke>
编辑:为了澄清,Paykey从这项服务回来,这就是我如何生成将用户发送到PayPal的链接。 Paykey根本没有传递给我的IPN,尽管其他交易数据也是如此。我删除了某些信息。我已经仔细检查过,这些信息都不是付费密钥,或者在创建支付键时可用(所以两端都没有唯一标识符)
---休息---
payer_email: redacted
charset: windows-1252
item_name:
payment_gross: 10.00
payer_id: A62WKW8N3YDYU
transaction_subject:
item_number:
payment_status: Completed
payment_fee: 0.55
notify_version: 3.8
verify_sign: A.CSYz4u5IILQm5wM0J0JbJiIcEuAHODNEgw.2k7ZMYT31eXFO6G0R1o
mc_currency: USD
quantity: 0
residence_country: US
tax: 0.00
first_name: John
receiver_email: redacted
last_name: Blow
mc_fee: 0.55
ipn_track_id: dd4151b653ead
payer_status: verified
custom:
fieldnames: payer_email,charset,item_name,payment_gross,payer_id,transaction_subject,
item_number,payment_status,payment_fee,notify_version,verify_sign,
mc_currency,quantity,residence_country,tax,first_name,receiver_email,
last_name,mc_fee,ipn_track_id,payer_status,custom,mc_gross,test_ipn,
business,txn_id,receiver_id,txn_type,payment_type,payment_date,protection_eligibility
mc_gross: 10.00
test_ipn: 1
business: redacted
txn_id: 71N09598H1922352W
receiver_id: VBETUFDEQL5BC
txn_type: web_accept
payment_type: instant
payment_date: 12:53:10 Nov 04, 2014 PST
protection_eligibility: Ineligible
答案 0 :(得分:1)
我认为您因为自适应付款交易实际上为应用和接收方分别拥有IPN而感到迷茫。如果您同时充当两者,您将获得2个独立的IPN。
您在此处包含的是接收方/交易特定的IPN。这不包括PayKey,而是一个交易ID,就像你一样。您会注意到根本没有PayKey参数(与其中包含的相反,但与您最初声明的一样空白。)
如果您想处理特定于应用的应用数据,包括PayKey,您需要在应用特定的IPN中执行此操作,这是我为您的示例链接到的。您会注意到它所包含的参数与您在此处获得的参数大不相同。
在我的示例中,我确实既是应用程序所有者又是事务的接收者,所以我同时获得了2个IPN,但当然我的IPN脚本已配置为相应地处理它们。
再次,我有一个app specific IPN,其中包含应用程序特定数据,包括PayKey。然后我还得到了separate transaction specific IPN,其中包含您在此处显示的数据,但不包含PayKey。
您需要确保正确处理这两项问题。付款请求中的IPNNotificationURL参数将触发特定于应用的IPN,其中 - 接收方帐户中的IPN配置将触发特定于交易的IPN。
我发现您在请求中包含了IPNNotificationURL的值,但您获得的数据并非如此。您需要检查您的Web服务器日志,因为它似乎必须由于某种原因失败,但是另一个是击中并成功。