首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过Braintree_id或subscription_id使用Laravel收银机取消Braintree订阅

如何通过Braintree_id或subscription_id使用Laravel收银机取消Braintree订阅
EN

Stack Overflow用户
提问于 2019-11-04 15:56:12
回答 1查看 186关注 0票数 0

我们正在使用Laravel Cashier (Braintree)和Laravel版本5.8。我们有一个案例,一个用户为不同的订单多次订阅相同名称的相同计划。我们希望给用户取消他们的订阅的能力。我们尝试使用下面的语句取消具有订阅名称的订阅,如手册此处https://laravel.com/docs/5.8/braintree#cancelling-subscriptions所建议的。

代码语言:javascript
运行
复制
$user->subscription('main')->cancel();

$user->subscription('main')->cancelNow();

我们正在传递订阅名称。它像预期的那样工作良好,并且还更新了订阅表的"ends_at“列中的日期。

这里的问题是,因为我们对用户订阅的订阅具有相同的名称。所以在我们的例子中,它在这里返回最后一个订阅的订单,并取消那个订单。它就像它应该做的一样好。

但是我们想要取消基于存储在subscriptions表中的braintree_id的订阅。我们能做到吗?到目前为止,我们尝试了如下:

代码语言:javascript
运行
复制
use Braintree\Subscription;

$subcriptionObj = Subscription::find($subscription); //where $subscription is braintree_id from subscriptions table.
if ($subcriptionObj->status == 'Canceled')
    abort(400, 'Subscription Not Active');

Subscription::cancel($subscription);

但是,这会取消Braintree上的订阅,但不会更新订阅表中的列"ends_at“。

有没有人能提出解决这个问题的办法?任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-06 15:33:29

因为Laravel Braintree出纳员模块在内部使用Braintree订阅库。所以我想直接在我的控制器中使用同样的东西。

我在订阅控制器中使用了命名空间来直接调用Braintree订阅类。以下是根据订阅ID取消订阅的代码。

代码语言:javascript
运行
复制
use Braintree\Subscription;

public function cancelsubscription(User $user, $subscriptionId)
{
    $subcriptionObj = Subscription::find($subscriptionId); 
    if(is_null($subcriptionObj)){
        abort(400, 'Subscription is not found.');
    }

    if ($subcriptionObj->status == 'Canceled')
        abort(400, 'Subscription is not Active.');

    // In below line we are finding the Subscription DB Obj using cashier module here to update the ends_at date column
    $subsDbObj = $user->subscriptions->filter(function($sub) use ($user,$subscriptionId){
        return $sub->braintree_id == $subscriptionId && $sub->user_id == $user->id;})->values(); 

    Subscription::cancel($subscriptionId);

    if(! is_null($subsDbObj[0])){
        //Internally cashier module doing the same to update the subscription table
        $subsDbObj[0]->ends_at = Carbon::now();
        $subsDbObj[0]->save();
    }

    return 'Cancelled';
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58689211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档