Affiliate API
am 10.06.2016 - 17:38 Uhr in
Hallo liebe Community,
ich möchte gerne eine Übersicht der Statistiken von affilinet (http://affili.net) in meine Drupal-Seite einbringen. Dafür möchte ich gerne eine eigene Admin-Seite erstellen auf der die Statistiken ausgegeben werden.
Die Partner-ID und das Passwort soll aus einem Formular kommen, welches sich ebenfalls im Adminbereich befinden soll.
Vorgestellt habe mich mir das so:
Der Menüeintrag soll unter Konfiguration->Services zu finden sein. Dieser Eintrag soll den Titel "Affiliate" haben. Auf der Seite "Affiliate" sollten 2 Tabs zu sehen sein.
1. Tab -> Übersicht
2. Tab -> Login (das Formular zum Anmelden beim Affilinet-Server
Ich habe folgenden Code, aber leider keine Ahnung wie ich das in Drupal einbringen kann. Wenn ich ehrlich bin, habe ich in PHP kaum bis gar keine Erfahrung.
<?php
// Set webservice endpoints
define("WSDL_LOGON", "https://api.affili.net/V2.0/Logon.svc?wsdl");
define("WSDL_STATS", "https://api.affili.net/V2.0/PublisherStatistics.svc?wsdl");
// Set credentials
$username = ''; // the publisher ID
$password = ''; // the publisher web services password
// Send a request to the Logon Service to get an authentication token
$soapLogon = new SoapClient(WSDL_LOGON);
$token = $soapLogon->Logon(array(
'Username' => $username,
'Password' => $password,
'WebServiceType' => 'Publisher'
));
// Set page setting parameters
$pageSettings = array(
'CurrentPage' => 1,
'PageSize' => 5,
);
// Set transaction query parameters
$startDate = strtotime("-2 weeks");
$endDate = strtotime("today");
$rateFilter = array(
'RateMode' => 'PayPerSale',
'RateNumber' => 1
);
$transactionQuery = array(
'StartDate' => $startDate,
'EndDate' => $endDate,
'RateFilter' => $rateFilter,
'TransactionStatus' => 'All',
'ValuationType' => 'DateOfRegistration'
);
// Send a request to the Publisher Statistics Service
$soapRequest = new SoapClient(WSDL_STATS);
$response = $soapRequest->GetTransactions(array(
'CredentialToken' => $token,
'PageSettings' => $pageSettings,
'TransactionQuery' => $transactionQuery
));
// Show response
print_r($response);
Ich hoffe jemand kann mir dabei helfen.
Liebe Grüße,
Marvin
- Anmelden oder Registrieren um Kommentare zu schreiben
Hi Marvin, Du musst ein Modul
am 11.06.2016 - 09:36 Uhr
Hi Marvin,
Du musst ein Modul machen, welches eine Admin Form(hook_admin) sowie einen Menüpunkt (hook_menu) unter System Settings definiert.
Schau hier:
https://www.drupal.org/node/206761
Darin kannst Du dann deinen SOAP Request machen und auswerten.
Gruss
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Hallo Robert, Danke für deine
am 11.06.2016 - 12:41 Uhr
Hallo Robert,
Danke für deine Antwort. Wie ich in etwa ein Modul schreibe, weiß ich. Dazu gibt es genügend Anleitungen. Was ich allerdings nicht hinbekomme, ist der SOAP Request und die anschließende Auswertung.
Ich hoffe, dass mir dabei jemand helfen kann. Habe auch schon in viele verschiedene Module geschaut, aber bin daraus leider nicht schlau geworden.
Es gibt zwar ein WordPress plugin, welches meinen Wünschen entspricht, jedoch nutze ich Drupal und ich möchte nicht wegen einem Plugin das ganze System wechseln, zumal es für WordPress kein Rules und Views gibt. Was für mich den großen Unterschied zu Drupal ausmacht.
Ich habe auch schon in das WordPress Plugin reingeschaut, aber daraus werde ich ebenfalls nicht schlau. Wie schon gesagt, habe ich so gut wie keine Coding Erfahrungen.
Liebe grüße,
Marvin
Ohne Coding wirst du nicht weit damit kommen
am 12.06.2016 - 08:41 Uhr
Der SOAP-Request ist eine Serveranfrage, die eine Antwort zurückliefert.
Du kannst den Request aus dem Userprifil deines angemeldeten Users generieren und absetzen, und die Antwort in einen Block schreiben lassen.
Das kannst du leicht mit AJAX realisieren.
Aber ein bisschen code wirst du dafür schreiben müssen.
Einerseits ein bisschen JAVAScript/JQuery, andererseits die Vorbereitung dafür als PHP-Gerüst.
Du wirst kaum jemanden finden, der dir die Arbeit kostenlos abnimmt. Wir können dir nur die Richtung zeigen.
Grüße
Ronald
Hallo Marvin, aus dem obigen
am 12.06.2016 - 09:39 Uhr
Hallo Marvin,
aus dem obigen Code geht hervor, dass Du den PHP SoapClient verwendest.
http://php.net/manual/de/class.soapclient.php
Schau mal in phpInfo(); ob auf dem Server das PHP SOAP Modul installiert ist.
Denn ohne das Server SOAP Modul wird der obige Code nicht funktionieren.
Gruss
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Also ich habe es soweit
am 13.06.2016 - 02:38 Uhr
Also ich habe es soweit hinbekommen. Was mich jedoch stört ist, dass ich es nicht schaffe ein Menüpunkt bzw Tab für meine Loginseite zu erstellen. Das Formular und die Ausgabe der Ergebnisse sollen getrennt angezeigt werden.
Also wie folgt:
Der Menüpunkt für die Übersichtsseite befindet sich in "Web-Dienste". Es soll noch ein Menüpunkt verfügbar sein, den ich direkt von der Übersichtsseite aufrufen kann (das Anmeldeformular).
Hier der Code:
<?php
/**
* Affilinet Admin settings
*/
require_once('affiliate_overview.api.inc');
require_once('affiliate_overview.admin.inc');
function affiliate_overview_print_pre() {
}
function affiliate_overview_init() {
drupal_add_css(drupal_get_path('module', 'affiliate_overview') . '/css/affiliate_overview.css');
if(!isset($_COOKIE['affiliate_overview_affilinet_username_active'])) {
setcookie('affiliate_overview_affilinet_username_active', variable_get('affiliate_overview_affilinet_username'), time() + 3600 * 24 * 180, '/', false, false, false);
}
if (!isset($_COOKIE['Drupal_visitor_affiliate_overview_affilinet_username_active'])) {
user_cookie_save(array('affiliate_overview_affilinet_username_active'=>variable_get('affiliate_overview_affilinet_username')));
}
if (!isset($_SESSION['Drupal_visitor_affiliate_overview_affilinet_username_active'])) {
$_SESSION['Drupal_visitor_affiliate_overview_affilinet_username_active'] = variable_get('affiliate_overview_affilinet_username');
}
}
function affiliate_overview_permission() {
return array(
'access affiliate overview' => array(
'title' => t('Access Affiliate overview'),
),
'access all affiliate overview' => array(
'title' => t('Access Affiliate overview configuration'),
),
);
}
function affiliate_overview_menu() {
$items = array();
$items['admin/config/services/affiliate-overview'] = array(
'title' => t('Affiliate overview'),
'access arguments' => array('access affiliate overview'),
'page arguments' => array(0),
'page callback' => 'affiliate_overview_GetPublisherSummary',
'type' => MENU_NORMAL_ITEM,
);
$items['admin/config/services/affiliate-overview/affilinet-login'] = array(
'title' => t('Affilinet login'),
'page callback' => 'drupal_get_form',
'page arguments' => array('affiliate_overview_affilinet_admin_config_form'),
'access arguments' => array('access all affiliate overview'),
'type' => MENU_DEFAULT_LOCAL_TASK,
);
return $items;
}
function affiliate_overview_affilinet_admin_config_form($form,&$form_state) {
$form['username'] = array(
'#type' => 'textfield',
'#title' => t('Publisher-ID'),
'#default_value' => variable_get('affiliate_overview_affilinet_username'),
'#required' => TRUE
);
$form['password'] = array(
'#type' => 'textfield',
'#title' => t('Password'),
'#default_value' => variable_get('affiliate_overview_affilinet_password'),
'#required' => TRUE
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $form;
}
function affiliate_overview_affilinet_admin_config_form_submit(&$form_state) {
variable_set('affiliate_overview_affilinet_username', $form_state['username']['#value']);
variable_set('affiliate_overview_affilinet_password', $form_state['password']['#value']);
drupal_set_message(t('Your configuration has been saved.'));
}
function gerDate($value)
{
$year = substr($value, 0, 4);
$month = substr($value, 5, 2);
$day = substr($value, 8, 2);
if($year > 2000)
{
$value = $day.'.'.$month.'.'.$year;
}
else
{
$value = "noch keine ";
}
return $value;
}
function money($value)
{
if($value < 1)
{
$value = " - ";
}
$value = str_replace('.',',',$value);
$value = $value.' €';
return $value;
}
function affiliate_overview_GetPublisherSummary($title) {
$result = _affiliate_overview_GetPublisherSummary();
ZEILE 117 => $output .= '<h2>Statistiken</h2>'; <= ZEILE 117
$output .= '<table style="width:100%;border:dotted gray 1px;" cellspacing="1">';
$output .= '<tr class="header">';
$output .= '<th colspan="2">Kontostand</th>';
$output .= '<th colspan="2">Umsatz der Vormonate</th>';
$output .= '<th>Auszahlungen</th>';
$output .= '<th colspan="2">Partnerschaften</th>';
$output .= '</tr>';
$output .= '<tr class="gerade">';
$output .= '<td class="rightgray">Bestätigt</td>';
$output .= '<td class="rightgray bold confirmed">' . money($result->CurrentMonth->Confirmed) . '</td>';
$output .= '<td class="rightgray">Bestätigt</td>';
$output .= '<td class="rightgray bold confirmed">' . money($result->PreviousMonths->Confirmed) . '</td>';
$output .= '<td class="rightgray bold other">' . gerDate($result->Payments->LastPayment) . '</td>';
$output .= '<td class="rightgray">Aktive:</td>';
$output .= '<td class="bold other center">' . $result->Partnerships->PartnershipsActive . '</td>';
$output .= '</tr>';
$output .= '<tr class="ungerade">';
$output .= '<td class="rightgray">Offen</td>';
$output .= '<td class="rightgray bold open">' . money($result->CurrentMonth->Open) . '</td>';
$output .= '<td class="rightgray">Offen</td>';
$output .= '<td class="rightgray bold open">' . money($result->PreviousMonths->Open) . '</td>';
$output .= '<td class="rightgray bold other">' . money($result->Payments->TotalPayment) . '</td>';
$output .= '<td class="rightgray">Wartend:</td>';
$output .= '<td class="bold other center">' . $result->Partnerships->PartnershipsWaiting . '</td>';
$output .= '</tr>';
$output .= '<tr class="gerade">';
$output .= '<td class="rightgray">Storniert</td>';
$output .= '<td class="rightgray bold canceled">' . money($result->CurrentMonth->Cancelled) . '</td>';
$output .= '<td class="rightgray">Storniert</td>';
$output .= '<td class="rightgray bold canceled">' . money($result->PreviousMonths->Cancelled) . '</td>';
$output .= '<td> </td>';
$output .= '<td colspan="2"> </td>';
$output .= '</tr>';
$output .= '<tr class="ungerade rightgray">';
$output .= '<td colspan="7"><a href="http://publisher.affili.net" target="_blank" title="publisher.affili.net"><b>» zum affilinet Publisher-Login</b></td>';
$output .= '</tr>';
$output .= '</table>';
return $output;
}
?>
Die Datei für die SOAP-Anfrage ist separat. Da steht aber nichts relevantes drin, nur die Anfrage, deswegen ist diese hier nicht als Code eingebunden.
Zudem bekomme ich eine Meldung:
Notice: Undefined variable: output in affiliate_overview_GetPublisherSummary() (Zeile 117 von /var/www/drupal7/sites/all/modules/affiliate_overview/affiliate_overview.module)
Kann mir dabei jemand helfen?
Liebe Grüße,
Marvin
Hallo Marvin. Du hast die
am 13.06.2016 - 09:30 Uhr
Hallo Marvin.
Du hast die Variable $output noch gar nicht definiert und möchtest einen String daran hängen.
Lass den Punkt in Zeile 117 weg, so definierst Du die Variable $output.
statt:
function affiliate_overview_GetPublisherSummary($title) {
$result = _affiliate_overview_GetPublisherSummary();
ZEILE 117 => $output .= '
Statistiken
'; <= ZEILE 117
machst Du (ohne Punkt):
$output = '
Statistiken
';
Das verstehe ich nicht ganz:
Also wie folgt:
Der Menüpunkt für die Übersichtsseite befindet sich in "Web-Dienste". Es soll noch ein Menüpunkt verfügbar sein, den ich direkt von der Übersichtsseite aufrufen kann (das Anmeldeformular).
Einen Menü Punkt kannst Du über den Menu Hook oder über die UI selbst erstellen.
Gruss
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Oh, so einfach :DAlso ich
am 13.06.2016 - 13:34 Uhr
Oh, so einfach :D, Danke.
Also ich möchte in meinem Modul einen Menüpunkt unter "Admin->Config->Services" das klappt auch soweit. Nun möchte ich einen weiteren Menüpunkt unter "Admin->Config->Services->Mein Modul" als Tab. Es gibt bei einigen Modulen, wie z.B. Rules mehrere Tabs für verschiedene Einstellungen. Dort sollen dann in meinem Modul die Anmeldedaten für die SOAP-Abfrage eingetragen werden. Ich kann diese Seite zwar im Browser aufrufen, allerdings finde ich dafür keinen Tab. Habe es jetzt provisorisch mit
'type' => MENU_LOCAL_ACTION,
aber möchte gerne einen Tab haben.Liebe Grüße,
Marvin
Hi Marvin, also mir sieht der
am 13.06.2016 - 16:53 Uhr
Hi Marvin,
also mir sieht der Code in Deinem Menü Hook richtig aus.
Hast Du den Cache gelöscht nach der Code Änderung
oder rebuild_menu (devel modul) aufgerufen?
Schau mal hier (Rendering Menu Items As Tabs):
https://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_menu/7.x
Könnte evtl. auch am Theme liegen, das die Tabs nicht gerendert werden.
Gruss
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Habe vieles probiert, leider
am 15.06.2016 - 02:21 Uhr
Habe vieles probiert, leider ohne Erfolg
Trotzdem danke
Liebe Grüße,
Marvin
wo fügst du diese Codes denn ein?
am 15.06.2016 - 08:03 Uhr
Du wirst ein kleines eigenes Modul brauchen, bei dem du einen Block mit diesem Inhalt erzeugst.
Dann ist natürlich noch die Frage, wo der Aufruf die AffiliatID hernimmt.
Ich würde sie im Userprofil ablegen.
So bekommt jeder User einen individuellen Info-Block über seine Umsätze.
Grüße
Ronald