implementace CSMSconnect k rozesílání sms přes sms bránu

admin@easyweb4u.cz
Backer | 143
+
0
-

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)

CZechBoY
Člen | 3608
+
0
-

require dej pryc kdyz pouzivas autoloader

admin@easyweb4u.cz
Backer | 143
+
0
-

CZechBoY napsal(a):

require dej pryc kdyz pouzivas autoloader

Zakomentoval jsem, nepomohlo.

admin@easyweb4u.cz
Backer | 143
+
0
-

Přátelé potřebuji to urgentně vyřešit. Jsem ochoten za to zaplatit.

Kamil Valenta
Člen | 758
+
0
-

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 | 143
+
0
-

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 | 758
+
0
-

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
+
+4
-
  • 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řes App\libs\Neogate\CSMSConnect viz https://www.php.net/…mespaces.php
admin@easyweb4u.cz
Backer | 143
+
0
-

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řes App\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
+
0
-

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 | 143
+
0
-

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 | 143
+
0
-

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.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ý

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)

Polki
Člen | 553
+
0
-

@adminaeasyweb4ucz Máš mail.

admin@easyweb4u.cz
Backer | 143
+
0
-

Polki napsal(a):

@adminaeasyweb4ucz Máš mail.

admin@easyweb4u.cz

admin@easyweb4u.cz
Backer | 143
+
+1
-

admin@easyweb4u.cz napsal(a):

Polki napsal(a):

@adminaeasyweb4ucz Máš mail.

admin@easyweb4u.cz

Jo ták, hned tam běžím :-))

admin@easyweb4u.cz
Backer | 143
+
0
-

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.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ý

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. Děkuji všem zúčastněným za podporu.