Skip to content

Instantly share code, notes, and snippets.

View MrOnlineCoder's full-sized avatar
🏠
Working from home

Nikita Kogut MrOnlineCoder

🏠
Working from home
View GitHub Profile
@MrOnlineCoder
MrOnlineCoder / infra_recipe_03.md
Last active February 19, 2024 20:40
💰 Інфраструктурні рецепти, частина 3: Прийом платежів і інтеграція з платіжними системами

💰 Інфраструктурні рецепти, частина 3: Прийом платежів і інтеграція з платіжними системами

Цей допис доступний як пост в Telegram: https://t.me/middle_outloud_ua/70

🧐 Розглянемо ситуацію, де після довгих місяців старань і неперевної роботи, Ви нарешті створили свій супер-продукт, і хочете почати заробляти на ньому - тобто, отримувати кошти за надання послуг своїм клієнтам. Це може бути як постійна підписка на якомусь медіа-сервісі, поповнення віртуального балансу, або просто банальна оплата замовлення в онлайн-магазині.

❔В цьому дописі намагатимусь надати відповідь на питання технічної реалізації даного аспекту, і опишу можливі підводні камені, на які інколи натикався сам.

Зауважу - надалі йде лонгрід, оскільки я розпочинаю з самих азів, бо хочу, щоб цей допис був повноцінним "мануалом" про те, як підключити оплату до свого додатку чи сайту. А ще тут не буде нічого про оплату через криптовалюту, бо це окрема тема 😉

Загрузка фотографий на сервер

Частый вопрос который возникает фактически на любом проекте - это вопрос загрузки пользовательского контента, будь то фотографии, видео или документы. Уже неоднократно наблюдал в чатах что "новички", которые столкнулись с этой задачей, начинают расстреливать вопросами, смотреть десятки гайдов на Youtube но в результате все равно делают либо неправильно либо делают путем копипастинга кусков кода из разных гайдов. Этот пост - это сборка частых ответов и раскрытие подводных камней.

Введение - общий обзор процесса

Как же все-таки работает та магия что пользователь выбирает файл у себя на устройстве, нажимает кнопку и его фотография оказывается загруженной либо в аватарке либо как основная фотография поста?

Происходит это в следующем порядке:

  1. На веб странице есть элемент типа ``, который выглядит как поле для ввода с кнопочкой "Обзор..." сбоку. И да, даже там где этого не видно, он все равно есть, просто скрытый (например где просто большая кнопка "+"
@MrOnlineCoder
MrOnlineCoder / brute.py
Created June 16, 2019 16:17
PIN Bruteforce for ZNO Certificate
# ZNO Certificate Bruteforce
# by MrOnlineCoder
# 2019
# ==========================
# Данный скрипт выполняет брутфорс на сайт УЦОЯО
# для подбора PIN кода от сертификата ЗНО
#
# Использование: python brute.py cert year
# Где cert - 7 значный номер сертификата, а year - год выдачи
#
@MrOnlineCoder
MrOnlineCoder / count.js
Created March 28, 2019 18:47
Count all 3-digit numbers, that are divisable by 3, that can be formed by using digits {1,2,3,4,5,6} (the digits can repeat)
let div = document.getElementById('result');
let nmap = {};
function append(str) {
if (nmap[str]) return;
div.innerHTML += str;
nmap[str] = true;
}
@MrOnlineCoder
MrOnlineCoder / Translator.java
Created January 13, 2019 17:37
This is a post by one guy from Russian forum. The task is to make a simple translator in Java: there is a map which maps translations and you enter the sentence and get all words replaced by their translations respectively. Very funny solution.
/*
Original: http://www.cyberforum.ru/java-j2se/thread1016035.html#post13221448
*/
import javax.swing.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Translator {
@MrOnlineCoder
MrOnlineCoder / FText.cpp
Created December 9, 2017 18:48
SFML Formatted text Source
#include "FText.h"
#include <SFML/Graphics/Texture.hpp>
#include <SFML/Graphics/RenderTarget.hpp>
#include <cmath>
// Add an underline or strikethrough line to the vertex array
void addLine(sf::VertexArray& vertices, float lineLength, float lineTop, const sf::Color& color, float offset, float thickness, float outlineThickness = 0)
{
@MrOnlineCoder
MrOnlineCoder / FText.h
Created December 9, 2017 18:47
SFML Formatted Text Header
/*
FText class by MrOnlineCoder
Original code from SFML sources
*/
#ifndef FTEXT_H
#define FTEXT_H
////////////////////////////////////////////////////////////
@MrOnlineCoder
MrOnlineCoder / Validator.java
Created January 20, 2016 20:27
Updated LBL
public void verify(PublicKey publicKey, int responseCode, String signedData, String signature) {
String userId = null;
// Skip signature check for unsuccessful requests
ResponseData data = null;
if (responseCode == LICENSED || responseCode == NOT_LICENSED ||
responseCode == LICENSED_OLD_KEY) {
// Verify signature.
try {
Signature sig = Signature.getInstance(SIGNATURE_ALGORITHM);
sig.initVerify(publicKey);