Я создаю пользовательский заказ с помощью 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;
}