我正在使用Chargify API(https://github.com/jforrest/Chargify-PHP-Client/),我们有成千上万的客户每月订阅,所以他们在特定日期收费,我使用的是每天检查订阅的cron
问题是,如果订阅不能在本应收费的日期收费,我们就会错过订阅。有一段时间,由于账户中没有资金,或者他们的卡出现了任何原因,导致延迟几天,客户卡无法收费。
我想知道什么时候客户卡在chargify中收费,这样我就可以生成一个新的订单,我已经使用了上面的PHP库,但找不到一个函数来获取我的信息。
有人能帮助解决这个问题吗?或者有其他解决方案可以解决这个问题?
感谢
具体文档如下:https://docs.chargify.io/webhooks
不需要cron作业!
您可以通过webhook进行设置,并在客户收费后立即获得所有信息,为此,您需要在服务器上设置webhook url,然后将其添加到chargify帐户,登录后转到设置->webhook->添加url,例如:
http://www.domain.com/webhooks/
在"webhooks"目录下创建index.php文件,您将从chargify获得一个数组,如下所示:
Array
(
[id] => 29660474
[event] => renewal_success
[payload] => Array
(
[subscription] => Array
(
[activated_at] => 2014-12-12 06:11:51 -0500
[balance_in_cents] => 1900
[cancel_at_end_of_period] => false
[canceled_at] =>
[cancellation_message] =>
[created_at] => 2014-12-12 06:11:40 -0500
[current_period_ends_at] => 2015-02-12 06:11:40 -0500
[expires_at] =>
[id] => 7231335
[next_assessment_at] => 2015-02-12 06:11:40 -0500
[payment_collection_method] => automatic
[snap_day] =>
[state] => active
[trial_ended_at] =>
[trial_started_at] =>
[updated_at] => 2015-01-12 06:22:21 -0500
[current_period_started_at] => 2015-01-12 06:11:40 -0500
[previous_state] => active
[signup_payment_id] => 78110242
[signup_revenue] => 19.00
[delayed_cancel_at] =>
[coupon_code] =>
[total_revenue_in_cents] => 1900
[product_price_in_cents] => 1900
[product_version_number] => 6
[payment_type] => credit_card
[customer] => Array
(
[address] => xx xxxx place Success
[address_2] =>
[city] => Perth
[country] => AU
[created_at] => 2014-12-12 06:11:39 -0500
[email] => xxxxxxx@hotmail.com
[first_name] => Jay
[id] => 7093037
[last_name] => Gable
[organization] => Large
[phone] => xxxxxxxx
[portal_customer_created_at] => 2014-12-12 06:11:52 -0500
[portal_invite_last_accepted_at] =>
[portal_invite_last_sent_at] =>
[reference] => 548acd6a8ef3a
[state] => WA
[updated_at] => 2014-12-12 06:11:52 -0500
[verified] => false
[zip] => 6164
)
[product] => Array
(
[accounting_code] =>
[archived_at] =>
[created_at] => 2014-08-11 03:27:20 -0400
[description] => xxxx
[expiration_interval] =>
[expiration_interval_unit] => never
[handle] => monthly-subscription
[id] => 3493985
[initial_charge_in_cents] =>
[interval] => 1
[interval_unit] => month
[name] => 1 Pair Monthly
[price_in_cents] => 1900
[request_credit_card] => true
[require_credit_card] => true
[return_params] =>
[return_url] =>
[taxable] => false
[trial_interval] =>
[trial_interval_unit] => month
[trial_price_in_cents] =>
[update_return_url] =>
[updated_at] => 2014-12-11 17:09:41 -0500
[product_family] => Array
(
[accounting_code] =>
[description] => Standard Monthly Subscriptions
[handle] => monthly-subscription
[id] => 421701
[name] => Australia
)
[public_signup_pages] => Array
(
[id] => 100806
[url] => xx
)
)
[credit_card] => Array
(
[billing_address] => xxxxx Success
[billing_address_2] =>
[billing_city] => Perth
[billing_country] => AU
[billing_state] => WA
[billing_zip] => 6164
[card_type] => master
[current_vault] => braintree_blue
[customer_id] => 7093037
[customer_vault_token] =>
[expiration_month] => 2
[expiration_year] => 2015
[first_name] => XXXX
[id] => 4693476
[last_name] => Gable
[masked_card_number] => XXXX-XXXX-XXXX-xxxx
[vault_token] => xxxxxx
[payment_type] => credit_card
)
)
[site] => Array
(
[id] => xxxxx
[subdomain] => xxxxx
)
)
)
我希望这能有所帮助。
最简单的方法是将上次成功的交易日期存储在数据库中,并经常使用cron或mysql事件调度程序检查自上次更新以来是否已经过去了一个月,从未使用过chargify,但paypal api可以与您的服务器通信并返回交易状态,您可以在您的网站上使用它来更新数据库