使用PHP的PayPal API-单次付款,然后使用不同金额的定期付款


PayPal API with PHP - single payment, then recurring payment with different amount

我使用以下代码向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美元。我可以修改上面的代码(可能会发送一些额外的字段(来实现这一点吗?

我一直在查看文档,我看到了一些定期计费的选项,但找不到一个确切的选项-即首次支付X金额,然后定期支付Y金额。

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

以下是Express Checkout的文档:
快速结账定期试用

&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

这是直接经常性付款的文档
直接经常性付款的试用期

看起来您正在使用Payments Standard。你能证实吗?

如果是这样,pp_MSI_Jenn给出的答案将不适用。也就是说,如果你对PHP类很满意(显然你是这样(,我建议你改用ExpressCheckout。这个类库会让ExpressCheckout对你来说非常简单。

您将使用以下API。

  • SetExpressCheckout
  • GetExpressCheckout详细信息
  • 创建定期付款配置文件

既然你提到你想一次性收取199美元,然后每年收取29美元,那么你实际上不需要麻烦试用期。相反,您只需要在CRPP请求中使用INITSATM参数来处理$199。然后,您将使用常规AMT、BILLINGPERIOD、BILLINGFREQUENCY等设置29美元/年,但您将PROFILESTARTDATE设置为自当前日期起1年。这样一来,第一笔29美元的付款在一年内不会发生,但当创建个人资料时,你会立即获得199美元。

如果你宁愿坚持使用"支付标准",那么你实际上可以像pp_MSI_Jenn提到的那样,利用试用期来解决快速结账的问题。您可以将试用期设置为1年,并在此期间使用199美元的金额,然后将常规期设置为29美元/年。

有关更多详细信息,请查看Sandard Varaibles列表,特别是经常性付款部分。