Lua cURL POST 无效的 Json [Pusher API]

我正在尝试使用 cURL 与 Pusher API(pusher.com)进行交互。然而,我一直收到“提供了无效的 JSON(无法解析)”的响应。任何帮助都将不胜感激,这是我的触发器函数:

function trigger(name, data, channel)
    string_to_sign = "POST\n/apps/"..pusher_app_id.."/events\n"..params
    signature = hmac.digest("sha256", string_to_sign, pusher_secret)

    md5 = md5.sumhexa('{"name":"foo","channel":"test-channel","data":"{\"some\":\"data\"}"}');

    c = curl.new()
    c:setopt(curl.OPT_URL, pusher_server..'apps/'..pusher_app_id..'/events'..'?'..params..'&auth_signature='..signature..'&body_md5='..md5)
    c:setopt(curl.OPT_POST, true)
    c:setopt(curl.OPT_HTTPHEADER, "Content-Type: application/json")
    c:setopt(curl.OPT_POSTFIELDS, '{"name":"'..name..'","channel":"'..channel..'","data":"{\"some\":\"data\"}"}')
    c:perform()
    c:close()
end

如果我打印我放在 OPT_POSTFIELDS 中并将其粘贴到 JSON 验证器中的 JSON,它确实是完全有效的。根据文档,这是 /events 的正确用法,我的身份验证也正常工作。

点赞
用户3810784
用户3810784

我回到我的函数中,采纳了 moteus 的建议,通过修复 md5 并将其应用于签名来解决了我的问题。我还使用 luajson 模块来处理编码。这似乎解决了问题。

function trigger(name, data, channel)
  data_table = {
    ["name"] = name,
    ["channel"] = channel,
    ["data"] = data
  }

  json_data = json.encode(data_table)
  md5 = md5.sumhexa(json_data)

  string_to_sign = "POST\n/apps/"..pusher_app_id.."/events\n"..params.."&body_md5="..md5
  signature = hmac.digest("sha256", string_to_sign, pusher_secret)

  c:setopt(curl.OPT_URL, pusher_server..'apps/'..pusher_app_id..'/events'..'?'..params..'&auth_signature='..signature..'&body_md5='..md5)
  c:setopt(curl.OPT_POST, true)
  c:setopt(curl.OPT_HTTPHEADER, "Content-Type: application/json")
  c:setopt(curl.OPT_POSTFIELDS, json_data)
  c:perform()
  c:close()
end
2014-10-12 15:38:21