Telegram + 1C + Webhooks + Apache + Zelfondertekende certificaat

Er zijn veel lijnen geschreven over de integratie van Telegram en 1C. Maar ik heb nergens een volledige handleiding voor de installatie en configuratie van webhooks gezien. Ik zal proberen deze te schrijven.

Voor dit alles hebben we nodig (of beter gezegd, wat ik heb gebruikt):

  1. Apache 2.2.24
  2. OpenSSL (inbegrepen bij de installatie van Apache)
  3. 1C (met modules) webserver)
  4. Je eigen domein
  5. Een gemaakte bot in Telegram (ik zal de creatie ervan niet beschrijven, aangezien dit vrij triviaal is)

Er wordt verondersteld dat alle software al is geïnstalleerd.

Laten we beginnen met het verkrijgen van een certificaat. Open de commandoregel en voer de volgende code uit:

openssl req -newkey rsa:2048 -sha256 -nodes -keyout YOURPRIVATE.key -x509 -days 365 -out YOURPUBLIC.pem -subj "/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=YOURDOMAIN.EXAMPLE"

Waarbij:

YOURPRIVATE.key — de privésleutel van het certificaat. Wordt gebruikt in Apache.

YOURPUBLIC.pem — de openbare sleutel van het certificaat. Wordt gebruikt bij de registratie van de webhook.

YOURDOMAIN.EXAMPLE — het adres van je domein met de webhook. Dit moet exact overeenkomen met het adres van de webhook!!!

Na het uitvoeren van deze code zullen de sleutelbestanden verschijnen in de openssl-folder (bij mij is dit "C:Program FilesApache Software FoundationApache2.2bin").

Ik heb ze gekopieerd naar de conf-map van Apache.

Laten we verder gaan met de configuratie van Apache.

Ik heb veel verschillende manieren gezien. Bij mij werkte de volgende:

De volgende regels zijn toegevoegd aan httpd.conf:

Listen 443 

zodat Apache 'luistert' op poort 443.

Het blok is als volgt aangepast:

SSLMutex default
SSLSessionCache none

Aan het einde zijn regels toegevoegd waarin de paden naar het certificaat worden aangegeven:

SSLEngine On
SSLCertificateFile conf/YOURPUBLIC.pem
SSLCertificateKeyFile conf/YOURPRIVATE.key

En ontcommentarieer de regel:

LoadModule ssl_module modules/mod_ssl.so 

In de configuratie maken we een HTTP-service. Deze zal antwoorden aan Telegram en zijn verzoeken verwerken.

In mijn geval zijn de volgende parameters opgegeven:

Naam: TGHWebhook
Basis-URL: webhook
Herbruikbaarheid van sessies: Niet gebruiken (met de automatische modus werkte het bij mij niet)
Tijdsduur: 20
URL-sjablonen: een sjabloon "Elke" is gemaakt met twee methoden: GET en POST

Telegram + 1C + Webhooks + Apache + Zelfondertekende certificaat

Telegram + 1C + Webhooks + Apache + Zelfondertekende certificaat

Telegram + 1C + Webhooks + Apache + Zelfondertekende certificaat

Handlers voor de methoden worden standaard aangemaakt. In de POST-handler voeg ik het volgende toe, gewoon om de verbinding te controleren:

Functie AnyPOST(Request)

	StuurTestBericht(""); //chat_id
	Antwoord = Nieuwe HTTPServiceAntwoord(200);
	Retourneer Antwoord;
	
EindeFunctie


&OpServer
Procedure StuurTestBericht(Chat)
	
		Bericht = "Testbericht";
		Token = ""; //Uw telegramtoken
		Server = "api.telegram.org";
	    Resource = "bot" + Token + "\/sendMessage?chat_id=" + StrVervangen(Formaat(Chat, "ChD=; ChS=; ChRG=."), ".", "") + "&text=" + Bericht;
   		Verbinding = Nieuwe HTTPVerbinding(Server,443,,,,,Nieuwe BeveiligdeVerbindingOpenSSL());
		Verzoek = Nieuwe HTTPVerzoek(Resource);
		Antwoord = Verbinding.Ontvang(Verzoek);
	
EindeProcedure

Het is tijd om de database te publiceren en de webhook te koppelen.

De publicatie gebeurt zoals altijd, je hoeft alleen maar de vinkjes voor de publicatie van de HTTP-service toe te voegen:

Telegram + 1C + Webhooks + Apache + Zelfondertekende certificaat

Als laatste stap koppelen we onze 1C aan Telegram. Hiervoor heb ik een eenvoudige html-pagina gebruikt met de volgende code:

<html>
<body>

<form action="https://api.telegram.org/bot<ЗдесьДолженБытьТокен>/setwebhook" method="post" enctype="multipart/form-data">
    Selecteer certificaat om te uploaden:
    <input type="file" name="certificate" id="fileToUpload">
	URL: <input type="text" name="url"  value="https://<YOURWEBSITE>/<YOUR_PHP_URL>"><br>
    <input type="submit" value="Upload certificaat" name="submit">
</form>

</body>
</html>

Kies gewoon de publieke sleutel in het formulier en voer het volledige pad naar onze http-service in. Vergeet niet dat het volledige pad naar de service er als volgt uit zal zien:

UwDomein/DatabaseNaam/hs/ServiceNaam/v1

Ik vraag om geen voeten te stoten over de code, sommige dingen zijn opzettelijk hardcoded omdat dit uitsluitend voor demonstratiedoeleinden is gedaan.

De publicatie is geschreven omdat ik geen werkend voorbeeld van het gebruik van webhooks op de site heb gevonden, behalve de Telegram Bot Constructor. Maar die is betaald en misschien heeft niet iedereen het in deze vorm nodig.

In het archief bevindt zich de installatie van Apache 2.2.24 samen met OpenSSL (om een of andere reden kostte het veel tijd om het te vinden), een html-bestand voor het registreren van de webhook, een configuratiebestand van Apache en cf-configuratie met http-service en een voorbeeld van het verzenden van een testbericht. Downloaden is niet verplicht, aangezien alle inhoud in het artikel staat.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster