【问题标题】:paypal verifying first payment or initamt was billed in recurring payment贝宝验证第一次付款或 initamt 在定期付款中计费
【发布时间】:2012-11-14 02:47:03
【问题描述】:

我希望我的用户能够订阅定期付款(使用 express checkout api) 第一次付款需要在用户订阅后立即计费,并且我需要知道他们已经成功计费,然后才授予他们访问权限。

有没有直接的方法可以做到这一点?

我已经尝试创建一个带有 INITAMT 集的定期付款配置文件,但是,不清楚是否正在向用户收费(使用沙盒时),并且没有返回 txn_id(或等效项)来建议该计费已完成。我确实收到了 IPN 确认,但是在创建配置文件后“一段时间”会出现,这使得很难提供出色的用户体验。

我尝试添加一次性付款,使用 DoExpressCheckoutPayment 对其进行身份验证,然后在一次性付款有效时设置循环配置文件,但是身份验证也失败了,此时我已经放弃了(尽管可能在这种方法中仍然是一些腿)。

无论如何,我想我会在这里问专家。有没有一种简单的方法来设置定期付款,每月一次付款,立即支付第一笔付款()并通过 API 确认第一笔付款,而无需等待未知的时间来获得 IPN 确认消息?

【问题讨论】:

    标签: paypal subscription recurring-billing


    【解决方案1】:

    这可以根据您的需要完成,我已经测试过它并且它可以工作。关键是您需要使用相同的 Express Checkout 流程同时处理标准数字商品付款和定期付款,即要求用户一次性付款并批准订阅。你会想要设置 s

    1. 按照说明设置付款:https://developer.paypal.com/webapps/developer/docs/classic/express-checkout/ht_ec-basicDigGoodsPayment-curl-etc/

    2. 添加为定期付款指定的字段: https://developer.paypal.com/webapps/developer/docs/classic/express-checkout/ht_ec-recurringPaymentProfile-curl-etc/

    3. 处理“DoExpressCheckoutPayment”,如果成功,则“CreateRecurringPaymentsProfile”,开始日期为您的第一个“续订”日期。

    您现在应该拥有一次性付款的交易 ID,以及定期付款的配置文件 ID。

    【讨论】:

    • 详细说明,只需将L_BILLINGTYPE0=RecurringPaymentsL_BILLINGAGREEMENTDESCRIPTION0=[insert your description] 添加到您将包括的相同SetExpressCheckout 参数中,以准备DoExpressCheckoutPayment API 调用。然后您可以先调用DoExpressCheckoutPayment,然后使用相同的令牌调用CreateRecurringPaymentsProfile
    【解决方案2】:

    我会坚持使用 INITAMT 处理第一笔付款的第一个选项,但将 FAILEDINITACTION 设置为 CancelOnFailure。

    这样,如果初始付款不成功,个人资料将立即设置为暂停状态而不是活动状态。

    然后,在您的登录系统或您用来保护订阅者内容的任何系统中,您可以使用GetRecurringPaymentsProfileDetails 获取订阅配置文件的当前状态。如果它不是“活动”,您可以相应地向用户发送消息并拒绝他们访问内容。

    【讨论】:

    • 嗨 Andrew,谢谢,我在使用 INITAMT 时遇到的问题是,经常(实际上几乎总是)配置文件状态设置为待处理并且(我假设)Paypal 正在等待计费数量。这让我回到了我不得不说的位置,感谢您在“未来某个时候”启用的订阅,这是我试图避免的。我不敢相信“现在向用户收取第 1 个月的费用并确认”的用例不受支持?
    • 正如我所说,如果付款失败,则使用 FAILEDINITACTION 和 CancelOnFailure 将其设置为 Suspended 而不是 Pending。如果它有效,它将立即处于活动状态。多年来,我一直在我的 USBSwiper 网站上使用定期付款,并且我一直使用这种方法没有任何问题。
    • 奇怪,它不适合我。无论 CancelOnFailure 是什么,它都以 Pending 形式返回。我认为待处理意味着 Paypal 尚未尝试对初始金额进行计费,因此它不可能失败(如果你明白我的意思的话)。
    • @Andrew 好的,这很奇怪,这是我看到你说同样的话的第二个帖子,但它与其他发布的关于此的内容相矛盾。您是否调试过 CreateRecurringPaymentsProfile 立即返回 Active 的工作流程?我的个人资料在更改之前总是需要超过 1 分钟,我什至在贝宝定期付款页面上查看它
    • 我必须查看您的请求并尝试重现您的问题。多年来我一直在使用定期付款,并且我会立即恢复活跃的个人资料。
    【解决方案3】:

    第一次创建配置文件时,PayPal 会发送一个名为“recurring_payment_profile_created”的 IPN。此 IPN 包含一个字段“initial_payment_txn_id”。您可以使用 GetTransactionDetails 来查找此 ID 并确定该事务是否已完成。确保将该交易 ID 标记为已处理,以便在发送该交易的 IPN 时(如果与您相关),您的代码不会重复发送。此示例类似于我们在 IPN 侦听器中的处理方式(针对 PayPal's official Merchant SDK gem 用 Ruby 编写):

    case params[:txn_type]
      when 'recurring_payment_profile_created'
        # The profile has been created.  Perform any action, if necessary...
    
        initial_txn = params[:initial_payment_txn_id]
        return if ProcessedTransaction.exists?(initial_txn)
    
        request = api.build_get_transaction_details({
            :TransactionID => initial_txn
        })
    
        resp = api.get_transaction_details(request)
        if resp.success? and resp.PaymentTransactionDetails.PaymentInfo.PaymentStatus == 'Completed'
            # The initial payment is completed, perform the action...
            # Add this ID to your ProcessedTransaction table so you don't double-process...
        end
      # other 'when' statements for other transaction types, etc go here
    end
    

    【讨论】:

      【解决方案4】:

      我找到的唯一解决方案(很糟糕)是接受最多 24 小时延迟收到第一个月的订阅已计费的通知。我们现在正在研究 Google checkout 和 Braintree Payments 作为 paypal 的替代品,以便我们可以摆脱它。

      【讨论】:

        猜你喜欢
        • 2015-02-06
        • 2016-01-02
        • 2010-12-22
        • 2015-12-20
        • 2014-09-14
        • 2016-10-01
        相关资源
        最近更新 更多