Как я могу получить подписку от повторной покупки? - PullRequest
1 голос
/ 23 марта 2019

Я создаю пользовательский заказ с помощью Recurly PHP Client . Поскольку мы используем собственную логику шлюза, мы вынуждены использовать метод Создать покупку , в отличие от Создать подписку (так как Создать подписку не принимает gateway_code в качестве параметра). Создать подписку возвращает созданную подписку - просто!

Но Создать покупку возвращает коллекцию счетов. Это можно разделить на части, чтобы найти только что созданный объект $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;

}

1 Ответ

0 голосов
/ 02 мая 2019

Когда вы создаете подписку, успешный ответ будет включать 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 в качестве параметра тела в создать подписку AND создать покупку , как вы изначально надеялись сделать.Вот ссылка на примечания к выпуску Recurly API , в которых указано, когда было сделано изменение.

...