En este video te enseñare como puedes crear el XML y timbrarlo, esto ejecutando código ya compilado de C# .Net enviándole los valores de la factura desde PHP.
Categoría: Php
¿Cómo enviar un correo electrónico con php por medio de SMTP? #php #phpmailer
En este video te mostrare como puedes enviar correos electrónicos a través de un servidor SMTP (en este caso utilizo gmail); haremos uso de la clase PHPMailer.
Código
require "PHPMailer/Exception.php"; require "PHPMailer/PHPMailer.php"; require "PHPMailer/SMTP.php"; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; $oMail= new PHPMailer(); $oMail->isSMTP(); $oMail->Host="smtp.gmail.com"; $oMail->Port=587; $oMail->SMTPSecure="tls"; $oMail->SMTPAuth=true; $oMail->Username="[email protected]"; $oMail->Password="tupassword"; $oMail->setFrom("[email protected]","Pepito el que pica papas"); $oMail->addAddress("[email protected]","Pepito2"); $oMail->Subject="Hola pepe el que pica"; $oMail->msgHTML("Hola soy un mensaje"); if(!$oMail->send()) echo $oMail->ErrorInfo;
Curso para realizar pagos en línea con php, conekta, html5, javascript
En este curso te mostrare como puedes poner un formulario en tus sitios web el cual pueda realizar pagos en línea utilizando el proveedor conekta y con el lenguaje de programación php.
Este curso esta en proceso, puedes recibir notificaciones suscribiendote a mi canal de youtube en el siguiente enlace: canal de youtube
Diagrama del proceso de pago en línea

1.- Tokenizar tarjeta
2.- Realizar pago y guardado en base de datos
¿Cómo insertar registros con PDO en php?
A continuación te muestro un ejemplo simple de como realizar la conexión a una base de datos e insertar un registro en una tabla:
$link = new PDO("mysql:host=miserverBaseDeDatos;dbname=miBaseDeDatos", "usuarioBaseDeDatos", "passBaseDeDatos"); $statement = $link->prepare("INSERT INTO tabla (campo1,campo2,campo3) VALUES (:campo1,:campo2,:campo3"); $statement->execute([ 'campo1' => "hola", 'campo2' => "mundo", 'campo3' => "cruel", ]);
¿Cómo agregar condiciones extras al autentificar de Laravel 5.6?
Quizá eres como yo que la mayoría de veces administras tus registros con borrados lógicos, y al llegar a utilizar Laravel te enfrentas que ya tiene un autentificar útil pero funciona ignorando tus condiciones de borrado lógico, yo te mostrare como agregar condiciones extras a tu autentificación.
Supongamos que manejas una tabla en la cual indicas si un registro es activo mediante un campo llamado idState y este debe tener el valor 1.
Para agregar estas condiciones debemos ir a el siguiente archivo AuthenticatesUsers en la siguiente ruta:
vendor\laravel\framework\src\Illuminate\Foundation\Auth\AuthenticatesUsers.php
Lo abrimos y vamos al metodo llamado credentials el cual debe tener lo siguiente:
protected function credentials(Request $request) { return $request->only($this->username(), 'password'); }
Lo cambiamos por esto para que anexemos nuestra condición:
protected function credentials(Request $request) { return array_merge($request->only($this->username(), 'password'), ['idState' => 1]); }
Funciona con Laravel 5.6.
¿Cómo obtener el la url raíz en una vista con blade? Laravel 5
Para obtener la url raíz (www.hdeleon.net o localhost:9121) de nuestra aplicación hecha en Laravel en una vista lo podemos hacer de la siguiente manera:
//utilizamos URL::to('/') <img style="width:100%;" src="{{ URL::to('/') }}/carpeta/nuestraimagen.jpg">
De esta forma podemos mostrar la imagen con la ruta real sin importar si está en producción o en un ambiente local o de pruebas.
¿Cómo hacer un between entre dos fechas con Eloquent en Laravel 5.x?
Para hacer un between en Laravel utilizando Eloquent entre un rango de fechas, lo podemos hacer de la siguiente manera:
//creams 2 objetos tipo carbon con las fechas $f1 = new \Carbon\Carbon("01-01-2018"); $f2 = new \Carbon\Carbon("31-01-2018"); //aplicamos Eloquent $lst=MiModelo::where("date_start",">=",$f1) ->where("date_end","<=",$f2) ->get();
¿Cómo obtener la diferencia en minutos de dos fechas en Laravel 5.x?
Para obtener la diferencia en minutos de dos fechas haremos uso de Carbon una extensión de DateTime que viene incluida en Laravel la cual tiene muchísimas funcionalidades interesantes.
A continuación un ejemplo:
//convertimos la fecha 1 a objeto Carbon $carbon1 = new \Carbon\Carbon("2018-01-01 00:00:00"); //convertimos la fecha 2 a objeto Carbon $carbon2 = new \Carbon\Carbon("2018-02-02 00:00:00"); //de esta manera sacamos la diferencia en minutos $minutesDiff=$carbon1->diffInMinutes($carbon2);
¿Cómo enviar un filtro global al grid de kendo en php? #telerik
Hago esta entrada ya que no encontré información por ningún lado de cómo hacer una búsqueda que quede fija en el grid de kendo cuando se está utilizando php.
Esto es necesario cuando deseamos que nuestro grid solo muestre cierta información y no toda la que contiene la tabla, por ejemplo los registros que solo le pertenecen a un usuario o cuando deseamos aplicar un filtro entre 2 fechas.
A continuación explico cómo es posible filtrar d la siguiente forma:
//datasource $dataSource = new \Kendo\Data\DataSource(); //tenemos que crear un objeto tipo DataSourceFilterItem $filterItem = new \Kendo\Data\DataSourceFilterItem(); //le asignamos el nombre de nuestro campo en la tabla, en este caso es idUsuario $filterItem->field('idUsuario'); //le proporcionamos el operador a utilizar, en este caso es igual $filterItem->operator('eq'); //le asignamos el valor, filtrara por el valor idUsuario=1 $filterItem->value(1); //utilizamos el metodo addFilterItem para asignar nuestro filtro. //este método puede recibir un arreglo de filtros tambien $dataSource->addFilterItem($filterItem);
Esta solución funciona para cualquier DataSource de kendo que se utilice, ya sea para autocompletar, combobox, grid etc.
¿Cómo obtener los correos de una cuenta de Gmail con php? #imap
En php existe un módulo llamado imap dedicado a las conexiones a correos, este módulo contiene un conjunto de funciones que nos ayudan a realizar esta tarea fácilmente.
Pero antes tenemos que cambiar la siguiente configuración en nuestra cuenta de Gmail para permitir a una aplicación externa conectarse.
Primero(con sesión creada en gmail para hacer estos cambios claro) debemos activar la opción de permitir conexiones de aplicaciones externas en la siguiente liga:
Seleccionamos Activar y Guardar.
La segunda configuración es para que Gmail nos permita conectarnos por el protocolo IMAP. Basta con que vayamos a la configuración de Gmail y seleccionemos la siguiente opción y demos guardar.
En el siguiente código, realizo la conexión a una cuenta de Gmail por medio del protocolo imap y a la vez obtengo los asuntos de los correos.
Clase
class ObtieneMails{ //usuario de gmail, email a donde deseamos conectarnos var $user="[email protected]"; //password de nuestro email var $password="tuPasswordDeGmail"; //inforrmación necesaria para conectarnos al INBOX de gmail, //incluye el servidor, el puerto 993 que es para imap, e indicamos que no valide con ssl var $mailbox="{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX"; var $fecha="01-MAR-2015"; //desde que fecha sincronizara //metodo que realiza todo el trabajo function obtenerAsuntosDelMails(){ //realizamos la conexión por medio de nuestras credenciales $inbox = imap_open($this->mailbox,$this->user,$this->password) or die('Cannot connect to Gmail: ' . imap_last_error()); //con la instrucción SINCE mas la fecha entre apostrofes ('') //indicamos que deseamos los mails desde una fecha en especifico //imap_search sirve para realizar un filtrado de los mails. $emails=imap_search($inbox,'SINCE "'.$this->fecha.'"'); //comprbamos si existen mails con el la busqueda otorgada if($emails) { //ahora recorremos los mails foreach($emails as $email_number) { //leemos las cabeceras de mail por mail enviando el inbox de nuestra conexión //enviando el identificdor del mail $overview=imap_fetch_overview($inbox,$email_number); //ahora recorremos las cabeceras para obtener el asunto foreach($overview as $over){ //comprobamos que exista el asunto (subject) en la cabecera //y si es asi continuamos if(isset($over->subject)){ //aqui pasa algo curioso //el asunto vendra con caracteres raros //para ello anexo una función que lo limpia y lo muestra ya legible //en lenguaje mortal $asunto=$this->fix_text_subject($over->subject); //y aqui simplemente hacemos un echo para mostrar el asunto echo utf8_decode($asunto)."n"; } } } } } //arregla texto de asunto function fix_text_subject($str) { $subject = ''; $subject_array = imap_mime_header_decode($str); foreach ($subject_array AS $obj) $subject .= utf8_encode(rtrim($obj->text, "t")); return $subject; } }
Ejecución
//creamos el objeto $oObtieneMails= new ObtieneMails(); //ejecutamos el metodo $oObtieneMails->obtenerAsuntosDelMails();
la función imap_search contiene muchísimas variantes para realizar filtrados en los correos y todos los pueden ver dando clic aquí.