php - 如何从定期购买中取回订阅?
问题描述
我正在使用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;
}
解决方案
创建订阅时,成功的响应将包含该订阅的 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的链接,它指示了更改的时间。
推荐阅读
- python - 字节和字节串是一回事吗?
- python - DataFrame 仅使用 BeautifulSoup 打印 XML 的最后一行
- python - 将 DOCX 字节流转换为 PDF 字节流 Python
- javascript - 如何使用 css 降低文本选择背景的高度?
- javascript - 如何通过资源ID获取元素?
- typescript - for 循环中的 Promise 数组 - 第二次迭代时为空
- flutter - 棘手的堆栈或列以颤振布局之间的空间为中心
- c - 在 STM32 上使用 DMA 复制 16 位数据
- git - kivy pip install 失败,说不是 git 存储库
- android - 如何设置在 backstack 上检查的底部导航项?