Crear la factura electrónica del SAT desde PHP, ejecutando C# .Net. XML, Sellado, Timbrado. Cfdi 3.3

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.

Descargar código fuente

¿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

Descargar código fuente

¿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 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:

https://www.google.com/settings/security/lesssecureapps

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.

configuracion imap

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