我在使用仍在开发中的 Chained Payments API 时遇到问题。
关于沙盒:我读到过,出于某种原因,PayKey
(Paypal 为交易创建的唯一标识符)没有传回交易。当然,在我的测试中,我得到了大部分数据(比如买家的电子邮件地址、姓名、地址信息),但我没有得到 paykey。
这个字段不仅仅是空白,它根本不存在。我正在 form
范围内做最基本的循环并将结果写入文件(显然我不会在生产中做这种基本的事情,这只是为了了解我得到的数据).
所以我想我应该传递我自己的唯一标识符,将其存储在数据库中,然后通过自定义变量传递它。奇怪的是,这个(自定义
字段)每次都返回空白。
最后我想我只是将它作为 IpnNotificationUrl
的 url 的一部分传递给 receipt.cfm?myKey=SOMEVERYRANDOMLYGENERATEDKEYHERE
但是当我传递 IpnNotificationUrl
,指定的 url 未被 ping,无论我是否在我的沙盒帐户中设置了单独的 IPN 通知 URL
。帐户中指定的 URL 每次都被正确地 ping。
除了写入不同名称的文本文件外,这两个文件是相同的。这两个文件都没有出错。
<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#" />
我需要能够创建 key 并通过 Paypal 或 Paypal 需要传回。
就其值(value)而言,这是我从 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,但其他交易数据会传递。我删除了某些信息。我已经仔细检查过,这些信息都不是 paykey 或在创建 paykey 时可用(因此两端都没有唯一标识符)
--- 中断 ---
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
最佳答案
我认为您对自适应支付交易实际上对应用程序和接收方具有单独的 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 的值,但您获得的数据并非如此。您需要检查您的网络服务器日志,因为看起来一个服务器一定因为某种原因失败了,但另一个服务器却成功了。
关于paypal - Paypal 自适应支付 API 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26743547/