質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

2009閲覧

zaifの現物取引API(get_info)でエラー

hiroai

総合スコア7

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2018/04/06 15:08

前提・実現したいこと

Google Apps Scriptを利用して自動売買のプログラムを実現したいと思っております。
テストがてら取引APIのget_infoを利用しようとプログラムを組みましたが、以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

{"success": 0, "error": "signature mismatch"}

該当のソースコード

Google

1function zf_get_info() { 2 3 var UserInfo = "APIキーとSecretキーを取得しています"; 4 var nonce = (new Date().getTime() / 1000).toFixed(0); 5 var params = "method=get_info&nonce=" + nonce; 6 var sign = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, params, UserInfo.secretkey); 7 8 sign = sign.map(function(e) {return ("0" + (e & 0xFF).toString(16)).slice(-2)}).join(""); 9 var options = { 10 method: "post", 11 headers: { 12 "key": UserInfo.apikey, 13 "sign": sign, 14 'Content-Type':'application/x-www-form-urlencoded' 15 }, 16 muteHttpExceptions: true 17 }; 18 19 var res = UrlFetchApp.fetch("https://api.zaif.jp/tapi", options); 20 21 return res; 22 23}

試したこと

zaifの取引APIでエラーが発生します。署名がうまくいっていないようなのですが、解決方法が分かりません。Javascriptの経験もなく困っています。どなたかご教授お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

初めてこのAPIを使いましたが勉強になりました。

ZAIF API 共通情報

注意

その他のメソッド毎の固有のパラメータも全てPOSTパラメータにて送信してください。
nonceパラメータの値は実効毎に増分されていないとエラーが発生します。また増分量は少数点以下の値にも対応しております。

ポイントはpayloadPOSTパラメータを送信する必要があるという点でしょうか。
あとsignature も下記コードではurlencodeしてませんが、対応する必要があるかもです。

JavaScript

1var keys = { 2 'api': 'APIキー', 3 'secret': 'secretキー' 4}; 5 6function get_nonce(){ 7 return (new Date().getTime() / 1000).toFixed(0); 8} 9function to_byteshex(data) { 10 return data.map(function(e) { 11 var v = (e < 0 ? e + 256 : e).toString(16); 12 return ('00' + v).slice(-2); 13 }).join(""); 14} 15function create_postHeader(keys){ 16 var signature = 'method=get_info&nonce=' + get_nonce(); 17 Logger.log(signature); 18 var sign = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, signature, keys.secret); 19 return { 20 'method': 'post', 21 'Content-Type': 'application/x-www-form-urlencoded', 22 'headers': { 23 'sign': to_byteshex(sign), 24 'key': keys.api 25 }, 26 'payload': signature 27 }; 28} 29 30function myFunction() { 31 var options = create_postHeader(keys); 32 Logger.log(options); 33 const endpoint = 'https://api.zaif.jp/tapi'; 34 var response = UrlFetchApp.fetch(endpoint, options); 35 Logger.log("#############################"); 36 Logger.log(response); 37 Logger.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); 38 Logger.log(response.getContentText()); 39} 40

◇余談
1,実行ログはメニューの表示→ログで表示できます。
2,動作確認済みの公式のPytho/Swit/Go語のサンプルコードがここにあるので、
npmでjson-serverを立てて、Fidderでリクエストを確認してみてくださいな。

投稿2018/04/07 04:35

編集2018/04/07 05:15
umyu

総合スコア5846

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiroai

2018/04/07 10:12

ご連絡が遅くなり大変申し訳ありません。 今試してみたところ、無事に処理が成功しました! 二週間近く色々手を尽くしたのですが、全く解決せず、大変感謝しております。 ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問