我目前正在处理一个项目,并面临一个任务问题。我正在尝试随机生成一个6位数的优惠券号码,并通过API将其发布到chargify帐户。如果优惠券创建成功,我希望通过电子邮件将相同的优惠券代码发送给客户。
根据chargify文档,这就是我应该如何从我的应用程序中向chargify发送所有详细信息的方式:
{"subscription":{
"product_handle":"[@product.handle]",
"customer_attributes":{
"first_name":"Joe",
"last_name":"Blow",
"email":"joe@example.com"
},
"credit_card_attributes":{
"full_number":"1",
"expiration_month":"10",
"expiration_year":"2020"
},
"coupon_code":"6 digit random code"
}}
"""
https://[@subdomain]chargify.com/subscriptions.json.
我可以通过这种方法创建一个6位数的随机数字代码:
rand(999999).to_s.center(6, rand(9).to_s).
然而,这似乎对我不起作用。任何建议都将不胜感激。
感谢
我不是我们的技术或开发人员,但我99%确信您只能在API调用中指定预先定义的优惠券代码。您必须在Chargify管理员web界面中定义优惠券代码。在上面的API调用中,您可以将优惠券应用于订阅,但假设您已经在管理界面中定义了优惠券代码。
我们将在未来添加该功能,但我没有具体的日期。
很抱歉。
---Lance Walley---Chargify
我不确定您对center
的调用要做什么。最明智的做法是零填充优惠券代码。这样做:
"%06d" % rand(1000000)
这将生成诸如"664001"one_answers"061532"之类的代码。
请注意,您需要rand(1000000)
而不是rand(999999)
。这是因为rand给你的随机整数比参数少0到1。rand(999999)
只会给你最多999998的随机数。
上面的代码违反了DRY(不要重复自己(:"06"one_answers"1000000"都取决于优惠券代码的长度。这里有一个解决方案:
COUPON_CODE_LENGTH = 6
"%0#{COUPON_CODE_LENGTH}d" % rand(10 ** COUPON_CODE_LENGTH)
虽然更长,但如果优惠券代码长度应该更改,现在只有一件事需要更改。用命名常量替换"幻数"也有助于代码传达其意图。