如何在 node.js 中的 paypal 中创建可变的定期付款

Posted

技术标签:

【中文标题】如何在 node.js 中的 paypal 中创建可变的定期付款【英文标题】:How to create a variable recurring payment in paypal in node.js 【发布时间】:2019-07-26 17:53:37 【问题描述】:

我已经注册了一个 paypal 企业帐户。我一直在尝试使用贝宝创建可变的定期付款。但没有运气。我找不到任何可以完成此操作的工作代码。

我尝试过的事情:

    订阅:我也结帐订阅,但订阅的金额似乎是固定的。 Paypal-rest-sdk:Paypal rest sdk 不允许我更改 payment_definitions 很可能是因为它只是创建标准订阅而不是可变订阅
(async function() 

    const paypal = require("paypal-rest-sdk");

    paypal.configure(
        'mode': 'sandbox', //sandbox or live
        'client_id': process.env.PAYPAL_CLIENT_ID,
        'client_secret': process.env.PAYPAL_SECRET_KEY
    );

    var billingPlanAttributes = 
        "description": "Create Plan for Regular",
        "merchant_preferences": 
                "auto_bill_amount": "yes",
                "cancel_url": "http://www.cancel.com",
                "initial_fail_amount_action": "continue",
                "max_fail_attempts": "1",
                "return_url": "http://www.success.com",
                "setup_fee": 
                        "currency": "USD",
                        "value": "25"
                
        ,
        "name": "Testing1-Regular1",
        "payment_definitions": [
                
                        "amount": 
                                "currency": "USD",
                                "value": "100"
                        ,
                        "charge_models": [
                                
                                        "amount": 
                                                "currency": "USD",
                                                "value": "10.60"
                                        ,
                                        "type": "SHIPPING"
                                ,
                                
                                        "amount": 
                                                "currency": "USD",
                                                "value": "20"
                                        ,
                                        "type": "TAX"
                                
                        ],
                        "cycles": "0",
                        "frequency": "MONTH",
                        "frequency_interval": "1",
                        "name": "Regular 1",
                        "type": "REGULAR"
                
        ],
        "type": "INFINITE"
    ;

    const createdBillingPlan = await new Promise((resolve, reject) => 
        paypal.billingPlan.create(billingPlanAttributes, function (error, createdBillingPlan) 
            if (error) 
                    reject(error);
             else 
                    resolve(createdBillingPlan)
            
        );
    );

    // update
    var billing_plan_update_attributes = [
    
            "op": "replace",
            "path": "/",
            "value": 
                    "payment_definitions": [
                        
                            ...createdBillingPlan.payment_definitions[0],
                            "amount": 
                                "currency": "INR",
                                "value": 100
                            
                        
                ]
               
    
    ];

    console.log(billing_plan_update_attributes);

    paypal.billingPlan.update(createdBillingPlan.id, billing_plan_update_attributes, function (error, response) 
            if (error) 
                    console.log(error.response);
                    throw error;
             else 
                    paypal.billingPlan.get(createdBillingPlan.id, function (error, updatedBillingPlan) 
                            if (error) 
                                    console.log(error.response);
                                    throw error;
                             else 
                                    console.log(JSON.stringify(updatedBillingPlan));
                            
                    );
            
    );
)();

以上代码抛出

 name: 'BUSINESS_VALIDATION_ERROR',
  details:
   [  field: 'payment_definitions',
       issue: 'patch is not supported for this field.'  ],
  message: 'Validation Error.',
  information_link:
   'https://developer.paypal.com/docs/api/payments.billing-plans#errors',
  debug_id: 'someid',
  httpStatusCode: 400 

我发现一些有趣的链接是:

    https://www.paypal-community.com/t5/Merchant-services-Archive/Subscription-with-variable-amount-per-month/td-p/49864 https://developer.paypal.com/docs/classic/express-checkout/integration-guide/ECRecurringPayments/#

如果有人可以帮助我编写一些工作代码来创建新的定期付款订阅/计划,我将不胜感激。

【问题讨论】:

【参考方案1】:

不,你错了订阅不是固定价格。订阅中有seat-based pricing 之类的选项。您需要做的就是在创建计划时修改 JSON。这是 1 美元基本价格的示例计划 JSON。


    "product_id": "PROD-60L70341GH758414Y",
    "name": "Basic Plan",
    "description": "Basic plan",
    "billing_cycles": [
        
          "frequency": 
            "interval_unit": "MONTH",
            "interval_count": 1
          ,
          "tenure_type": "REGULAR",
          "sequence": 1,
          "total_cycles": 12,
          "pricing_scheme": 
            "fixed_price": 
              "value": "1",
              "currency_code": "USD"
            
          
        
      ],
    "payment_preferences": 
      "service_type": "PREPAID",
      "auto_bill_outstanding": true,
      "setup_fee_failure_action": "CONTINUE",
      "payment_failure_threshold": 3
    ,
    "quantity_supported": true

这里最重要的部分是quantity_supported": true,表示你可以在创建订阅时赋予quantity属性。假设您想创建一个 12 美元的订阅,那么您需要做的就是将quantity 设为 12。创建订阅时,您的 JSON 可能会像这样

   'plan_id': 'P-6AG14992W7150444HLUYGM5I',
   'quantity': "12"

希望对您有所帮助。

【讨论】:

据我所知,您无法更新 plan_id 但有一些限制,您可以更新我认为的数量。但是,有一个限制,例如原价的最大 %15。 Paypal 在他们的文档中提到了有关更新数量和/或 plan_id 的内容,请查看我提出的关于此***.com/q/57310797/5026957 的问题

以上是关于如何在 node.js 中的 paypal 中创建可变的定期付款的主要内容,如果未能解决你的问题,请参考以下文章

如何在 zip 文件归档器中创建文件夹 - node.js

如何解决 Node.js 中的“请求过多”错误?

如何使用 mongodb (node.js) 在集合中创建一个包含所有值的数组

如何在 Sequelize 中的导入模型中创建自定义方法或函数

如何在 node.js 中创建一个简单的 http 代理?

如何在 Sequelize 中创建一个表以使用 Node JS 存储在 Postgresql 中