我可以通过PayPal REST API的结算计划/协议设置可变的每月付款金额吗?在现有协议?

时间:2015-03-30 14:37:53

标签: recurring-billing paypal-rest-sdk

我将其作为issue on the PayPal-PHP-SDK github输入,但此时此刻相当敏感。

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

到目前为止,我们的实施(已经与多个订阅者一起使用)正在使用PayPal-PHP-SDK / REST API为每个订阅者创建一个计费方案,其付款定义设置为计算为最大的数量潜在的月费。然后,我希望能够使用Agreement->setBalance()将价值降低到实际的预算费用,然后Agreement->billBalance()来处理付款。

不幸的是,由于时间压力,我们启动时没有验证这是一个可行的实施,我发现这些功能仅用于未支付/拖欠余额。 start_date我们的计划是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_error:提供的路径无效”的异常。尝试使用$Patch->setPath("/")对json编码数据路径,直至并包括整个Plan对象,而是使用“MALFORMED_REQUEST - 传入JSON请求不映射到API请求”提供异常。我怀疑大多数值无法在已执行的协议或已激活的计划中更新。

但是,我通过商家帐户的网站看到月度值可以手动更新,所以我希望我只是以错误的方式处理我的API请求。

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

$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);

那么有没有办法解决我们当前的实施和计划/协议?如果失败了,是否有我应该使用/可以尝试迁移到的REST API解决方案?如果可能的话,我想避免使用Classic API。

0 个答案:

没有答案