Автоматизируйте работу с крипточеками системы Paymer с помощью методов:
string apiUrl = "https://paymer.com/c3/ws/ApiPub.asmx"; // Api - экземпляр вебсервиса (в коде ниже) string login = API_HEADER_LOGIN; // выдается администратором сервиса string password = API_HEADER_PASSWORD; // выдается администратором сервиса string ip = USER_IP; string browserInfo = USER_BROWSER_INFO; string cult = USER_CULTURE; string address = CRYPTO_ADDRESS; string currName = CRYPTO_CURRENCY_NAME; string blockchain = BLOCKCHAIN; string number = PAYMER_NUMBER; string code = PAYMER_CODE; string purse = PAYMER_WMPURSE; string redeemMemo = PAYMER_REDEEM_MEMO; long userLogId = USER_LOG_ID decimal amountDefaultOptions = 0.01m; // значение по умолчанию для вызова GetOptions, можно указать своё
POST https://paymer.com/c3/api/v1/verify
Headers:
login: {login}
password: {password}
ip: {ip}
userAgent: {browserInfo}
outerLogId: {userLogId}
Content-Type: application/json
Пример вызова:
var url = "https://paymer.com/c3/api/v1/verify";
HttpClient client = new HttpClient();
// Заголовки авторизации
client.DefaultRequestHeaders.Add("login", login);
client.DefaultRequestHeaders.Add("password", password);
client.DefaultRequestHeaders.Add("ip", ip);
client.DefaultRequestHeaders.Add("userAgent", browserInfo);
client.DefaultRequestHeaders.Add("outerLogId", userLogId.ToString());
// Тело запроса на примере VerifyNoteRequest (для других методов соответствующие MethodNameRequest и MethodNameResponse)
var request = new
{
Number = number,
Code = code,
RequestPurse = purse,
RequestAmountWm = amountDefaultOptions
};
string json = JsonSerializer.Serialize(request);
using var content = new StringContent(
json,
Encoding.UTF8,
"application/json"
);
HttpResponseMessage response = await client.PostAsync(url, content);
response.EnsureSuccessStatusCode();
string responseJson = await response.Content.ReadAsStringAsync();
VerifyNoteResponse result =
JsonSerializer.Deserialize<VerifyNoteResponse>(
responseJson,
new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
});
AuthHeader header = new AuthHeader
{
Login = login,
Password = password,
Ip = ip,
OuterLogId = userLogId,
UserAgent = browserInfo
};
Api.AuthHeaderValue = header;
Api.Url = apiUrl;
CreateCodesRequest reqc = new CreateCodesRequest
{
CodeOnly = false // true — создать только код без номера
};
CreateCodesResponse respc = Api.CreateCodes(reqc);
// получаем новые реквизиты чека
string newNumber = respc.Number;
string newCode = respc.Code;
// newNumber и newCode должны быть созданы исключительно Api.CreateCodes
// number и code - ранее созданный и пополненный чек Paymer
// создаем новый пустой чек для зачисления отделяемой суммы
CreateCodesRequest reqcc = new CreateCodesRequest { CodeOnly = false };
CreateCodesResponse respcc = Api.CreateCodes(reqcc);
SplitAmountRequest reqs = new SplitAmountRequest
{
NumberFrom = number,
CodeFrom = code,
NumberTo = respcc.Number,
CodeTo = respcc.Code,
Amount = 0.01m // сумма, которую нужно отделить в новый чек
};
SplitAmountResponse resps = Api.SplitAmount(reqs);
GetCurrenciesRequest req = new GetCurrenciesRequest { Name = currName };
GetCurrenciesResponse resp = Api.GetCurrencies(req);
GetOptionsRequest reqo = new GetOptionsRequest
{
Cult = cult,
Blockchain = blockchain,
CryptoCurrName = resp.Currencies[0].Name,
WithdrawAmount = amountDefaultOptions,
Address = address
};
GetOptionsResponse respo = Api.GetOptions(reqo);
// минимальная сумма вывода с учетом комиссии (RedeemWm или Withdraw зависит от того, что требуется вызвать). как минимум чек нужно пополнить для теста на эту сумму
decimal amountMinTopup = currName == "USDT"
? respo.RedeemWm.MinAmount + respo.RedeemWm.MinFee
: respo.Withdraw.MinAmount + respo.Withdraw.MinFee;
TopupInitRequest reqt = new TopupInitRequest
{
Cult = cult,
Currency = currName,
TopupAmount = amountMinTopup,
Method = TopupMethod.WebMoney
};
TopupInitResponse respt = Api.TopupInitiate(reqt);
VerifyRequest reqv = new VerifyRequest
{
Number = number,
Code = code
};
VerifyResponse respv = Api.Verify(reqv);
// минимальные суммы для вывода. respo - результат GetOptions()
decimal withdrawFee = respo.Withdraw.MinFee;
decimal withdrawAmount = respo.Withdraw.MinAmount;
// respv - результат Verify()
if (respv.Balance >= withdrawAmount + withdrawFee)
{
WithdrawNoteRequest reqw = new WithdrawNoteRequest
{
Address = address,
Amount = withdrawAmount,
Blockchain = blockchain,
Number = number,
Code = code,
Fee = withdrawFee,
WithdrawType = respo.Withdraw.WithdrawType,
Cult = cult
};
WithdrawNoteResponse respw = Api.Withdraw(reqw);
}
// минимальные суммы для погашения. respo - результат GetOptions()
decimal redeemFee = respo.RedeemWm.MinFee;
decimal redeemAmount = respo.RedeemWm.MinAmount;
// respv - результат Verify()
if (respv.Balance >= redeemAmount + redeemFee)
{
RedeemNoteRequest reqr = new RedeemNoteRequest
{
Number = number,
Code = code,
Amount = redeemAmount,
Memo = redeemMemo,
Purse = purse
};
RedeemNoteResponse respr = Api.Redeem(reqr);
}