使用Paypal自适应支付API的麻烦

时间:2014-11-04 19:37:12

标签: paypal coldfusion paypal-ipn paypal-sandbox paypal-adaptive-payments

我在使用仍在开发中的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

1 个答案:

答案 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服务器日志,因为它似乎必须由于某种原因失败,但是另一个是击中并成功。