MtGox/API/HTTP/JavaExample
Jump to navigation
Jump to search
package com.mtgox.api;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class Client {
protected String key;
protected String secret;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Client client = new Client(
"your key here",
"your secret here"
);
HashMap<String, String> query_args = new HashMap<>();
query_args.put("currency", "BTC");
query_args.put("amount", "5.0");
query_args.put("return_success", "https://mtgox.com/success");
query_args.put("return_failure", "https://mtgox.com/failure");
client.query("1/generic/private/merchant/order/create", query_args);
}
public Client(String key, String secret) {
this.key = key;
this.secret = secret;
}
public String query(String path, HashMap<String, String> args) {
try {
// add nonce and build arg list
args.put("nonce", String.valueOf(System.currentTimeMillis()));
String post_data = this.buildQueryString(args);
// args signature
Mac mac = Mac.getInstance("HmacSHA512");
SecretKeySpec secret_spec = new SecretKeySpec((new BASE64Decoder()).decodeBuffer(this.secret), "HmacSHA512");
mac.init(secret_spec);
String signature = (new BASE64Encoder()).encode(mac.doFinal(post_data.getBytes()));
// build URL
URL queryUrl = new URL("https://mtgox.com/api/" + path);
// create connection
HttpURLConnection connection = (HttpURLConnection)queryUrl.openConnection();
connection.setDoOutput(true);
// set signature
connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; Java Test client)");
connection.setRequestProperty("Rest-Key", this.key);
connection.setRequestProperty("Rest-Sign", signature.replaceAll("\n", ""));
// write post
connection.getOutputStream().write(post_data.getBytes());
// read info
byte buffer[] = new byte[16384];
int len = connection.getInputStream().read(buffer, 0, 16384);
System.out.print(new String(buffer, 0, len, "UTF-8"));
} catch (Exception ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
return "foo";
}
protected String buildQueryString(HashMap<String, String> args) {
String result = new String();
for (String hashkey : args.keySet()) {
if (result.length() > 0) result += '&';
try {
result += URLEncoder.encode(hashkey, "UTF-8") + "="
+ URLEncoder.encode(args.get(hashkey), "UTF-8");
} catch (Exception ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
}
return result;
}
}