API Access

Created by Bryonie Simon, Modified on Sat, 9 May at 1:49 PM by Bryonie Simon

To access the API, you would have to go to the following link:  

 

 

To get the access_token for the Sunsynk Connect API please use the below: 

<html> 
<head> 
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js" integrity="sha512-nOQuvD9nKirvxDdvQ9OMqe2dgapbPB7vYAMrzJihw5m+aNcf0dX53m6YxM4LgA9u8e9eg9QX+/+mPu8kCNpV2A==" crossorigin="anonymous"></script> 
<script> 
var appKey = ""; 
var appSecret = ""; 
 
var date = new Date().getTime(); 
var nonce = createUuid(); 
 
var request = { 
'headers':{"content-type":"application/json", 
"accept":"application/json", 
"Content-MD5":md5, 
"X-Ca-Nonce":nonce, 
"X-Ca-Key":appKey, 
"X-Ca-Signature":signature, 
"X-Ca-Signature-Headers":signatureHeaders}, 
'method':'POST', 
'url':'/oauth/token', 
'data':JSON.stringify({ 
"username": "<your account>", 
"password": "<your passwrod>", 
"grant_type": "password", 
"client_id": "openapi" 
}) 
}; 
 
var md5 = calcMd5(); 
request.headers['Content-MD5'] = md5; 
 
var textToSign = ""; 
textToSign += request.method + "\n"; 
textToSign += request.headers["accept"] + "\n"; 
textToSign += md5 + "\n"; 
textToSign += request.headers["content-type"] + "\n"; 
textToSign += "\n"; 
 
var headers = headersToSign(); 
var signatureHeaders; 
var sortedKeys = Array.from(headers.keys()).sort() 
for (var headerName of sortedKeys) { 
textToSign += headerName + ":" + headers.get(headerName) + "\n"; 
signatureHeaders = signatureHeaders ? signatureHeaders + "," + headerName : headerName; 
} 
textToSign += urlToSign(); 
console.log("textToSign\n" + textToSign.replace(/\n/g, "#")); 
var hash = CryptoJS.HmacSHA256(textToSignappSecret) 
console.log("hash:" + hash) 
var signature = hash.toString(CryptoJS.enc.Base64) 
console.log("signature:" + signature) 
 
request.headers['X-Ca-Signature'] = signature; 
request.headers['X-Ca-Signature-Headers'] = signatureHeaders; 
 
function headersToSign() { 
var headers = new Map(); 
for (var name in request.headers) { 
name = name.toLowerCase(); 
if (!name.startsWith('x-ca-')) { 
continue; 
} 
if (name === "x-ca-signature" || name === "x-ca-signature-headers" || name == "x-ca-key" || name === 'x-ca-nonce' || name === 'x-ca-stage') { 
continue; 
} 
var value = request.headers[name]; 
headers.set(name, value); 
} 
headers.set('x-ca-key', appKey); 
headers.set('x-ca-nonce', nonce); 
return headers; 
} 
 
function urlToSign() { 
var params = new Map(); 
var contentType = request.headers["content-type"]; 
if (contentType && contentType.startsWith('application/x-www-form-urlencoded')) { 
const formParams = request.data.split("&"); 
formParams.forEach((p) => { 
const ss = p.split('='); 
params.set(ss[0], ss[1]); 
}) 
} 
 
const ss = request.url.split('?'); 
if (ss.length > 1 && ss[1]) { 
const queryParams = ss[1].split('&'); 
queryParams.forEach((p) => { 
const ss = p.split('='); 
params.set(ss[0], ss[1]); 
}) 
} 
 
var sortedKeys = Array.from(params.keys()) 
sortedKeys.sort(); 
 
var first = true; 
var qs 
for (var k of sortedKeys) { 
var s = k + "=" + params.get(k); 
qs = qs ? qs + "&" + s : s; 
console.log("key=" + k + " value=" + params.get(k)); 
} 
 
var url = ss[0]; 
return qs ? url + "?" + qs : url; 
} 
 
function calcMd5() { 
var contentType = request.headers["content-type"]; 
if (request.data && !contentType.startsWith('application/x-www-form-urlencoded')) { 
var data = request.data; 
var md5 = CryptoJS.MD5(data); 
var md5String = md5.toString(CryptoJS.enc.Base64); 
console.log("data:" + data + "\nmd5:" + md5String); 
return md5String; 
} else { 
return ""; 
} 
} 
 
function createUuid() { 
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { 
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); 
return v.toString(16); 
}); 
} 
 
(function(){ 
$.ajax({ 
type: "post", 
url: 'https://openapi.sunsynk.net/oauth/token', 
async: true, 
headers:request.headers, 
data: request.data, 
success: function(data) { 
console.log('result:',data); 
}, 
error: function(data) { 
console.log('error'); 
} 
}); 
})(request); 
</script> 
</head> 
</html> 

 

 

Was this article helpful?

That’s Great!

Thank you for your feedback

Sorry! We couldn't be helpful

Thank you for your feedback

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article