首页 > 解决方案 > 如何从定期购买中取回订阅?

问题描述

我正在使用Recurly PHP Client构建自定义结帐。由于我们使用自己的网关逻辑,我们被迫使用Create Purchase方法,而不是 Create Subscription(因为Create Subscription不接受gateway_code作为参数)。创建订阅返回创建的订阅 - 简单!

但是Create Purchase返回一个发票集合。可以将其分开以找到新创建的$subscription对象,但这似乎不像预期的过程。(希望)有更清洁的方法吗?

我的购买方法如下-见代码注释。

protected static function create_subscription( $user_id, $args ) {

    $result = false;

    $purchase = new Recurly_Purchase();
    $purchase->currency          = $args['currency'];
    $purchase->collection_method = 'automatic';
    $purchase->gateway_code      = $args['gateway_code'];

    $account             = new Recurly_Account( $user_id );
    $account->email      = $args['email'];
    $account->first_name = $args['billing_first_name'];
    $account->last_name  = $args['billing_last_name'];
    $account->vat_number = $args['vat_number'];

    $billing_info           = new Recurly_BillingInfo();
    $billing_info->token_id = $args['recurly_token'];

    $account->billing_info = $billing_info;

    $purchase->account = $account;

    $subscription            = new Recurly_Subscription();
    $subscription->plan_code = $args['plan_code'];

    $purchase->subscriptions = array( $subscription );

    try {
        // "invoice" is the method to transact a Recurly_Purchase.
        $purchase = Recurly_Purchase::invoice( $purchase );
        if( $purchase instanceof Recurly_InvoiceCollection ) {
           // this seems incredibly janky and error-prone
           $result = reset( $purchase->charge_invoice->line_items )->subscription->get();
        }
    } catch ( Exception $e ) {
        $result = $e;
    }
    // I need this to return the $subscription object generated by the purchase
    return $result;

}

标签: phprecurly

解决方案


创建订阅时,成功的响应将包含该订阅的 UUID。我不是 PHP 开发人员,但它可能看起来像这样:

 $subscription = new Recurly_Subscription();
 $subscription->plan_code = $args['plan_code'];
 $subscription->account = $account;
 $subscription->currency = $args['currency'];
 $subscription->create();
 $uuid = isset($subscription->uuid);
 $result = Recurly_Subscription::get($uuid);
 return $result;

另外,请注意,从 Recurly API 版本 2.17+ 开始,您现在可以gateway_code作为正文参数传递来创建订阅 创建购买,就像您最初希望的那样。这是Recurly API Release notes的链接,它指示了更改的时间。


推荐阅读