Расчет контрольной суммы
Для некоторых методов требуется указать дополнительный параметр безопасности sig. В интерфейсе вы сможете проверить алгоритм расчета этого параметра на сервере. Разработчику приложения нужно реализовать свой собственный метод для получения данного параметра.
Пример на языке PHP
public function sig(array $arguments, $secret)
{
ksort($arguments);
$string = '';
foreach ($arguments as $key => $value) {
$string .= "$key=$value";
}
return md5($string . $secret);
}
Пример на языке Java
import java.security.MessageDigest;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.security.NoSuchAlgorithmException;
public String sig(Map<String, String> arguments, String secret) throws NoSuchAlgorithmException {
StringBuilder builder = new StringBuilder();
List<String> keys = arguments.keySet().stream().sorted().collect(Collectors.toList());
for(String key : keys) {
builder.append(key).append("=").append(arguments.get(key));
}
builder.append(secret);
byte[] digest = MessageDigest.getInstance("MD5").digest(builder.toString().getBytes());
StringBuilder resultBuilder = new StringBuilder();
for(byte b : digest) {
resultBuilder.append(String.format("%02x", b));
}
return resultBuilder.toString();
}
Пример на языке Scala
import java.security.MessageDigest
import scala.collection.immutable.ListMap
def sig(arguments: Map[String, String], secret: String): String = {
MessageDigest.getInstance("MD5").digest {
s"${ListMap(arguments.toSeq.sortBy({ case (key, value) => key }):_*).map({ case (key, value) => s"$key=$value" }).mkString}$secret".getBytes
}.map(byte => String.format("%02x", byte)).mkString
}
Пример на языке Python
import collections
import hashlib
def sig(arguments, secret):
ordered = collections.OrderedDict(sorted(arguments.items()))
concated = "".join(list(map(lambda k,v: k + "=" + v, ordered.keys(), ordered.values()))) + secret
return hashlib.md5(concated.encode()).hexdigest()