我正在尝试使用PHP中的recurly.js api获取订阅数据。下面是我的代码:
require_once('lib/recurly.php');
Recurly_Client::$subdomain = 'https://subdomain.recurly.com/v2/subscriptions';
Recurly_Client::$apiKey = 'privatekey';
$subscriptions = Recurly_SubscriptionList::getActive();
print_r($subscriptions);
foreach ($subscriptions as $subscription) {
print_r($subscription);
}
$subscriptions正在打印这个:
Recurly_SubscriptionList Object(
[_position:Recurly_Pager:private] => 0
[_objects:protected] =>
[_href:protected] => /subscriptions?state=active
[_type:protected] =>
[_client:protected] => Recurly_Client Object
(
[_apiKey:Recurly_Client:private] =>
[_acceptLanguage:Recurly_Client:private] => en-US
)
[_links:protected] => Array
(
)
)
而$subscription什么也没打印。出了什么问题,结果不是订阅列表。
由于print_r(gettype($subscription(;是一个对象,你不能把它当作一个数组。为了将对象的属性作为数组获取,您可以使用内置函数get_obj_vars。
您可以按照以下代码操作:
require_once('lib/recurly.php');
Recurly_Client::$subdomain = 'https://subdomain.recurly.com/v2/subscriptions';
Recurly_Client::$apiKey = 'privatekey';
$subscriptions = Recurly_SubscriptionList::getActive();
foreach(get_obj_vars($subscription) as $key => $value) {
echo $key . ' => ' . $value;
}
这基本上会在对象$subscriptions中创建所有公共成员的数组。但是,作为print_r($subscriptions(的输出;仅包含私有和受保护的成员,它实际上会返回一个空数组。
可以使用预格式化标记以可读格式打印订阅数组,如下所示。 另外,请注意,已更正了在代码中输入子域的方式。
<?php
require_once('lib/recurly.php');
Recurly_Client::$subdomain = '<mySubdomain>'; //Only enter the Recurly subdomain name here, not URL
Recurly_Client::$apiKey = 'privatekey';
$subscriptions = Recurly_SubscriptionList::getActive();
print_r($subscriptions);
foreach ($subscriptions as $subscription) {
//print_r($subscription);
echo '<pre>';
print_r (array($subscription));
echo '</pre>';
}
?>
目前,您已经编写了导致问题的子域的整个URL。所以只需替换此行
Recurly_Client::$subdomain = 'https://subdomain.recurly.com/v2/subscriptions';
跟
Recurly_Client::$subdomain = 'your-subdomain-name'; // i.e devapp,myapp..etc
您不需要编写整个子域URL,您只需要传递在配置->站点设置中找到的子域名(仅子域的名称(。
无论注册时为您的子域指定什么名称。