implementace CSMSconnect k rozesílání sms přes sms bránu
- admin@easyweb4u.cz
- Backer | 146
Ahoj vespolek,
v presenteru mám metodu:
<?php
private function getEmailSms ($order, $phonerest) {
$sms = new \Neogate\CSMSConnect();
$sms->Create("Username","Password",CSMSConnect::AUTH_HASH); // inicializace a prihlaseni login, heslo, typ zabezpeceni
// SMS odesilejte bez diakritiky !!!
//print_r($sms->Send_SMS($phonerest,"test"));
$sms->Send_SMS($phonerest,'Č. obj.: ' . $order['order']['orderno']);
$sms->Logout();
}
?>
ve složce App\libs\Neogate
mám soubor connect.php (ten requiruje http.php)
<?php
namespace Neogate;
/*
* (c) 2009-2018 SMSbrana s.r.o.
* PHP trida, ktera odesila placene sms pres portal www.smsbrana.cz
* PHP 5 >= 5.3.0
*/
require_once(__DIR__ . "/http.php");
class CSMSConnect
{
const AUTH_PLAIN = 1; //typ autentizace 1 - plain heslo (nedoporuceno)
const AUTH_HASH = 2; //typ autentizace 2 - prenasen pouze kontrolni hash (doporuceno)
private $apiScript = "https://api.smsbrana.cz/smsconnect/http.php"; //link na rozhrani API
//private $apiScript = "https://api-backup.smsbrana.cz/smsconnect/http.php"; //link na rozhrani backup API
private $authType = 2;
private $login = null; //uzivatelske jmeno SMSconnectu
private $password = null; //heslo SMSconnectu
private $queue = null; //sms ktere jsou k odeslani
// + další metody
?>
common.neon
services:
Neogate: App\libs\Neogate\connect
Výsledkem je hláška:
Compile Error
Cannot declare class Neogate\CSMSConnect, because the name is already in use
File: …\app\libs\Neogate\connect.php:13
Vrabci cvrlikali, že by to moh bejt bordel v namespace. Poradí někdo, prosím?
Editoval admin@easyweb4u.cz (7. 1. 2021 21:10)
- admin@easyweb4u.cz
- Backer | 146
CZechBoY napsal(a):
require dej pryc kdyz pouzivas autoloader
Zakomentoval jsem, nepomohlo.
- Kamil Valenta
- Člen | 820
A na co vůbec je ta service Neogate: App\libs\Neogate\connect a co v ní
je?
Protože v presenteru si ručně vytváříš objekt \Neogate\CSMSConnect a
ten, zdá se, tu servicu také nevyužívá.
- admin@easyweb4u.cz
- Backer | 146
Kamil Valenta napsal(a):
A na co vůbec je ta service Neogate: App\libs\Neogate\connect a co v ní je?
Protože v presenteru si ručně vytváříš objekt \Neogate\CSMSConnect a ten, zdá se, tu servicu také nevyužívá.
No vemme to trochu obecněji. Ta service je prostě PHP (OOP) kód nějaké třetí strany (provozovatele SMS brány) – jsou to vlastně 2 soubory connect.php (class CSMSConnect) requiruje ještě http.php. A já potřebuju volání té třídy CSMSConnect vrazit do funkce v presenteru, aby se jako potvrzení objednávky odeslala na příslušný telefon SMS. Já mám obecně problém kódy třetích stran implementovat do Nette, někdy se mi to daří lépe, někdy hůře. Mohu ti ty dva soubory poslat na e-mail, pokud bys to chtěl pořešit. Za funkční řešení nabízím 500 Kč.
… objekt \Neogate\CSMSConnect a ten, zdá se, tu servicu také nevyužívá … , tomu úplně nerozumím. Záměrem je prostřednictvím té service použít tu třídu CSMSConnect v presenteru.
Editoval admin@easyweb4u.cz (8. 1. 2021 21:57)
- Kamil Valenta
- Člen | 820
Chápu, ale proč to registruješ v neonu jako službu, když ji pak nikde
nevyužíváš a objekt vytváříš ručně přes new?
Tak to vyhoď z neonu, když už k tomu chceš přistupovat
takhle ručně.
- David Matějka
- Moderator | 6445
- zkontroluj, jestli tam ty třídy nemáš nakopírovaný vícekrát
- smaž z nich všechny require
- pokud to chceš registrovat jako službu, tak tu službu i předávej přes
DI a neinicializuj v presenteru. a v configu to referencuj přes správné
jméno
Neogate\CSMSConnect
, nikoliv přesApp\libs\Neogate\CSMSConnect
viz https://www.php.net/…mespaces.php
- admin@easyweb4u.cz
- Backer | 146
David Matějka napsal(a):
- zkontroluj, jestli tam ty třídy nemáš nakopírovaný vícekrát
- smaž z nich všechny require
- pokud to chceš registrovat jako službu, tak tu službu i předávej přes DI a neinicializuj v presenteru. a v configu to referencuj přes správné jméno
Neogate\CSMSConnect
, nikoliv přesApp\libs\Neogate\CSMSConnect
viz https://www.php.net/…mespaces.php
Já sem na tohle kopyto.
common.neon
- services
- App\Models\TextService
…
- App\Models\OrdersService
- Neogate\CSMSConnect
Presenter
/** @var \Neogate\CSMSConnect @inject */
public $neogate;
public $sms;
<?php
private function getEmailSms ($order, $phonerest) {
$sms = $this->neogate->Create("Username","Password",CSMSConnect::AUTH_HASH); // inicializace a prihlaseni
$sms->Send_SMS($phonerest,'Č. obj.: ' . $order['order']['orderno']);
$sms->Logout();
}
?>
soubory:
app/libs/Neogate
- connect.php (class CSMSConnect)
- http.php
Výsledek: Class ‚App\Presenters\CSMSConnect‘ not found
chyba zde: $sms = $this->neogate->Create(„Smaknisi“,„Smaknisi007“,CSMSConnect::AUTH_HASH); // inicializace a prihlaseni login, heslo, typ zabezpeceni
původní kód
<?php
$sms = new CSMSConnect();
$sms->Create("test","12345",CSMSConnect::AUTH_HASH); // inicializace a prihlaseni login, heslo, typ zabezpeceni
// SMS odesilejte bez diakritiky !!!
print_r($sms->Send_SMS("777123456","test"));
$sms->Logout();
?>
- David Matějka
- Moderator | 6445
Ta třída je v namespace Neogate. Tak buď použij FQN, jako to máš u té inject property, nebo si to přidej do use statementu. A znovu tě musím odkázat do dokumentace php namespaces: https://www.php.net/…mespaces.php
- admin@easyweb4u.cz
- Backer | 146
David Matějka napsal(a):
Ta třída je v namespace Neogate. Tak buď použij FQN, jako to máš u té inject property, nebo si to přidej do use statementu. A znovu tě musím odkázat do dokumentace php namespaces: https://www.php.net/…mespaces.php
Dobrá něco jsem si o tom přečetl. Udělal jsem:
App/libs/Neogate
connect.php
http.php
do souborů jsem přidal
namespace App\libs\Neogate;
v presenteru pak
use App\libs\Neogate\CSMSConnect; (tváří se to, že tu class vidí)
použil jsem originální skript
<?php
private function getEmailSms ($order, $phonerest) {
$sms = new CSMSConnect();
$sms->Create("Username","Password",CSMSConnect::AUTH_HASH); // inicializace a prihlaseni login, heslo
$sms->Send_SMS($phonerest,'Č. obj.: ' . $order['order']['orderno']);
$sms->Logout();
}
?>
service jsem odstranil v common.neon i v presenteru
Chyba: Class ‚App\libs\Neogate\CSMSConnect‘ not found
Zkusil jsem i
$sms = new \Neogate\CSMSConnect(); (po vymazání cashe), výsledek stejný
Editoval admin@easyweb4u.cz (10. 1. 2021 13:22)
- admin@easyweb4u.cz
- Backer | 146
admin@easyweb4u.cz napsal(a):
David Matějka napsal(a):
Ta třída je v namespace Neogate. Tak buď použij FQN, jako to máš u té inject property, nebo si to přidej do use statementu. A znovu tě musím odkázat do dokumentace php namespaces: https://www.php.net/…mespaces.php
Dobrá něco jsem si o tom přečetl. Udělal jsem:
App/libs/Neogate
connect.php
http.phpdo souborů jsem přidal
namespace App\libs\Neogate;
v presenteru pak
use App\libs\Neogate\CSMSConnect; (tváří se to, že tu class vidí)
použil jsem originální skript
<?php private function getEmailSms ($order, $phonerest) { $sms = new CSMSConnect(); $sms->Create("Username","Password",CSMSConnect::AUTH_HASH); // inicializace a prihlaseni login, heslo $sms->Send_SMS($phonerest,'Č. obj.: ' . $order['order']['orderno']); $sms->Logout(); } ?>
service jsem odstranil v common.neon i v presenteru
Chyba: Class ‚App\libs\Neogate\CSMSConnect‘ not found
Zkusil jsem i
$sms = new \Neogate\CSMSConnect(); (po vymazání cashe), výsledek stejný
Takže přátelé,
app/libs/Neogate
connect.php
http.php
namespace App\libs\Neogate;
v presenteru
use App\libs\Neogate\CSMSConnect;
<?php
private function getEmailSms ($order, $phonerest) {
$sms = new CSMSConnect();
$sms->Create("Username","Password",CSMSConnect::AUTH_HASH); // inicializace a prihlaseni login, heslo, typ zabezpeceni
// SMS odesilejte bez diakritiky !!!
$sms->Send_SMS($phonerest,'C. obj.: ' . $order['order']['orderno']);
$sms->Logout();
}
?>
Chybu to nehlásí, nicméně testovací SMS na můj telefon nepřišla. Tak nevím…
Tak už vím, takto to funguje, bylo ještě potřeba aktivovat SMS bránu v administraci.
Editoval admin@easyweb4u.cz (11. 1. 2021 16:25)
- admin@easyweb4u.cz
- Backer | 146
admin@easyweb4u.cz napsal(a):
Polki napsal(a):
@adminaeasyweb4ucz Máš mail.
Jo ták, hned tam běžím :-))
- admin@easyweb4u.cz
- Backer | 146
admin@easyweb4u.cz napsal(a):
admin@easyweb4u.cz napsal(a):
David Matějka napsal(a):
Ta třída je v namespace Neogate. Tak buď použij FQN, jako to máš u té inject property, nebo si to přidej do use statementu. A znovu tě musím odkázat do dokumentace php namespaces: https://www.php.net/…mespaces.php
Dobrá něco jsem si o tom přečetl. Udělal jsem:
App/libs/Neogate
connect.php
http.phpdo souborů jsem přidal
namespace App\libs\Neogate;
v presenteru pak
use App\libs\Neogate\CSMSConnect; (tváří se to, že tu class vidí)
použil jsem originální skript
<?php private function getEmailSms ($order, $phonerest) { $sms = new CSMSConnect(); $sms->Create("Username","Password",CSMSConnect::AUTH_HASH); // inicializace a prihlaseni login, heslo $sms->Send_SMS($phonerest,'Č. obj.: ' . $order['order']['orderno']); $sms->Logout(); } ?>
service jsem odstranil v common.neon i v presenteru
Chyba: Class ‚App\libs\Neogate\CSMSConnect‘ not found
Zkusil jsem i
$sms = new \Neogate\CSMSConnect(); (po vymazání cashe), výsledek stejnýTakže přátelé,
app/libs/Neogate
connect.php
http.phpnamespace App\libs\Neogate;
v presenteru
use App\libs\Neogate\CSMSConnect;<?php private function getEmailSms ($order, $phonerest) { $sms = new CSMSConnect(); $sms->Create("Username","Password",CSMSConnect::AUTH_HASH); // inicializace a prihlaseni login, heslo, typ zabezpeceni // SMS odesilejte bez diakritiky !!! $sms->Send_SMS($phonerest,'C. obj.: ' . $order['order']['orderno']); $sms->Logout(); } ?>
Chybu to nehlásí, nicméně testovací SMS na můj telefon nepřišla. Tak nevím…
Tak už vím, takto to funguje, bylo ještě potřeba aktivovat SMS bránu v administraci. Děkuji všem zúčastněným za podporu.