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