Seite 1 von 2

AboProdukte Funktionsweise

Verfasst: 03.07.2014, 11:03
von MKJ
Hallo,

mir ist noch nicht ganz klar, wie sich die Verfügbarkeit eines Produktes mit dem Modul AboProdukte verbinden lässt. Sehe ich das richtig, dass das Modul out-of-the-box letztlich nur den Emailverkehr erledigt, der an das Ablaufdatum geknüpft ist? Nehmen wir also an, dass ich ein Abo für ein PDF Download anbieten will. Über die URL könnte ich dem Besteller zwar den Zugang zum Download-Bereich geben. Wie ließe sich aber die Sperrung über das Modul realisieren? Gibt es in der Datenbank einen Datensatz, der eindeutig einen Besteller mit einem Aboprodukt verknüpft? Wie läuft das bei einer Verlängerung? Wird nur das Ablaufdatum erneuert, oder wird eine neue Bestellnummer angelegt? Ich habe noch kein Konzept, wie sich diese Daten sinnvoll in einem möglichst automatischem System verbinden lassen.

Re: AboProdukte Funktionsweise

Verfasst: 03.07.2014, 11:27
von maennchen1.de
Hallo!
Das Modul regelt sicherlich zum einen den Mailverkehr, zum anderen aber auch den Bestellprozess. Derzeit muss jede Verlängerung manuell vom Kunden mit einem Neukauf verlängert werden, der Kunde bekommt aber die entsprechenden Links und muss lediglich den Checkout-Prozess durchlaufen.
Über den Cronjob werden dann die Ereignisse getriggert und können via externem Script verarbeitet werden.
Nachfolgend findest du ein Beispielscript, was dir bestimmt Erleuchtung bringt. Dieses Script werden wir zukünftig mitliefern.
Du legst das Script abo-script.php dazu einen neuen Ordner: http://deinedomain.de/neuer-ordner/abo-script.php und trägst du URL in die "URL Benachrichtigung" ein. Natürlich musst du noch entsprechende Stellen im Script anpassen, da hier die Aktionen fehlen. Aber für den Start dürfte das doch schon mal reichen, oder?

Code: Alles auswählen

<?php

  $salt_key = ""; //aus Konfiguration > Einstellungen > Erweitert > SALT Schlüssel

  // Hash Test
  $hash = md5($salt_key.$_POST['time']);

  if ($hash != $_POST['hash']) die("Fehler bei der Anfrage!");
  
  $product_id = $_REQUEST['product_id'];
  $order_id = $_REQUEST['order_id'];
  $customer_id = $_REQUEST['customer_id'];
  $menge = $_REQUEST['menge'];
  
  /* Wordpress initiieren */
  require_once(dirname(__FILE__).'/../wp-load.php'); 
  
  /* Shop Plugin initiieren */
  require_once(dirname(__FILE__).'/../wp-content/plugins/wpshopgermany/wpshopgermany.php');
  
  if ($_REQUEST['typ'] == 'pay')
  {
     /**
     * Ein normales Produkt wurde gekauft
     */         
		
  }
  else if ($_REQUEST['typ'] == 'abo_firstbuy')
  {
  	
  	/**
  	 * Ein Abo Produkt wurde das erste mal gekauft und bezahlt
  	 */
  	 
  	
  }
  else if ($_REQUEST['typ'] == 'abo_rebuy')
  {
  	
  	/**
  	 * Abo Verlängerung wurde gekauft
  	 */
  	 
  	
  }
  else if ($_REQUEST['typ'] == 'abo_expiration')
  {
  	
  	/**
  	 * Ein Abo Produkt ist ausgelaufen
  	 */
  	 
  }
  
?>

Re: AboProdukte Funktionsweise

Verfasst: 03.07.2014, 12:00
von MKJ
Hm, das ist ein Anfang. Ich kann aber im Augenblick noch nicht erkennen, wie sich die eigentlich wichtige Funktion der Sperrung mit vertretbarem Aufwand realisieren ließe. Ein einfacher Test mit einem Email Versand hat aber noch nicht geklappt. Ich verwende folgendes Script, um eine Testmail über wp_mail zu versenden. Das Script funktioniert einwandfrei im root der WP Installation. Ich habe die abo.php ebenfalls ins root gelegt:
Das Script

Code: Alles auswählen

	$to = "email";
	$subject = 'Abo Test';
	$message = 'Bestellung bezahlt!';
	$headers = '';
	define('WP_USE_THEMES', false);
	require('wp-load.php');
	if( wp_mail( $to, $subject, $message, $headers ) ) {
		echo 'Bestellung bezahlt!';
	} else {
		echo 'Email wurde nicht gesendet!';
	};
1. Teil der abo.php

Code: Alles auswählen

  $salt_key = "hier ist der key; //aus Konfiguration > Einstellungen > Erweitert > SALT Schlüssel

  // Hash Test
  $hash = md5($salt_key.$_POST['time']);

  if ($hash != $_POST['hash']) die("Fehler bei der Anfrage!");
  
  $product_id = $_REQUEST['product_id'];
  $order_id = $_REQUEST['order_id'];
  $customer_id = $_REQUEST['customer_id'];
  $menge = $_REQUEST['menge'];
  
  /* Wordpress initiieren */
  require_once(dirname(__FILE__).'wp-load.php'); 
  
  /* Shop Plugin initiieren */
  require_once(dirname(__FILE__).'/wp-content/plugins/wpshopgermany/wpshopgermany.php');
  
  if ($_REQUEST['typ'] == 'pay')
  {
	$to = "email";
	$subject = 'Abo Test';
	$message = 'Bestellung bezahlt!';
	$headers = '';
	define('WP_USE_THEMES', false);
	require('wp-load.php');
	if( wp_mail( $to, $subject, $message, $headers ) ) {
		echo 'Bestellung bezahlt!';
	} else {
		echo 'Email wurde nicht gesendet!';
	};
  }
Die URL Benachrichtigung ist korrekt eingetragen. Ideen?

Re: AboProdukte Funktionsweise

Verfasst: 03.07.2014, 13:36
von maennchen1.de
Nicht "pay" sondern "abo_firstbuy" im Parameter.

Re: AboProdukte Funktionsweise

Verfasst: 03.07.2014, 13:41
von MKJ
maennchen1.de hat geschrieben:Nicht "pay" sondern "abo_firstbuy" im Parameter.
Ich habe alle Parameter ausgefüllt. Ich wollte aber nicht den ganzen Sermon hier einstellen. Dieses Script wird doch direkt nach Kauf abgerufen, oder? Da brauche ich ja noch keinen Cronjob. Verstehe ich das richtig?

Re: AboProdukte Funktionsweise

Verfasst: 03.07.2014, 14:03
von maennchen1.de
Den Cronjob benötigst du, damit in bestimmten Abständen vom Modul AboProdukte eine überprüfung statt findet.
Daraufhin wird das Script unter URL-Benachrichtigung aufgerufen.
Es wird ebenfalls nach Zahlungseingang aufgerufen.

Re: AboProdukte Funktionsweise

Verfasst: 03.07.2014, 14:12
von MKJ
Das ist schon klar. Aber beim ersten Kauf wird doch die abo.php vom System geladen, richtig? Beim Kauf müsste dann also auf jeden Fall meine Funktion getriggert werden, auch ohne Cronjob. WordPress kann ja einen externen Cron nicht auslösen.

Re: AboProdukte Funktionsweise

Verfasst: 03.07.2014, 14:21
von maennchen1.de
Wie oben geschrieben, wird dir URL Benachrichtigung bereits nach Zahlungseingang ausgeführt, nicht nach Start des Cronjobs.

Re: AboProdukte Funktionsweise

Verfasst: 03.07.2014, 14:31
von MKJ
Reden wir aneinander vorbei? Bei mir wird nichts ausgeführt. Und das möchte ich als erstes klären. Das Email Script funktioniert. Die URL ist beim Produkt hinterlegt. Warum wird das Script weder beim Kauf, noch bei Bestätigung der Zahlung ausgeführt?

Re: AboProdukte Funktionsweise

Verfasst: 03.07.2014, 14:44
von maennchen1.de
Ist der Pfad in der "URL Benachrichtigung" korrekt?
Probiere es doch einmal per Browser aufzurufen (mit GET-Parametern müsste es gehen, da die Globale "REQUEST" statt "POST" abgefragt wird).

Re: AboProdukte Funktionsweise

Verfasst: 03.07.2014, 15:17
von MKJ
Da gibt es den "Fehler bei der Abfrage". Allerdings werden die Daten für den Hash ja per $_POST abgefragt.

Re: AboProdukte Funktionsweise

Verfasst: 03.07.2014, 16:07
von maennchen1.de
Dann kommentiere ruhig mal testhalber die Sicherheitsabfrage mit dem Hash aus.

Re: AboProdukte Funktionsweise

Verfasst: 03.07.2014, 17:58
von MKJ
Das hatte ich schon versucht. Zunächst gab es einen Fehler, weil ein Slash fehlte:

Code: Alles auswählen

require_once(dirname(__FILE__).'/wp-load.php');
Dann habe ich zur Sicherheit mal nur meinen Email Test in die abo.php kopiert. Rufe ich diese Datei im Browser auf, wird mir eine Email gesendet. Rufe ich das Script über den Verkauf auf, funktioniert es auch. Die Datei wird also korrekt aufgerufen und auch ausgeführt. Irgend etwas muss an Eurem Code falsch sein. Ich habe ja nur die Platzhalter Kommentare mit meinem Email Script ausgetauscht. Und das Script funktioniert nachweislich.

Re: AboProdukte Funktionsweise

Verfasst: 04.07.2014, 08:22
von maennchen1.de
Das Script von uns funktioniert, wir haben es bereits im Einsatz. Wir müssen nur noch heraus finden, wieso es bei dir nicht klappt.
Entferne bitte einmal deinen hinzugefügten Code und ersetze ihn mit folgendem:

Code: Alles auswählen

mail('deine@mail.de', 'Testmail', 'OK');
Bestelle dann neu ein Produkt und setze dann den Status auf "Zahlung akzeptiert". Achte bitte darauf, evtl. eine andere E-Mail Adresse für den Test zu nehmen, als im Shop verwendet wurde. Wir hatten hier schon einmal das Problem, das Provider die Mails nicht zugestellt hatten.

Re: AboProdukte Funktionsweise

Verfasst: 04.07.2014, 11:03
von MKJ
Nein, es funktioniert nicht. Es geht nur, wenn ich nichts als den Code zum Mailen verwende in der abo.php:

Code: Alles auswählen

 mail('xxx@gmx.net', 'Testmail Pay', 'OK');
Es geht auch nicht, wenn ich die Verifizierung deaktiviere. Weder bei Bestellung, noch bei Bestätigung des Zahlungseingangs wird eine Email getriggert. Die Email erscheint nirgendwo sonst im System.

Kommando zurück: Jetzt ist die Testmail doch angekommen. War offenbar eine Verzögerung.