Palju on kirjutatud Telegrami ja 1C integreerimisest. Kuid ma ei ole näinud täielikku juhendit veebihookide paigaldamiseks ja seadistamiseks. Proovin selle kirjutada.
Kõike seda vajame (või on õigem öelda, et kasutasin järgmist):
- Apache 2.2.24
- OpenSSL (kuulub Apache paigaldusse)
- 1C (modulitega) veebiserver)
- Oma domeen
- Loodud bot Telegramis (ei hakka selle loomist kirjeldama, sest see on piisavalt triviaalne)
Eeldatakse, et kogu tarkvara on teie jaoks juba paigaldatud.
Nii et alustame sertifikaadi saamisest. Avame käsuriba ja täidame järgmise koodi:
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"Kus:
YOURPRIVATE.key — sertifikaadi privaatvõti. Seda kasutatakse Apache'is
YOURPUBLIC.pem — sertifikaadi avalik võti. Seda kasutatakse veebihooki registreerimisel
YOURDOMAIN.EXAMPLE — teie domeeni aadress, millel on veebihook. See peab täpselt vastama veebihooki aadressile!!!
Pärast selle koodi täitmist ilmuvad openssl kausta (minu puhul on see "C:Program FilesApache Software FoundationApache2.2bin") võtmefailid.
Kopeerisin need Apache'i conf kausta.
Liigume edasi Apache seadistamise juurde.
Olen näinud palju erinevaid viise. Minul toimis järgmine:
httpd.conf faili on lisatud järgmised read:
Listen 443 et Apache «kuulaks» 443 pordilt.
Blokk <IfModule ssl_module> on kujundatud järgmiseks:
<IfModule ssl_module>
SSLMutex default
SSLSessionCache none
</IfModule>Lõpuks on lisatud read, kus näitan sertifikaadi teed:
SSLEngine On
SSLCertificateFile conf/YOURPUBLIC.pem
SSLCertificateKeyFile conf/YOURPRIVATE.keyJa kommenteeri rida välja:
LoadModule ssl_module modules/mod_ssl.so Konfiguratsioonis loome HTTP-teenuse. Just see teenus vastab Telegramile ja töötleb selle päringuid.
Minu puhul on määratud järgmised parameetrid:
Nimi: TGVebhook
Juurlink: webhook
Seansside taaskasutamine: Ära kasuta (automaatrežiimis ei töötanud mul)
Eluaeg: 20
URL-mallid: loodud mall «Igaüks» kahe meetodiga: GET ja POST



Meetodite käsitlejad luuakse vaikeväärtustena. POST-i käsitlejasse lisan järgmise, lihtsalt ühenduse kontrollimiseks:
Funktsioon AnyPOST(Päring)
SaadaTestSõnum(""); //chat_id
Vastus = Uus HTTPTeenuseVastus(200);
Tagasta Vastus;
FunktsiooniLõpp
&Serveris
Protseduur SaadaTestSõnum(Chat)
Sõnum = "Test sõnum";
Token = "";//Teie telegrami token
Server = "api.telegram.org";
Ressurss = "bot" + Token + "/sendMessage?chat_id=" + StrAsenda(Formaat(Chat, "ChDЦ=; ChS=; ChRГ=."), ".", "") + "&text=" + Sõnum;
Ühendus = Uus HTTPÜhendus(Server,443,,,,,Uus KaitstudÜhendusOpenSSL());
Päring = Uus HTTPPäring(Ressurss);
Vastus = Ühendus.Saa(Päring);
ProtseduuriLõppJäänud on andmebaasi avaldamine ja veebihoki sidumine.
Avaldamine toimub nagu ikka, tuleb ainult lisada linnuke HTTP-teenuse avaldamiseks:

Viimase sammuna seome meie 1C telegramiga. Kasutasin selleks lihtsat html lehte järgmise koodiga:
<html>
<body>
<form action="https://api.telegram.org/bot<ЗдесьДолженБытьТокен>/setwebhook" method="post" enctype="multipart/form-data">
Vali üles laadimiseks sertifikaat:
<input type="file" name="certificate" id="fileToUpload">
URL: <input type="text" name="url" value="https://<YOURWEBSITE>/<YOUR_PHP_URL>"><br>
<input type="submit" value="Lae üles sertifikaat" name="submit">
</form>
</body>
</html>Vormis valime lihtsalt avaliku võtme ja sisestame täispinna meie http-teenusele. Meelde tuletan, et teenuse täispind näeb välja järgmiselt:
Palun ärge kode torkige, mõned asjad on tahtlikult kõvade koodidega tehtud, kuna see kõik tehti ainult demonstreerimise eesmärgil.
Artikkel kirjutati, kuna ma ei leidnud ükski töötav näide veebikomplektide kohta saidilt, välja arvatud Telegrami botide koostaja. Kuid see on tasuline ja võib-olla ei ole kõikidele sellisel kujul vajalik.
Arhivis on Apache 2.2.24 koos OpenSSL-iga (miks see mulle nii palju aega võttis, on kummaline), HTML-fail veebikomplekti registreerimiseks, Apache konfigureerimisfail ja cf konfiguratsioon koos http-teenuse ja testimisteate saatmise näitega. Laadimine ei ole vajalik, kuna kõik sisu on artiklis.
Allikas: habr.com
