【问题标题】:Paypal Subscription Setup贝宝订阅设置
【发布时间】:2019-12-02 09:01:43
【问题描述】:

我正在尝试使用 curl 设置我的三个订阅,并确保值正确。尝试发出请求并获得响应,但我的 curl 无法正常运行。

https://developer.paypal.com/docs/api/subscriptions/v1/#plans_create

我的意图:

  • 3 种计划可供选择:Elite(149 PHP/月)、Premium(349 PHP/月)、Luxury(549 PHP/月)

  • paypal 说 1 个月是 30 天

  • id 喜欢将其设置为每月自动续订,直到客户选择取消。

  • 一次只有一个处于活动状态,如果用户在其中一个运行时选择了三个中的另一个,则他们将自动停止计费,并将使用所选的新的进行收费。 (如:目前为elite149,选择后订阅和续费将更改为549luxury)。

    curl -v -X POST https://api.sandbox.paypal.com/v1/billing/plans \
     -H "Content-Type: application/json" \
     -H "Authorization: Basic account_clientid:account_secretcode" \
     -H "PayPal-Request-Id: EPL-25012019-001" \
     -d '{
       "product_id": "MWC-2019EPL",
       "name": "My White Card Subscription Plans",
       "description": "MyWhiteCard Membership Levels",
       "status": "ACTIVE",
    
       "billing_cycles": [
         {
           "frequency": {
             "interval_unit": "MONTH",
             "interval_count": 1
           },
           "tenure_type": "REGULAR",
           "sequence": 1,
           "total_cycles": 999,
           "pricing_scheme": {
             "fixed_price": {
               "value": "149",
               "currency_code": "PHP"
             }
           }
         },
         {
           "frequency": {
             "interval_unit": "MONTH",
             "interval_count": 1
           },
           "tenure_type": "REGULAR",
           "sequence": 2,
           "total_cycles": 999,
           "pricing_scheme": {
             "fixed_price": {
               "value": "349",
               "currency_code": "PHP"
             }
           }
         },
         {
           "frequency": {
             "interval_unit": "MONTH",
             "interval_count": 1
           },
           "tenure_type": "REGULAR",
           "sequence": 3,
           "total_cycles": 999,
           "pricing_scheme": {
             "fixed_price": {
               "value": "549",
               "currency_code": "PHP"
             }
           }
         }
       ],
    
       "payment_preferences": {
         "auto_bill_outstanding": true,
         "setup_fee": {
           "value": "0",
           "currency_code": "PHP"
          },
         "setup_fee_failure_action": "CONTINUE",
         "payment_failure_threshold": 3
       },
       "taxes": {
         "percentage": "10",
         "inclusive": false
       }
     }'
    
  • 我刚刚取出了我帐户的 client_id:secret

  • 正在使用实时凭据

我的问题和疑虑:

  1. 在访问令牌中,是否需要输入“access_token$production$”,然后输入给定的代码?
  2. 我可以手动创建 Paypal 请求 ID 和产品 ID 吗?
  3. 计费周期是否都在同一个命令上,还是我必须触发 3 次?
  4. 如果客户订阅,安装费是否收费?我首先假设是这种情况并将其设置为 0。
  5. 我的目的是让每月订阅(30 天)自动续订,直到用户取消订阅。我将示例设置为 12,但 "total_cycles": NEVER 会是正确的输入吗?
  6. 我不确定税收部分是如何运作的,为什么我要修改它?

其他问题:

  1. 该文档没有显示链接https://api.sandbox.paypal.com/v1/billing/plans 的实时等效项,它只是简单的https://api.live.paypal.com/v1/billing/plans
  2. 我尝试使用 git bash 和 curl 添加上面的代码,但是当我运行它时它显示 1008{"error":"invalid_client","error_description":"Client credentials are missing"}
  3. 我是否尝试在 Git bash 中运行 curl 代码而不更改我的目录?我只是在这里启动 git 并运行 curl:

任何帮助将不胜感激。我只是确保一切都是需要的,因为这三个订阅将进入一个实时网站。我必须确定一次只运行一个订阅。

更新:我尝试将其设为curl -v -X POST https://api.production.paypal.com/v1/billing/plans,但这个也不起作用。

更新:谁能展示一个有效的 curl 示例请求示例?

更新:-H "Authorization: Basic account_clientid:account_secretcode",为了清楚起见,我在那里拿出了我的 id 代码,因为我不能只在公共场合展示它。我放在那里的一个例子是

-H "Authorization: Basic JAKRc85nJy2eMLq3aIV:01PvLC934xMAwLHqU4JqA89as4N"

更新 到目前为止,我尝试在 git 中运行这个 curl,但不知何故,我仍然得到错误。我确保 api 在 api.paypal.com 中,并且客户端 ID 和机密 ID 是实时版本。

curl -v -X POST https://api.paypal.com/v1/billing/plans \
-H "Content-Type: application/json" \
-H "Authorization: Basic AR7nnwwotKOt4YdcGHZc0P2RVsRT67_Gf2hyrKyDl3ZgCKsikeKbXdQ9Fj-_21v4RulkXsgAASe7_VKv:EKwsdDo1ehtOOOSZCGMu1C9903qr4cQOOZI2rgFYhvugh2SO1V04q9MWY9SXwa352zBt1mGglLuWgR4D" \
-H "PayPal-Request-Id: MWC-2501E-001" \
-d '{
  "product_id": "ELITE-2501149",
  "name": "Elite Membership",
  "description": "Elite Membership Monthly Plan",
  "status": "ACTIVE",
  "billing_cycles": [
    {
      "frequency": {
        "interval_unit": "MONTH",
        "interval_count": 1
      },
      "tenure_type": "REGULAR",
      "sequence": 1,
      "total_cycles": 999,
      "pricing_scheme": {
        "fixed_price": {
          "value": "149",
          "currency_code": "PHP"
        }
      }
    }
  ],
  "payment_preferences": {
    "auto_bill_outstanding": true,
    "setup_fee": {
      "value": "0",
      "currency_code": "PHP"
    },
    "setup_fee_failure_action": "CONTINUE",
    "payment_failure_threshold": 3
  },
  "taxes": {
    "percentage": "12",
    "inclusive": false
  }
}'

我得到这个错误:

100   921  100   159  100   762     99    478  0:00:01  0:00:01 --:--:--   578{"name":"INTERNAL_SERVICE_ERROR","debug_id":"1975a4fe9232","links":[{"href":"https://developer.paypal.com/docs/api/overview/#error","rel":"information_link"}]}

更新

阅读所有链接并按照步骤操作,我认为这是剩下的唯一问题

{"name":"NOT_AUTHORIZED","message":"Authorization failed due to insufficient permissions.","debug_id":"484a9d7460069","details":[{"issue":"PERMISSION_DENIED","description":"You do not have permission to access or perform operations on this resource"}],"links":[{"href":"https://developer.paypal.com/docs/api/v1/billing/subscriptions#NOT_AUTHORIZED","rel":"information_link","method":"GET"}]}

我查看了 Paypal 帮助中心,似乎我需要 Paypal 本身的某个人来授权我的 REST。

【问题讨论】:

  • 您能否添加更多有关您尝试集成的特定 PayPal 产品的信息?上面的脚本在什么时候崩溃了?
  • 当我尝试在我的 git bash 中触发此脚本时,它是一个基于订阅的计划。 developer.paypal.com/docs/api/subscriptions/v1/#plans_create我已经在问题中解释过了。
  • 它发生故障并在我的 bash 中出现错误
  • 关于您的问题 #8 - 您可能忘记声明 account_clientidaccount_secret
  • 我无法在公共场合准确地显示我的实际客户 ID 和机密 ID,所以我只是为了这篇文章而把它拿出来。

标签: html git curl paypal


【解决方案1】:

Q1 - 在访问令牌中,是否需要输入"access_token$production$",然后输入给定的代码?

在您的示例中,您使用的是基本身份验证方案。您可以使用:

-H "Authorization: Bearer Access-Token" \

但要回答您的问题,您不需要专门包含 access_token 文本字符串。


Q2 - 我可以手动创建 Paypal 请求 ID 和产品 ID 吗?

是的,使用了请求 ID,因此您可以重试 API 调用。 https://developer.paypal.com/docs/api/reference/api-requests/#http-request-headers

但是 product_id 应该来自https://developer.paypal.com/docs/api/catalog-products/v1/#products_create

所以你需要先做。请参阅此答案底部的更新。


Q3 - 计费周期是否都在同一个命令上,还是我必须触发 3 次?

您需要调用每个计划配置来创建三个订阅计划。基本上,在 API 文档示例中,它向您展示了它有一个为试用期创建的计费周期和它自己的常规计划。它还说:

https://developer.paypal.com/docs/api/subscriptions/v1/#plans_create

试用和常规计费的一系列计费周期。一个计划可以 有多个计费周期,但只有一个常规计费周期。

您还提到:

如果用户选择另一个 三而一运行,它们将自动停止获取 计费并将收取新选择的费用。 (例如:目前 精英149,订阅续费一次改为549luxury 选择)。

您最终需要以编程方式执行此操作。

如果用户取消订阅计划,那么您需要通过调用以下方式取消他的订阅: https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_cancel

如果您打算更改订阅,则首先需要取消现有订阅,然后使用:https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_create为用户订阅新订阅计划


Q4 - 如果客户订阅,安装费是收费吗?我首先假设是这种情况并将其设置为 0。

安装费只是您可以向客户收取的附加费。您将需要手动声明它或通过将设置费用值设为 0 使其成为可选。 https://developer.paypal.com/docs/api/subscriptions/v1/#definition-payment_preferences


Q5 - 我的意图是让每月订阅(30 天)自动续订,直到用户取消订阅。我将示例设置为 12,但“total_cycles”:永远不会是正确的输入?

最大值为 999。它只接受整数。 https://developer.paypal.com/docs/api/subscriptions/v1/#definition-billing_cycle


Q6 - 我不确定税收部分是如何运作的,为什么我要修改它?

因为税收取决于您所在的地区或国家/地区。您使用 PHP 或菲律宾比索作为货币,因此这可能意味着您在菲律宾。您需要将税率设置为 12%,因为这是用于对商品和服务征税的

来源:https://www.full-suite.com/blog/whats-difference-vat-percentage-tax/

Paypal 税务对象定义:https://developer.paypal.com/docs/api/subscriptions/v1/#definition-taxes


Q7 - 该文档没有显示链接https://api.sandbox.paypal.com/v1/billing/plans 的实时等效项,它只是简单的https://api.live.paypal.com/v1/billing/plans?

您可以在这里找到地址: https://developer.paypal.com/docs/api/overview/#get-an-access-token

上面写着:

沙盒:https://api.sandbox.paypal.com

直播:https://api.paypal.com


Q8 - 我尝试使用 git bash 和 curl 添加上面的代码,但是当我运行它时它显示 1008{"error":"invalid_client","error_description":"Client credentials are missing"}

这可能意味着您传递的凭据无效。确保您使用

通过标头发送它们
Bearer <Access-Token>

Basic <client_id>:<secret>

并验证您的字符串输入是否代表实际值。 此外,请确保您使用的是沙盒凭据,因为它具有与生产或实时不同的一组凭据 https://developer.paypal.com/docs/classic/lifecycle/sb-create-accounts/#create-a-sandbox-account


Q9 - 我是否尝试在 Git bash 中运行 curl 代码而不更改我的目录?我只是在这里启动 git 并运行 curl:

不要将 Git Bash 误解为命令行界面,它只是您项目的版本控制工具。但是,Windows 的 Git 包具有内置组件,可以让您运行 CURL。 由于Curl安装在Bin目录下,你应该可以在任何目录下运行它

您可以使用不同的工具运行 curl 命令,最好使用脚本或编程语言,如 PHP、Phyton、Java 甚至是对 curl 有更好支持的 Node,并且应该允许您以更简洁的方式更轻松地编写和测试您的程序。


更新

我已经对此进行了进一步调查。我想我会与您分享,因为您似乎还没有阅读整个 API 文档。

您正在创建订阅计划,但您需要先创建产品。 (我已经更新了对问题 #2 的回答)

首先 - 创建产品 这将创建您创建订阅计划所需的 product_id。 https://developer.paypal.com/docs/api/catalog-products/v1/#products_create 要返回并检查您创建的产品并获取其产品 ID,您可以使用此 api 调用: https://developer.paypal.com/docs/api/catalog-products/v1/#products_list

然后 - 创建订阅计划 创建产品后,您可以为其创建多个订阅计划。 https://developer.paypal.com/docs/api/subscriptions/v1/#plans_create

继续前进,如果您想订阅/取消订阅用户,您需要按照我对问题 #3 的回答以编程方式进行。

关于您的凭据无效问题

先尝试获取访问令牌。为此,请按照此处的说明进行操作: https://developer.paypal.com/docs/api/get-an-access-token-curl/

curl -v https://api.sandbox.paypal.com/v1/oauth2/token \
   -H "Accept: application/json" \
   -H "Accept-Language: en_US" \
   -u "client_id:secret" \
   -d "grant_type=client_credentials"

然后获取返回的令牌并使用它来进行 api 调用。 它将返回如下内容:

{
  "scope": "scope",
  "access_token": "Access-Token",
  "token_type": "Bearer",
  "app_id": "APP-80W284485P519543T",
  "expires_in": 31349,
  "nonce": "nonce"
}

这是我用来测试的代码的修改版本,注意它使用 Bearer token 而不是 basic client_id:secret

curl -v -X POST https://api.sandbox.paypal.com/v1/billing/plans \
-H "Content-Type: application/json" \
-H "Authorization: Bearer Access-Token-goeshere" \
-H "PayPal-Request-Id: MWC-helper" \
-d '{
  "product_id": "PROD-ELITETEST", //<---- this product id should be taken from the real product id when you created your product through product_create api.
  "name": "Elite Membership",
  "description": "Elite Membership Monthly Plan",
  "status": "ACTIVE",
  "billing_cycles": [
    {
      "frequency": {
        "interval_unit": "MONTH",
        "interval_count": 1
      },
      "tenure_type": "REGULAR",
      "sequence": 1,
      "total_cycles": 999,
      "pricing_scheme": {
        "fixed_price": {
          "value": "149",
          "currency_code": "PHP"
        }
      }
    }
  ],
  "payment_preferences": {
    "auto_bill_outstanding": true,
    "setup_fee": {
      "value": "0",
      "currency_code": "PHP"
    },
    "setup_fee_failure_action": "CONTINUE",
    "payment_failure_threshold": 3
  },
  "taxes": {
    "percentage": "12",
    "inclusive": false
  }
}'

它对我有用!

【讨论】:

  • 当我仍在尝试创建计划并尝试触发取消订阅时,为什么创建订阅中的示例包含客户信息?
  • @ButtonPress 您可能会将 create_plan 与 create_subscription 混淆 创建订阅 - 是指客户订阅计费计划。
  • 根据您给出的答案再次尝试,我仍然收到错误消息。如果可能的话,我想要一个关于三个订阅的工作示例。
  • @ButtonPress 创建计划 - 是创建计费计划的过程,因此贝宝了解哪些计划可供订阅。这还允许您配置每个计划。 创建订阅 - 当客户订阅计费计划时,它要求您输入计划ID,您可以在创建计划后返回该ID。要列出所有可用的计划以获取他们的 ID,您可以致电 plans_list developer.paypal.com/docs/api/subscriptions/v1/#plans_list
  • 您使用的是沙盒凭据吗?我已经更新了对问题 #8 的回答,您需要一组不同的凭据来访问 Sandbox API,这可能是它返回 invalid credentials 的原因
猜你喜欢
  • 2013-11-08
  • 2020-06-08
  • 2022-11-30
  • 2019-08-04
  • 2016-04-03
  • 2011-07-17
  • 2012-04-26
相关资源
最近更新 更多