5

我在 MailChimp 控制器中使用以下代码来提交简单的时事通讯数据。当它被发送时,我收到以下错误,因为“此服务器未导出方法 -90”我在下面附加了我的控制器代码。我正在将此控制器用于一个简单的时事通讯注册表单。(姓名,电子邮件)

class MailchimpController < ApplicationController

  require "net/http"
  require "uri"

  def subscribe  
    if request.post?
      mailchimp = {}
      mailchimp['apikey']  =  'f72328d1de9cc76092casdfsd425e467b6641-us2'
      mailchimp['id']  =  '8037342dd1874'
      mailchimp['email_address']  =  "email@gmail.com"
      mailchimp['merge_vars[FNAME]']  =  "FirstName"
      mailchimp['output']  =  'json'

      uri = URI.parse("http://us2.api.mailchimp.com/1.3/?method=listSubscribe")
      response = Net::HTTP.post_form(uri, mailchimp)    
      mailchimp = ActiveSupport::JSON.decode(response.body)

      if mailchimp['error']
        render :text =>    mailchimp['error'] + "code:" + mailchimp['code'].to_s  
      elsif mailchimp == 'true'
        render :text => 'ok' 
      else
        render :text => 'error'
      end
    end
   end    

end
4

3 回答 3

4

我强烈推荐原始人宝石:https ://github.com/tatemae-consultancy/hominid

于 2011-03-09T05:50:19.913 回答
2

问题是 Net::HTTP.post_form 没有传递“方法” GET 参数。不是一个大红宝石用户,我不确定使用 Net::HTTP 执行此操作的实际正确方法是什么,但这有效:

require "net/http"
data="apikey=blahblahblah"
response = nil
Net::HTTP.start('us2.api.mailchimp.com', 80) {|http|
  response = http.post('/1.3/?method=lists', data)
}
p response.body

这就是 lists() 方法(为简单起见),您必须建立(并对您的值进行 urlencode!)您的完整 POST 参数,而不是简单地提供哈希。

您是否看过许多已经可用于红宝石的宝石?

http://apidocs.mailchimp.com/downloads/#ruby

更大的问题,也是我回复这个问题的主要原因,是你的 API 密钥没有被混淆得足够好。当然,我习惯与他们合作,但我能够很快猜到。我建议立即在您的帐户中禁用该密钥,然后编辑帖子以实际拥有完全伪造的数据,而不是任何接近正确密钥的数据。另一方面,列表 id 根本不重要。

于 2011-03-08T16:53:49.543 回答
1

如果在将散列传递给 Net::HTTP 之前将其转换为 json,则可以使用散列。合并后的代码如下所示:

  mailchimp = {}
  mailchimp['apikey']             =  'APIKEYAPIKEYAPIKEYAPIKEY'
  mailchimp['id']                 =  '8037342dd1874'
  mailchimp['email_address']      =  "email@gmail.com"
  mailchimp['merge_vars[FNAME]']  =  "FirstName"
  mailchimp['output']             =  'json'

  response = nil
  Net::HTTP.start('us2.api.mailchimp.com', 80) {|http|
    response = http.post('/1.3/?method=listSubscribe', mailchimp.to_json)
  }
于 2011-03-09T05:49:02.103 回答