Recurring billing 我可以通过PayPal REST API';s的账单计划/协议?关于现有协议?

Recurring billing 我可以通过PayPal REST API';s的账单计划/协议?关于现有协议?,recurring-billing,paypal-rest-sdk,Recurring Billing,Paypal Rest Sdk,我是作为一名专家输入的,但在这一点上它对时间相当敏感 我们的目标是提供订阅服务,每月向用户收取他们为当月的每次内容更新选择的价值。例如,如果有8次更新,1美元的订户将支付8美元 到目前为止,我们的实现(已经有许多订阅者使用)是使用PayPal PHP SDK/REST API为每个订阅者创建一个计费计划,并将支付定义设置为计算出的最大潜在月费用。然后,我希望能够使用协议->setBalance()将该值降低到实际预期费用,然后使用协议->billBalance()处理付款 不幸的是,由于时间压力

我是作为一名专家输入的,但在这一点上它对时间相当敏感

我们的目标是提供订阅服务,每月向用户收取他们为当月的每次内容更新选择的价值。例如,如果有8次更新,1美元的订户将支付8美元

到目前为止,我们的实现(已经有许多订阅者使用)是使用PayPal PHP SDK/REST API为每个订阅者创建一个计费计划,并将支付定义设置为计算出的最大潜在月费用。然后,我希望能够使用
协议->setBalance()
将该值降低到实际预期费用,然后使用
协议->billBalance()
处理付款

不幸的是,由于时间压力,我们在没有验证这是一个可行的实现的情况下启动了这些功能,我发现这些功能只适用于未付/拖欠余额。我们计划的
开始日期是4月1日,我们将发布4次内容,但我们将向订阅者收取最多9次更新的费用

我尝试了各种
Agreement->update()
Plan->update()
调用来更改每月值,大致如下:

$Patch = new PayPal\Api\Patch();
$Patch->setOp("replace")
    ->setPath("/payment_definitions/0/amount/value")
    ->setValue($patch_value);

$PatchRequest = new PayPal\Api\PatchRequest();
$PatchRequest->addPatch($Patch);

$Plan = PayPal\Api\Plan::get($plan_id, $apiContext);
$Plan->update($PatchRequest, $apiContext);
它返回一个异常,并显示“validation\u error:提供的路径无效”。使用
$Patch->setPath(“/”)
尝试对数据路径进行json编码,直到并包括整个计划对象,但会出现异常“格式错误的请求-传入的json请求未映射到API请求”。我怀疑大多数值无法在已执行的协议或激活的计划上更新

然而,我通过商户账户的网站看到,每月的价值可以手动更新,所以我希望我只是用错误的方式处理API请求

我还尝试使用
Transaction->setPurchaseUnitReferenceId($AgreementId)
创建一个
Payment
对象,因为我读到了一些关于引用事务是一个潜在解决方案的内容,但我得到了同样的错误请求错误:

$Item = new PayPal\Api\Item();
$Item->setCategory('DIGITAL')
    ->setPrice($pledge_value)
    ->setDescription($update_name);

$ItemList = new PayPal\Api\ItemList();
$ItemList->addItem($Item);

$Amount = new PayPal\Api\Amount();
$Amount->setCurrency('USD')
    ->setTotal($pledge_value);

$Transaction = new PayPal\Api\Transaction();
$Transaction->setPurchaseUnitReferenceId($AgreementId)
    ->setDescription($update_name)
    ->setAmount($Amount)
    ->setItemList($ItemList)
    ->setNotifyUrl($notify_url);

$Payer = new PayPal\Api\Payer();
$Payer->setPaymentMethod('paypal');

$RedirectUrls = new PayPal\Api\RedirectUrls();
$RedirectUrls->setReturnUrl($return_url)
    ->setCancelUrl($cancel_url);

$Payment = new PayPal\Api\Payment();
$Payment->setIntent('sale')
    ->setPayer($Payer)
    ->setRedirectUrls($RedirectUrls)
    ->addTransaction($Transaction);

$Payment->create($apiContext);

那么,有没有办法修复我们当前的实施和计划/协议?如果做不到这一点,是否有我应该使用/可以尝试迁移到的RESTAPI解决方案?如果可能的话,我想避免使用经典API。

我也想知道这一点。刚刚偶然发现了一个要求,即用户应该能够在基于计划的基础上选择附加组件产品。在较新的REST API或checkout.js中是否有任何东西可以帮助实现这一点?Stripe和Braintree能够创建客户对象和支付方式令牌,只要客户最初同意,这些令牌可用于随时向客户收取任何金额。像星巴克卡之类的自动充值类型的情况并不罕见,因为在这种情况下,充值金额事先未知,每次都不同。如果不推荐使用的版本是唯一支持此功能的版本,我会非常惊讶。