【问题标题】:PayPal API with PHP - single payment, then recurring payment with different amount带有 PHP 的 PayPal API - 单次付款,然后以不同金额重复付款
【发布时间】:2014-08-17 13:54:43
【问题描述】:

我正在使用以下代码向 PayPal 的 API 发送支付请求($paypal 类中的 $field 数组用于构建 POST 请求)。此代码运行良好。

            $paypal = new paypal_class;
        $paypal->add_field('business', $store_email);
        $paypal->add_field('return', $script_location.'?action=success&order_id='.$order_id);
        $paypal->add_field('cancel_return', $script_location.'?action=cancel');
        $paypal->add_field('notify_url', $script_location.'?action=ipn');
        $paypal->add_field('item_name_1', strip_tags(str_replace("'","",$_POST["description"])));
        $paypal->add_field('amount_1', $amount);
        $paypal->add_field('item_number_1', $item_id);
        $paypal->add_field('quantity_1', '1');
        $paypal->add_field('custom', $_SERVER['REMOTE_ADDR']);
        $paypal->add_field('upload', 1);
        $paypal->add_field('cmd', '_cart'); 
        $paypal->add_field('txn_type', 'cart'); 
        $paypal->add_field('num_cart_items', 1);
        $paypal->add_field('payment_gross', $amount);
        $paypal->add_field('currency_code', strip_tags(str_replace("'","",$_POST["currency"])));
        $paypal->submit_paypal_post(); // submit the fields to paypal

现在,假设我发送的 $amount 是 199 美元。此金额将使用上面的代码正确收取。现在,除了最初的 199 美元外,我还想每年收取 29 美元。我可以修改上面的代码(大概发送一些额外的字段)来完成这个吗?

我一直在查看文档,并看到了一些用于定期结算的选项,但找不到一个完全符合我要求的选项 - 这是 Amount X 的初始付款,然后是 Amount 的定期付款是的。

【问题讨论】:

    标签: php paypal


    【解决方案1】:

    您可以提供任何金额的试用期,包括 0。试用期是初始付款,试用期结束后,您可以设置实际订阅金额,并在特定日期开始计费。

    这里是 Express Checkout 的文档:
    Express Checkout Recurring with Trial Period

    &TRIALBILLINGPERIOD=Month #Period of time in one trial period
    &TRIALBILLINGFREQUENCY=1 #Frequency of charges, if any, during the trial period
    &TRIALTOTALBILLINGCYCLES=1 #Length of trial period
    &TRIALAMT=0 #Payment amount (can be 0) during the trial period
    &CURRENCYCODE=USD #The currency, e.g. US dollars
    

    这是直接定期付款的文档
    Trial Period for Direct Recurring Payments

    【讨论】:

    • 我可能是错的,但我认为这不适用于 OP 的代码。看起来他使用的是付款标准,而不是快速结帐。
    • 我想我必须坚持使用付款标准。我会试试你的试用期想法。一个简单的问题 - 我可以为现有付款进行这项工作吗?也就是说,如果某人在 7 个月前支付了 199 美元,那么在 5 个月后开始定期计费?该页面说一直收取 29 美元的费用,只是代码中没有设置。
    【解决方案2】:

    您似乎正在使用 Payments Standard。你能证实吗?

    如果是这样,pp_MSI_Jenn 给出的答案将不适用。也就是说,如果您对 PHP 类(显然您是)感到满意,我建议您切换到 Express Checkout。This class library 将使 Express Checkout 对您来说非常简单。

    您将使用以下 API。

    由于您提到您希望一次性收取 199 美元,然后再收取 29 美元/年,因此您实际上不需要纠结试用期。相反,您只需在 CRPP 请求中使用 INITAMT 参数来处理 $199。然后,您将使用常规的 AMT、BILLINGPERIOD、BILLINGFREQUENCY 等来设置 $29/year,但您需要将 PROFILESTARTDATE 设置为从当前日期算起 1 年。这样,第一笔 29 美元的付款不会在 1 年内发生,但您会在创建个人资料后立即获得 199 美元。

    如果您更愿意坚持使用 Payments Standard,那么您实际上可以利用试用期作为 pp_MSI_Jenn 提到的使用 Express Checkout 的解决方法。您可以将试用期设置为 1 年并在该期间使用 199 美元的金额,然后将常规期设置为 29 美元/年。

    更多详情请查看Sandard Varaibles 列表,特别是recurring payments section

    【讨论】:

    • 是的,我们使用的是付款标准。我正在为朋友修改此代码,我认为他们希望继续使用 Payments Standard,因此我将尝试试用期解决方法。
    猜你喜欢
    • 2015-02-26
    • 2020-09-02
    • 2014-01-26
    • 2020-05-12
    • 2016-03-07
    • 2013-05-14
    • 2016-10-24
    • 2021-10-23
    • 2013-09-14
    相关资源
    最近更新 更多