내가 거래 API에 서명 된 요청을 만들려고 노력하고 서명ColdFusion에서는 cfhttp 태그가 bitfloor.com에서 REST 요청 본문
Bitfloor이 날 수 있습니다 (그것은 REST API를이다) 키 (예 : 6bd2b780-00be-11e2-bde3-2837371c3c3a) 다음
2) 비밀 키 (예 : oaFz62YpmbWiXwseMUSod53D8pOjdyVcweNYdiab/TSQqxk6IuemDvimNaQoA ==)
요청을 만들기위한 Bitfloor의 정확한 지침입니다 :
요청은 포트 443 (https)에서 HTTPS POST 요청이어야합니다. 각 요청에는 필수 헤더 (아래 나열)가 있어야합니다. 헤더는 변조를 방지하기 위해 요청을 식별하고 확인하며 유효성을 검사합니다. 헤더
bitfloor 키이는 고유 계정을 식별하는 데 bitfloor에 의해 제공됩니다. (즉 6bd2b780-00be-11e2-bde3-2837371c3c3a)
bitfloor 서명 부호 필드 API 키에 대응하는 비밀 키를 이용하여 상기 요청에 본체의 SHA512-HMAC이다.
요청에 서명하려면 base64 비밀 키를 원시 바이트 (64 바이트)로 디코딩하십시오. http 요청 본문의 sha512-hmac 서명에 해당 바이트를 사용하십시오. Base64는 서명 결과를 인코딩하고이 헤더 필드로 전송합니다.
bitfloor-passphrase이 api 키를 생성 할 때 지정한 암호입니다. 암호를 잊어 버린 경우 암호를 복구 할 수 없습니다. 새 API 키를 만들어야합니다.
bitfloor 버전에 관심이있는 자원의 API 버전. 유일한 유효 값이 현재 1
시행 착오의 전체 팔시간 후
하고 반복적 인터넷을 검색하다 통찰력이나 정보의 일종으로, 다음 코드는 내가 요청한 바에 상관없이 요청을 올바르게 구성하는 방법의 방향 어딘가에 있다고 생각하는 것에 가까이 갈 수 있습니다. "잘못된 서명"이 반환됩니다. API.
<cffunction name="HMAC_SHA512" returntype="binary" access="public" output="false">
<cfargument name="signKey" type="string" required="true">
<cfargument name="signMessage" type="string" required="true">
<cfset var jMsg = JavaCast("string",arguments.signMessage).getBytes("iso-8859-1")>
<cfset var jKey = JavaCast("string",arguments.signKey).getBytes("iso-8859-1")>
<cfset var key = createObject("java","javax.crypto.spec.SecretKeySpec")>
<cfset var mac = createObject("java","javax.crypto.Mac")>
<cfset key = key.init(jKey,"HmacSHA512")>
<cfset mac = mac.getInstance(key.getAlgorithm())>
<cfset mac.init(key)>
<cfset mac.update(jMsg)>
<cfreturn mac.doFinal()>
</cffunction>
나는 그것이 무엇을하는지 아무 생각이 : 여기
... 나는 지금까지 무엇을 FIRST, 나는 누군가가 SHA512 서명을 할 쓴 웹에이 기능을 발견 , 그러나 그것은 일하는 것처럼 보이며 오류없이 그렇게합니다.
다음은이 함수를 구현 한 것과 요청을 시도한 것입니다. 참고 : "nonce"값은 요청과 함께 보내야하는 필수 매개 변수입니다.
<cffunction name="myorders">
<cfset nonce = dateDiff("s",createDateTime(2012,01,01,0,0,0),now())>
<cfset requestbody = "?nonce=#nonce#">
<cfset key = "oaFz62YpmbWiXwseMUSod53D8pOjdyVcweNYdiab/TSQqxk6IuemDvimNaQoA==">
<cfset sign = HMAC_SHA512(key,requestbody)>
<cfset signed = binaryEncode(sign,"Base64")>
<!--- HTTP REQUEST --->
<cfhttp url = "https://api.bitfloor.com/orders#requestbody#"
method = "post"
result = "bitfloor">
<!--- HEADERS --->
<cfhttpparam
type = "body"
value = requestbody>
<cfhttpparam
type = "header"
name = "bitfloor-key"
value = "6bd2b780-00be-11e2-bde3-2837371c3c3a">
<cfhttpparam
type = "header"
name = "bitfloor-sign"
value = signed>
<cfhttpparam
type = "header"
name = "bitfloor-passphrase"
value = "mysecretpassphrase">
<cfhttpparam
type = "header"
name = "bitfloor-version"
value = "1">
</cfhttp>
</cffunction>
내 혼란의 대부분은 "요청 본문"이 무엇인지 정확하게 모르는 것에서 비롯된 것이라고 생각합니다. 아마 내가 옳은 것을 사인하지 않을 것 같아.
서명 된 요청에 익숙한 Coldfusion 프로그래머가 있기를 바랍니다. 나는 위트를 끝내고있다.
도와주세요! 나마스테
는
정말 고마워요! 나는 수백 번 실패한 후에 실제 데이터가 마침내 반환 된 것을 느낄 때 내가 느꼈던 기운을 당신에게 설명해주기를 바란다. 그것은 결코 작동하지 않는 것처럼 보였다. 너는 진짜 생명의 은인이야! 고마워요 고마워요 고마워요! 나는이 웹 사이트에 계속 머물러 앞으로 최선을 다할 것입니다. 나마스테 내 친구 – Jay
다행히 도왔습니다! (새로운 API 키를 생성하는 것을 잊지 마십시오 :) – Leigh
어려운 질문에 대답하기위한 요점을 제공하기 위해 여기에 왔습니다. –