我将其作为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。