2014-10-12 3 views
0

Pusher API (pusher.com)에서 cURL을 사용하려고합니다. 그러나 "잘못된 JSON 제공 (구문 분석 할 수 없음)"응답을 계속받습니다. 내가 OPT_POSTFIELDS에서 퍼팅하고있는 JSON을 인쇄하고 JSON 유효성 검사기에 붙여 넣을 경우루아 cURL POST 잘못된 Json [Pusher API]

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 

, 그것은 참으로 완전히 유효합니다 : 어떤 도움도 여기 내 트리거 기능이다 감상 할 수있다. 문서에 따르면/이벤트에 대한 올바른 사용법이며 내 인증도 정상적으로 작동합니다.

+1

다른 값을 해쉬 한 다음 보냅니다. 추신. 나는 각각의 새로운 rquest에 대한 쉬운 핸들을 만드는 것이 꽤 비싼 작업임을 발견했다. 그래서 동일한 핸들을 재사용 할 수 있습니까? – moteus

+0

어떤 줄에 (표시 할) 그 오류가 발생 했습니까? – Schollii

+0

오류는 푸시 (push)의 응답이며 특정 회선의 응답이 아닙니다. 포스트 필드의 JSON은 어떻게 든 문제가됩니다. – Krankzinnig

답변

0

mote5를 수정하고 서명에 적용하여 내 문제를 해결할 수있었습니다. 또한 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