Anzeigen:
Modul: Payment

Verfügbar ab Version AppServer 108571, ChatServer 108571

Mit einer Instanz von PaymentAccess kann eine App auf Aktionen zugreifen, die mit Echtgeld zu tun haben.

Die PaymentAccess-Instanz erhält man über das KnuddelsServer-Objekt mit KnuddelsServer.getPaymentAccess()

Methoden

requestKnuddelBuyBonusInfos

(
  • user
  • callback
)
asynchron

Verfügbar ab Version AppServer 20200403-191108, ChatServer 20200403-191108

Ermöglicht die Abfrage von Bonus-Informationen für den Knuddel-Kauf für den angegebenen User. Der callback wird asynchron mit einer Liste der Knuddel-Kauf-Boni des Users aufgerufen. Dabei sind nur die Produkte enthalten, die einen Bonus haben. Ist die Liste leer, so hat der User keine Boni.

Die Methode hat einen Timeout von 2 Sekunden. d.h. sollte der ChatServer innerhalb von 2 Sekunden nicht antworten (üblicherweise ist es deutlich schneller), so wird der Callback mit einer leeren Bonus-Liste aufgerufen. Ebenso, falls der User nicht im Channel ist.

Parameter:

  • user User
  • callback Function

    Callback, der aufgerufen wird, um die angeforderten Bonus-Informationen zu erhalten. Der callback erhält folgende Parameter: (user: User, bonusEndTimestamp: number, bonuses: [{
    productId: string,
    origPriceCents: number,
    newPriceCents?: number,
    origKnuddelPayout: number,
    newKnuddelPayout?: number
    }], result: string)


    Der bonusEndTimestamp-Parameter enthält den Unix-Timestamp bis wann die übergebenen Boni gültig sind. Er ist 0 wenn es keine Boni gibt.

    newPriceCents und newKnuddelPayout sind optional und nur vorhanden, wenn ein entsprechender Bonus vorliegt. Um die Menge der Bonus Knuddel zu berechnen (wenn newKnuddelPayout vorhanden ist) kann folgende Formel verwendet werden: var bonusKnuddel = bonus.newKnuddelPayout - bonus.origKnuddelPayout. Für den Preisvorteil geht es analog dazu mit var discountCents = bonus.origPriceCents - bonus.newPriceCents (wenn newPriceCents vorhanden ist).

    Der result-Parameter kann folgende Werte haben:

    • "offline" = der User ist nicht im Channel (leeres Ergebnis)
    • "success" = der ChatServer hat korrekt geantwortet (korrektes Ergebnis)
    • "timeout" = der ChatServer hat nicht rechtzeitig geantwortet (leeres Ergebnis) [dies kann z.B. geschehen wenn der ChatServer überlastet ist oder ein interner Fehler auftrat - in diesem Fall bitte NICHT wiederholt erneut anfragen!]

Beispiel:

KnuddelsServer.getPaymentAccess().requestKnuddelBuyBonusInfos(user, function(user, bonusEndTimestamp, bonuses, result) {
        KnuddelsServer.getDefaultLogger().info('Bonus for user: ' + user.getNick() + ': ' + bonuses.length);
        for (var i = 0; i < bonuses.length; i++) {
            var bonus = bonuses[i];
            KnuddelsServer.getDefaultLogger().info('Bonus for user: ' + user.getNick() + ': '
                    + ' productId: ' + bonus.productId
                    + ', origPriceCents: ' + bonus.origPriceCents
                    + ', newPriceCents: ' + bonus.newPriceCents // kann undefined sein
                    + ', origKnuddelPayout: ' + bonus.origKnuddelPayout
                    + ', newKnuddelPayout: ' + bonus.newKnuddelPayout // kann undefined sein
                    + ', bonusEndTimestamp: ' + new Date(bonusEndTimestamp) // Bonus gültig bis
                    + ', result: ' + result // "offline", "success" oder "timeout"
            );
        }
});

startKnuddelPurchase

(
  • user
  • amount
  • [parameters]
)

Verfügbar ab Version AppServer 108571, ChatServer 108571

Öffnet für den angegebenen User den Kauf-Dialog "Knuddel-Direktkauf für Euros" entsprechend dem angegebenen Knuddel-Betrag. Gibt es kein Produkt, welches diesem Betrag genau entspricht, so wird das nächst höhere (bzw. das höchste) Produkt genommen. Die Aktion ist nur erlaubt, wenn der User bereits mindestens einen Knuddel an die App überwiesen hat: user.getKnuddelAccount().getTotalKnuddelAmountUserToApp() und der User im App-Channel online ist.

Die Methode wirft Exceptions:

  • bei fehlendem User
  • fehlendem oder ungültigem KnuddelAmount Wert
  • wenn die customMessage oder der transferReason zu lang ist
  • wenn der User noch nicht mindestens einen Knuddel an die App überwiesen hat
  • wenn der User nicht im Channel online ist

Darüber hinaus gibt es kein Feedback, ob die Aktion erfolgreich war, ausser der User kauft ein Produkt und transferriert die Knuddel zur App / zum Account, wobei die üblichen Hooks aufgerufen werden (jenachdem, was die App implementiert hat und welcher Modus [Parameter: toAccount] verwendet wird):

Parameter:

  • user User
  • amount KnuddelAmount

    Erlaubte Werte: 1 bis 100.000 (das größte Produkt ist aktuell 50.000 Knuddel)

  • [parameters] Object optional
    • [customMessage] String optional

      Nachricht zur Anzeige im Kaufdialog (z.B. "Du hast nicht genug Knuddel um teilzunehmen!"). Einfacher Text. Hier ist keinerlei Formatierung möglich. Limit: 200 Zeichen.

    • [transferReason] String optional

      transferReason für den /appknuddel-Transfer nach dem Kauf. Der transferReason wird ebenfalls in /knuddelaccount des Users angezeigt. Default: "Knuddel-Kauf". Limit: 200 Zeichen.

    • [toAccount] Boolean optional

      Steuert den Transfer der gekauften Knuddel zur App: (Default: false)

      • Wenn true, dann wird der angegebene Knuddel-Betrag nach dem Kauf automatisch und ohne Bestätigung auf den KnuddelAccount des Users übertragen. Dies geschieht unabhängig davon, ob die App den onBeforeKnuddelReceived-Hook implementiert hat. Nach dem Transfer wird onAccountReceivedKnuddel aufgerufen. Der User erhält zusätzlich eine Nachricht, dass seine gekauften Knuddel nun auf seinem Account sind.
      • Wenn false, dann wird nach dem Kauf /appknuddel APP-BOT:AMOUNT:TRANSFER-REASON gestartet. Dabei wird dem User das übliche /appknuddel-Bestätigungs-Popup angezeigt.

Beispiel:

KnuddelsServer.getPaymentAccess().startKnuddelPurchase(user, new KnuddelAmount(100), {
            customMessage: 'Du hast nicht genug Knuddel für den Glitzerstaub.', // optional
            transferReason: 'Glitzerstaub', // optional
            toAccount: false // optional
});