#php #recurly
#php #recurly
Вопрос:
Я создаю пользовательскую проверку с помощью Recurly PHP-клиента. Поскольку мы используем нашу собственную логику шлюза, мы вынуждены использовать метод 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;
}
Ответ №1:
Когда вы создаете подписку, успешный ответ будет включать 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, в которых указано, когда было внесено изменение.
Комментарии:
1. Спасибо, но я пытался получить подписку с
Recurly_InvoiceCollection
, а не создавать подписку с нуля. Я должен также отметить, что вы все еще не можете перейтиgateway_code
кcreate_purchase
— как я отметил в вопросе, мы не можем использоватьcreate_subscription
по этой причине.2. Хорошо, не беспокойтесь. Для справки, вы можете перейти
gateway_code
кcreate_purchase
, который указан в качестве предпоследнего параметра в той же ссылке, которую вы разместили в своем первоначальном вопросе. Мой ответ процитированcreate_subscription
, но я добавил ссылку наcreate_purchase
для наглядности.3. Они утверждали, что это правда, но я получил независимое подтверждение от разработчиков, что оно по-прежнему недоступно. Документация неверна.