Order Interface - Myanmar
Includes deposit/payment on behalf, recharge, settlement, and other order interfaces
Request
Request URL
POST https://DOMAIN/octopus/api/order/new
Basic parameters
Signature parameters in headers
Deposit
Java example (building payload, computing HMAC-SHA256 signature, POST with OC-Key
and OC-Signature
):
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.*;
import org.json.JSONObject;
public class Main {
private static final String API_KEY = "API_KEY";
private static final String API_SECRET = "API_SECRET";
private static final String MerchantUID = "Merchant_UID";
private static final String API_URL = "https://DOMAIN/octopus/api/order/new";
public static void main(String[] args) {
try {
Map<String, String> data = new TreeMap<>();
data.put("transaction_type", "income");
data.put("amount", "100.00");
data.put("currency", "mmk");
data.put("payment", "myanmar");
data.put("to_bank_name", "kbz");
data.put("merchant_order_id", "123qq");
data.put("merchant_uid", MerchantUID);
data.put("redirect_url", "https://example.com/redirect");
data.put("notify_url", "https://example.com/notify");
data.put("response_type", "json");
data.put("country", "myanmar");
data.put("channel", "myanmar");
data.put("accounting_type", "receive");
StringBuilder dataString = new StringBuilder();
for (Map.Entry<String, String> entry : data.entrySet()) {
if (dataString.length() > 0) dataString.append("&");
dataString.append(entry.getKey()).append("=").append(entry.getValue());
}
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(API_SECRET.getBytes(), "HmacSHA256");
sha256_HMAC.init(secret_key);
String signature = javax.xml.bind.DatatypeConverter
.printHexBinary(sha256_HMAC.doFinal(dataString.toString().getBytes()))
.toLowerCase();
URL url = new URL(API_URL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("OC-Key", API_KEY);
conn.setRequestProperty("OC-Signature", signature);
conn.setDoOutput(true);
String jsonInputString = new JSONObject(data).toString();
try (OutputStream os = conn.getOutputStream()) {
byte[] input = jsonInputString.getBytes("utf-8");
os.write(input, 0, input.length);
}
// Read the response ...
} catch (Exception e) {
e.printStackTrace();
}
}
}
Response (deposit)
- On success:
result
:"success"
data
:{"payment": {...}, "payment_url": "url"}
Payment
Java example:
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.*;
import org.json.JSONObject;
public class Main {
private static final String API_KEY = "API_KEY";
private static final String API_SECRET = "API_SECRET";
private static final String MerchantUID = "Merchant_UID";
private static final String API_URL = "https://DOMAIN/octopus/api/order/new";
public static void main(String[] args) {
try {
Map<String, String> data = new TreeMap<>();
data.put("transaction_type", "expense");
data.put("amount", "100.00");
data.put("currency", "mmk");
data.put("payment", "myanmar");
data.put("to_bank_name", "kbz");
data.put("to_name", "aaaaaaa");
data.put("to", "99999999");
data.put("merchant_order_id", "123qq");
data.put("merchant_uid", MerchantUID);
data.put("redirect_url", "https://example.com/redirect");
data.put("notify_url", "https://example.com/notify");
data.put("response_type", "json");
data.put("country", "myanmar");
data.put("channel", "myanmar");
data.put("accounting_type", "pay");
StringBuilder dataString = new StringBuilder();
for (Map.Entry<String, String> entry : data.entrySet()) {
if (dataString.length() > 0) dataString.append("&");
dataString.append(entry.getKey()).append("=").append(entry.getValue());
}
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(API_SECRET.getBytes(), "HmacSHA256");
sha256_HMAC.init(secret_key);
String signature = javax.xml.bind.DatatypeConverter
.printHexBinary(sha256_HMAC.doFinal(dataString.toString().getBytes()))
.toLowerCase();
URL url = new URL(API_URL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("OC-Key", API_KEY);
conn.setRequestProperty("OC-Signature", signature);
conn.setDoOutput(true);
String jsonInputString = new JSONObject(data).toString();
try (OutputStream os = conn.getOutputStream()) {
byte[] input = jsonInputString.getBytes("utf-8");
os.write(input, 0, input.length);
}
// Read the response ...
} catch (Exception e) {
e.printStackTrace();
}
}
}
Response (payout)
-
On success:
result
:"success"
data
:{"payment": {...}}
-
On error:
{
"result": "error",
"data": "An error occurred processing your request"
}
or
{
"result": "error",
"data": {
"error": "Invalid parameters",
"details": "The 'amount' field is required."
}
}
Payment Object Total JSON Field Description
from
: Sender account numberfrom_name
: Sender account namefrom_bank_name
: Sender bank nameto
: Recipient account numberto_name
: Recipient account nameto_bank_name
: Recipient bank namepayment_status
: Payment statuspayment_fail_reason
: Reason for payment failurefinal_amount
: Final transaction amountcurrency
: Currency usedtransaction_type
: Transaction type (income/expense)payment_uid
: Unique payment identifierchannel
: Transaction channel
Success example:
json
{
"result": "success",
"data": {
"payment": {
// payment fields...
},
"payment_url": "https://example.com/payments/checkout"
}
}
Error examples:
{"result":"error","data":"An error occurred processing your request"}
{"result":"error","data":{"error":"Invalid parameters","details":"The 'amount' field is required."}}
Order Query
Query the status and details of a specific order.
Request URL
POST https://DOMAIN/octopus/api/order/get
Request parameters
merchant_order_id
: Merchant’s unique order ID used during creation.
Returned JSON fields
from
,from_name
,from_bank_name
to
,to_name
,to_bank_name
amount
,final_amount
currency
,country
transaction_type
accounting_type
(for income:receive
,recharge
; for expense:pay
,settle
)merchant_order_id
,merchant_uid
,merchant_name
channel
payment_status
,payment_fail_reason
payment
(method)response_type
ip
,user_agent
distribute_rules
payment_uid
redirect_url
,notify_url
notify_status
,notify_fail_reason
accounting_status
,accounting_fail_reason
signature_key
Java example for order query (sign and send POST with headers):
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.json.JSONObject;
public class OrderQuery {
private static final String API_KEY = "API_KEY";
private static final String API_SECRET = "API_SECRET";
private static final String API_URL = "https://DOMAIN/octopus/api/order/get";
public static void main(String[] args) {
try {
Map<String, String> params = new HashMap<>();
params.put("merchant_order_id", "12345611");
List<String> keys = new ArrayList<>(params.keySet());
Collections.sort(keys);
StringBuilder dataToSign = new StringBuilder();
for (String key : keys) {
if (dataToSign.length() > 0) dataToSign.append("&");
dataToSign.append(key).append("=").append(params.get(key));
}
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(API_SECRET.getBytes(), "HmacSHA256");
sha256_HMAC.init(secret_key);
String signature = javax.xml.bind.DatatypeConverter
.printHexBinary(sha256_HMAC.doFinal(dataToSign.toString().getBytes()))
.toLowerCase();
String dataString = new JSONObject(params).toString();
URL url = new URL(API_URL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("OC-Key", API_KEY);
conn.setRequestProperty("OC-Signature", signature);
conn.setDoOutput(true);
try (OutputStream os = conn.getOutputStream()) {
byte[] input = dataString.getBytes("utf-8");
os.write(input, 0, input.length);
}
// Read the response...
} catch (Exception e) {
e.printStackTrace();
}
}
}
Common enum field explanations
Payment status (payment_status
)
none
: Default, not setpending
: Order created, payment not startedprocessing
: Payment in progresscompleted
: Payment succeededfailed
: Payment failedreject
: Payment rejectedrefund
: Refundedoverdue
: Not completed within the allowed time
Notification status (notify_status
)
none
: Defaultdelivered
: Notification sent but unacknowledgedcompleted
: Notification delivered successfullyfailed
: Notification failed
Accounting status (accounting_status
)
none
: Defaultdelivered
: Accounting in progressaccounted
: Accounting completedfailed
: Accounting failed
Transaction type (transaction_type
)
income
: Incomeexpense
: Expense
Accounting type (accounting_type
)
recharge
: Funds added to the accountreceive
: Funds received from another partysettle
: Settlement with a merchant or third partypay
: Expenditure