私は、トレーディングAPIへの署名要求を作成しようとしていますを締結しColdFusionのCFHTTPがbitfloor.comでRESTリクエストボディ
Bitfloorは私与えます(それはREST APIがあります)キー(すなわち6bd2b780-00be-11E2-bde3-2837371c3c3a)
2)秘密鍵(すなわちoaFz62YpmbWiXwseMUSod53D8pOjdyVcweNYdiab/TSQqxk6IuemDvimNaQoA ==)
次の要求を行うためのBitfloorの正確な指示です:
リクエストは、HTTPS POSTリクエストでポート443(https)でなければなりません。各リクエストには必須のヘッダーが含まれている必要があります(下記参照)。ヘッダーは、改ざんを防止するための要求を識別、検証、および検証します。 ヘッダー
bitfloor-keyこれは、アカウントを一意に識別するためにbitfloorによって提供されます。 (すなわち6bd2b780-00be-11E2-bde3-2837371c3c3a)
bitfloor-SIGN符号フィールドは、APIキーに対応する秘密鍵を使用して、リクエストボディのSHA512-HMACです。
リクエストに署名するには、 base64は、生のバイト(64バイト)に秘密鍵をデコードします。これらのバイトは、http要求本体のsha512-hmac署名に使用します。 Base64は署名結果をエンコードし、このヘッダーフィールドに送信します。
bitfloor-passphraseこのapiキーの作成時に指定したパスフレーズ。パスフレーズを忘れても元に戻すことはできません。新しいAPIキーを作成する必要があります。
bitfloorバージョンあなたが興味を持っているリソースのAPIバージョン。唯一の有効な値は、現在1
試行錯誤の完全な8時間後
といずれかの繰り返しインターネットを検索です洞察力や情報のようなものですが、次のコードは、要求が正しく構築される方法の方向にどこかにあると思います。 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
このような難しい質問に答えるためのポイントを与えるためにここに来ました。 –