Telegram + 1C + Webhooks + Apache + Certificat auto-semnat

S-au scris multe rânduri despre integrarea Telegramului cu 1C. Dar nu am văzut nicăieri un ghid complet pentru instalarea și configurarea webhookurilor. Încerc să-l scriu.

Pentru toate acestea, avem nevoie (sau mai corect spus, ce am folosit eu):

  1. Apache 2.2.24
  2. OpenSSL (inclus în instalarea Apache-ului)
  3. 1C (cu modulele server web)
  4. Domeniul propriu
  5. Un bot creat în Telegram (nu voi descrie cum se creează, deoarece este destul de trivial)

Se presupune că tot software-ul este instalat.

Așadar, să începem cu obținerea certificatului. Deschideți linia de comandă și executați următorul cod:

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"

Unde:

YOURPRIVATE.key — cheia privată a certificatului. Va fi folosită în Apache

YOURPUBLIC.pem — cheia publică a certificatului. Va fi folosită la înregistrarea webhookului

YOURDOMAIN.EXAMPLE — adresa domeniului dumneavoastră cu webhookul. Trebuie să se potrivească cu adresa webhookului!!!

După executarea acestui cod, în folderul openssl (la mine este „C:Program FilesApache Software FoundationApache2.2bin”) vor apărea fișierele cheie.

Le-am copiat în folderul conf al Apache-ului.

Trecem la configurarea Apache-ului.

Am văzut multe metode diferite. La mine a funcționat următoarea:

În httpd.conf s-au adăugat următoarele rânduri:

Listen 443 

pentru ca Apache să „asculte” portul 443.

Blocul <IfModule ssl_module> a fost modificat astfel:

<IfModule ssl_module>
SSLMutex default
SSLSessionCache none
<\/IfModule>

La sfârșit, au fost adăugate rânduri în care specific calea către certificat:

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

Și decomentați rândul:

LoadModule ssl_module modules\/mod_ssl.so 

În configurație, creăm un serviciu HTTP. Acesta va răspunde la Telegram și va procesa solicitările.

În cazul meu, au fost specificate următoarele parametri:

Nume: TGWebhook
URL rădăcină: webhook
Reutilizare sesiuni: Nu folosiți (în modul automat nu mi-a funcționat)
Timp de viață: 20
Șabloane URL: am creat un șablon „Oricare” cu două metode: GET și POST

Telegram + 1C + Webhooks + Apache + Certificat auto-semnat

Telegram + 1C + Webhooks + Apache + Certificat auto-semnat

Telegram + 1C + Webhooks + Apache + Certificat auto-semnat

Handlerii metodelor sunt creați implicit. Voi adăuga următoarele în handlerul POST, doar pentru a verifica conexiunea:

Funcția AnyPOST(Întrebare)

	TrimiteMesajTest(""); 
	Răspuns = Nou HTTPServiciuRăspuns(200);
	Întoarce Răspuns;
	
SfârșitulFuncției


&PeServer
Procedura TrimiteMesajTest(Chat)
	
		Mesaj = "Mesaj de teste";
		Token = ""; //Token-ul dvs. telegram
		Server = "api.telegram.org";
	    Resurs = "bot" + Token + "\/sendMessage?chat_id=" + StrÎnlocuiște(Formatează(Chat, "ChID=; ChS=; ChRG=."), ".", "") + "&text=" + Mesaj;
   		Conexiune  =  Nou HTTPConexiune(Server,443,,,,,Nou ConexiuneSigurOpenSSL());
		Întrebare = Nou HTTPÎntrebare(Resurs);
		Răspuns = Conexiune.Primește(Întrebare);
	
SfârșitulProcedurii

Rămâne să publicăm baza și să legăm webhook-ul.

Publicarea se face ca de obicei, e nevoie doar să adăugăm bifele pentru publicarea HTTP-ului:

Telegram + 1C + Webhooks + Apache + Certificat auto-semnat

Ultimul pas va fi să legăm 1C-ul nostru de telegram. Am folosit o pagină html simplă cu următorul cod:

<html>
<body>

<form action="https://api.telegram.org/bot<ЗдесьДолженБытьТокен>/setwebhook" method="post" enctype="multipart/form-data">
    Selectați certificatul pentru a-l încărca:
    <input type="file" name="certificate" id="fileToUpload">
	URL: <input type="text" name="url"  value="https://<YOURWEBSITE>/<YOUR_PHP_URL>"><br>
    <input type="submit" value="Încărcați certificatul" name="submit">
</form>

</body>
</html>

În formular alegem pur și simplu cheia publică și introducem calea completă către serviciul nostru http. Rețin că calea completă către serviciu va arăta astfel:

DomeniuDvs/NumărBază/hs/NumeServiciu/v1

Vă rog să nu mă criticați pentru cod, unele lucruri au fost intenționat realizate hardcoded, deoarece acest lucru a fost făcut exclusiv în scopuri demonstrative.

Publicarea a fost scrisă deoarece nu am găsit niciun exemplu funcțional despre lucrul cu webhooks pe site, în afară de Constructorul de boți Telegram. Dar este plătit și, poate, nu este necesar pentru toată lumea în acest fel.

Arhiva conține instalarea apache 2.2.24 împreună cu Openssl (din anumite motive, căutarea acestuia mi-a luat mult timp), fișierul html pentru înregistrarea webhook-ului, fișierul de configurare apache și configurația cf cu serviciul http și un exemplu de trimitere a unui mesaj de test. Descărcarea nu este obligatorie, deoarece toate conținuturile sunt disponibile în articol.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster