Skip to content

Instantly share code, notes, and snippets.

@MykolaBalakin
Last active December 9, 2015 14:11
Show Gist options
  • Save MykolaBalakin/d2693db05035650696d9 to your computer and use it in GitHub Desktop.
Save MykolaBalakin/d2693db05035650696d9 to your computer and use it in GitHub Desktop.
P24 GetBalance
void Main() {
GetBalance("card number").Dump();
}
Decimal GetBalance(String card) {
var requestData = GetBalanceRequestData(card);
var request = HttpWebRequest.CreateHttp("https://api.privatbank.ua/p24api/balance");
request.Method = "POST";
using (var stream = request.GetRequestStream())
using (var writer = new StreamWriter(stream)) {
writer.Write(requestData);
}
var response = request.GetResponse();
String responseData;
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream)) {
responseData = reader.ReadToEnd();
}
var doc = XDocument.Parse(responseData);
var balanceString = doc
.Element("response")
.Element("data")
.Element("info")
.Element("cardbalance")
.Element("av_balance")
.Value;
return Decimal.Parse(balanceString, CultureInfo.InvariantCulture);
}
String GetBalanceRequestData(String card) {
var data = new XElement("data",
new XElement("oper", "cmt"),
new XElement("wait", "0"),
new XElement("test", "0"),
new XElement("payment",
new XAttribute("id", ""),
new XElement("prop",
new XAttribute("name", "cardnum"),
new XAttribute("value", card)
),
new XElement("prop",
new XAttribute("name", "country"),
new XAttribute("value", "UA")
)
)
);
var signature = GetSignature(data);
var dataString = data.ToString(SaveOptions.DisableFormatting);
var request = new XElement("request",
new XAttribute("version", "1.0"),
new XElement("merchant",
new XElement("id", Util.GetPassword("p24 id")),
new XElement("signature", signature)
),
data
);
var doc = new XDocument(new XDeclaration("1.0", "UTF-8", "no"), request);
return doc.ToString(SaveOptions.DisableFormatting);
}
String GetSignature(XElement data) {
var dataString = data.ToString(SaveOptions.DisableFormatting);
dataString = dataString.Substring("<data>".Length, dataString.Length - "<data>".Length - "</data>".Length);
dataString += Util.GetPassword("p24 secret");
var md5 = new MD5Cng();
var hash = md5.ComputeHash(Encoding.UTF8.GetBytes(dataString));
var sha1 = new SHA1Cng();
dataString = String.Concat(hash.Select(b => b.ToString("x2")));
hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(dataString));
return String.Concat(hash.Select(b => b.ToString("x2")));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment