如何使用Paypal客户端rest api创建订阅付款?

问题描述:

Client-side REST integration文档描述了关于创建一个或多个项目的快速结账。如何使用Paypal客户端rest api创建订阅付款?

我如何使用相同的方式创建订阅或定期付款?以下内容应该如何修改?

payment: function(data, actions) { 
     return actions.payment.create({ 
      transactions: [ 
       { 
        amount: { total: '1.00', currency: 'USD' } 
       } 
      ] 
     }); 
    }, 

我找到了一个类似的Rest api for Node。不知道它将如何在JS上。

+0

客户端集成不适用于订阅目的。您必须使用服务器端实现才能创建订阅计划。而服务器端也是有道理的,因为你总是希望存储的细节,你已经收到了多少钱,或多少到期和更多的细节 –

+0

只是FYI:你提供的链接有服务器端实现。 –

+0

你是对的。但我无法弄清楚如何更改[服务器端请求]中使用的JSON(https://developer.paypal.com/docs/integration/direct/express-checkout/integration-jsv4/advanced-payments-api/create -express-checkout-payments /#request),以便创建一个订阅。 – Cijo

首先,你需要创建一个计费方案:

billing_plan_attributes = { 
       "name": PLAN_NAME_HERE, 
       "description": PLAN_DESCRIPTION, 
       "merchant_preferences": { 
        "auto_bill_amount": "yes", # yes if you want auto bill 
        "cancel_url": "http://www.cancel.com", # redirect uri if user cancels payment 
        "initial_fail_amount_action": "continue", 
        "max_fail_attempts": "1", 
        "return_url": RETURN_URL, 
        "setup_fee": { 
         "currency": CURRENCY, 
         "value": VALUE # how much do you want to charge 
        } 
       }, 
       "payment_definitions": [ 
        { 
         "amount": { 
          "currency": request.form['currency'], 
          "value": request.form['amount'] 
         }, 

         "cycles": CYCLES, # how much time this subscription will charge user 
         "frequency": FREQ, # month, day 
         "frequency_interval": INTERVAL, # per month or per three month or so on 
         "name": NAME, 
         "type": TYPE 
        } 
       ], 
       "type": TYPE 
      } 
      billing_plan = BillingPlan(billing_plan_attributes) 
      if billing_plan.create(): 
       print("success") 

使用的属性在这里有字面意义。现在,您已经创建了一个账单计划,您需要为用户提供一些界面,以便他们可以订阅。以下是此示例代码:

billing_agreement = BillingAgreement({ 
      "name": "Organization plan name", 
      "description": "Agreement for " + request.args.get('name', ''), 
      "start_date": (datetime.now() + timedelta(hours=1)).strftime('%Y-%m-%dT%H:%M:%SZ'), 
      "plan": { 
       "id": request.args.get('id', '') 
      }, 
      "payer": { 
       "payment_method": "paypal" 
      }, 
      "shipping_address": { 
       "line1": "StayBr111idge Suites", 
       "line2": "Cro12ok Street", 
       "city": "San Jose", 
       "state": "CA", 
       "postal_code": "95112", 
       "country_code": "US" 
      } 
     }) 
     if billing_agreement.create(): 
      for link in billing_agreement.links: 
       if link.rel == "approval_url": 
        approval_url = link.href 

在最后一行中,您将获得可以提供给用户的审批链接。 接下来,如果用户批准付款,您必须设置一个终端,它将成为回拨网址。

billing_agreement_response = BillingAgreement.execute(payment_token) 

payment_token通过PayPal发送到您的回调网址。

+0

PayPal安装费用与json中的金额有什么区别? – Cijo

+0

这适用于您想要花费一次性设置费用(如一次性注册费或会员费)的场景。 –