2016-03-29 9 views
0

Ich habe vor kurzem einige Probleme mit Stripe in Meteor und diese Gemeinschaft war immer eine große Hilfe für mich, also hier geht es los!Problem bei der Verwendung von Stripe mit Meteor.js

Ich versuche eine einfache Website zu erstellen, die es Benutzern ermöglicht, Beiträge zu erstellen, die für eine festgelegte Gebühr zahlen. $ 20 pro Monat, $ 30 für 2 Monate usw. Ich habe das gesamte Skelett der Website gebaut, ich muss jetzt nur noch ermöglichen, dass die Benutzer bezahlen. Während ich nach Informationen über mein Szenario suche, gehe ich über ein Tutorial.

https://themeteorchef.com/recipes/payments-with-stripe-checkout/

Dies war ein sehr hilfreich und informativ Tutorial. Allerdings stieß ich auf einige Probleme auf dem Weg. Meine Wege sind fast alle gleich, aber in einigen Fällen musste ich sie ändern, weil mein vorheriger Code dort war. Ich kann nicht herausfinden, warum dieser Code nicht funktioniert, und ich hoffe, dass ein zweiter Satz von Augen gerade etwas verfängt, das ich verpasst habe.

Meine settings.json Datei direkt neben .meteor Datei im Verzeichnis:

{ 
"public": { 
"stripe": "pk_test_jdsoajdanotrealhasodahsd" 
}, 

"private": { 
    "stripe": "sk_test_hfsd83totallyreal39u03fda", 
    "CLOUDINARY_API_SECRET": "9847934f937ForSureReal49849f" 
}, 

"CLOUDINARY_API_KEY": "fdnk84894wy7f7sdffake8494g", 
"CLOUDINARY_CLOUD_NAME": "CompanyName" 

}

HTML Mein Meteor Autofom LIEGT IN:/CLIENT/pages/BEITRÄGE

<template name="insertPostForm"> 
    {{#autoForm collection="Posts" id="insertPostForm" type="insert"}} 
    <div class="form-group"> 
    <h4>Length of Post <small></small></h4> 
    {{> afFormGroup name="expiryDate" options=expiryOptions}} 
    <h3>Information <small></small></h3><hr> 
    <div class="col-sm-12 col-md-6"> 
    {{> afQuickField name='address'}} 
    </div> 
    <div class="col-sm-12 col-md-6"> 
     {{> afQuickField name='status' options='allowed'}} 
    </div> 
    <h3>Details <small></small></h3><hr> 
    <div class="col-sm-12 col-md-6"> 
     {{> afQuickField name='squareFoot'}} 
    </div> 
    <div class="col-sm-12 col-md-6"> 
    {{> afQuickField name='yearBought'}} 
    </div> 
    {{#unless processing}} 
      <p class="alert alert-info">Please select your prefered months of posting time</p> 

      <ul class="list-group price-list"> 
       <li class="list-group-item clearfix"> 
       <p class="pull-left"><strong>$32</strong> &mdash; 1 Month</p> 
       <a href="#" data-service="1Month" type="submit" class="btn btn-primary">Buy Now</a> 
       </li> 
       <li class="list-group-item clearfix"> 
       <p class="pull-left"><strong>$50</strong> &mdash; 2 Months</p> 
       <a href="#" data-service="2Months" type="submit" class="btn btn-primary">Buy Now</a> 
       </li> 
       <li class="list-group-item clearfix"> 
       <p class="pull-left"><strong>$75</strong> &mdash; 3 Months</p> 
       <a href="#" data-service="3Months" type="submit" class="btn btn-primary">Buy Now</a> 
       </li> 
      </ul> 

     {{else}} 
     <p class="alert alert-warning"><i class="fa fa-refresh fa-spin"></i> Processing payment...</p> 
     {{/unless}} 
    <button type="submit" class="btn btn-primary">Add Listing</button> 
</div> 
{{/autoForm}} 
</template> 

Meine Datei service.js LOCATED IN: CLIENT/PUBLIC/SERV ICES.JS

Template.services.onCreated(() => { 
    let template = Template.instance(); 

    template.selectedService = new ReactiveVar(false); 
    template.processing  = new ReactiveVar(false); 

    template.checkout = StripeCheckout.configure({ 
    key: Meteor.settings.public.stripe, 
    locale: 'auto', 
    token(token) { 
     let service = template.selectedService.get(), 
      charge = { 
      amount: token.amount || service.amount, 
      currency: token.currency || 'usd', 
      source: token.id, 
      description: token.description || service.description, 
      receipt_email: token.email 
      }; 

     Meteor.call('processPayment', charge, (error, response) => { 
     if (error) { 
      template.processing.set(false); 
      Bert.alert(error.reason, 'danger'); 
     } else { 
      Bert.alert('Success!'); 
     } 
     }); 
    }, 
    closed() { 
     template.processing.set(false); 
    } 
    }); 
}); 

Template.services.helpers({ 
    processing() { 
    return Template.instance().processing.get(); 
    }, 
    paymentSucceeded() { 
    return Template.instance().paymentSucceeded.get(); 
    } 
}); 

Template.services.events({ 
    'click [data-service]' (event, template) { 
    const pricing = { 
     '1Month': { 
      amount: 3200, 
      description: "1 Month" 
     }, 
     '2Monthes': { 
      amount: 5000, 
      description: "2 Monthes" 
     }, 
     '3Monthes': { 
      amount: 7500, 
      description: "3 Monthes" 
     } 
    }; 

    let service = pricing[ event.target.dataset.service ]; 

    template.selectedService.set(service); 
    template.processing.set(true); 

    template.checkout.open({ 
     name: 'Posting Service', 
     description: service.description, 
     amount: service.amount, 
     bitcoin: true 
    }); 
    } 
}); 

Meine Stripe.JS Datei GELEGEN IN: /SERVER/STRIPE.JS

let Stripe = StripeAPI(Meteor.settings.private.stripe); 

Meteor.methods({ 
    processPayment(charge) { 
    check(charge, { 
     amount: Number, 
     currency: String, 
     source: String, 
     description: String, 
     receipt_email: String 
    }); 

    let handleCharge = Meteor.wrapAsync(Stripe.charges.create, Stripe.charges), 
     payment  = handleCharge(charge); 

    return payment; 
    } 

}); 

nach diesem Code aus Tutorial in mein Projekt zu integrieren, wenn ich in Befehlszeile gehen und Typ "Meteor --settings settings.json"

die erste Zeile i in Antwort erhalten ist

„ReferenceErr oder: StripeAPI ist nicht definiert“ "am Server/Stripe.js: 1: 14"

wenn i ändern, um die erste Zeile meines Stripe.js Code (Meteor.private.Stripe) my Fehler Änderungen

:

„“

ich habe gerade verrückt gegangen hier versucht, dies herauszufinden und dachte, ich könnte sehen, ob einer von euch feinen Menschen „Typeerror Kann nicht Eigentum‚Streifen‘undefinierter gelesen“ werden würde in der Lage, mir dabei zu helfen. Wenn du so weit gelesen hast, hast du mir schon einen Service gemacht, und dafür danke ich dir!

+0

Sie sollten "Meteor.wrapAsync" nicht auf Stripe-Funktionen verwenden, da Stripe-Funktionen eine Zusage zurückgeben. – corvid

+0

Nach dem Hinzufügen von Mrgalaxy: Stripe usw. funktioniert mein Programm jetzt. Allerdings wird es die Stripe-Zahlungsmethode nicht jedes Mal aufrufen, wenn ich auf eine der 3 Schaltflächen klicke: S – Morjee

Antwort

1

Erste Dinge zuerst: Sie sollten nie jemals !!!! Veröffentlichen Sie Ihre API-Schlüssel überall! Lesen Sie mehr here.

Für Ihr Problem: sieht aus wie Node-Stripe ist nicht auf dem Server verfügbar. Haben Sie meteor add mrgalaxy:stripe wie in der recipe angegeben?

+0

Ja, ich habe das oben gelesen, bevor ich Stripe hinzufüge. Ich hatte Angst vor den Auswirkungen, deshalb habe ich gefälschte Schlüssel eingegeben^lol. Sie sind alle nur Unmengen von Buchstaben und Zahlen, nicht meine wirklichen Schlüssel: P. – Morjee

+0

ok! das ist gut :). Hast du es dann zur Arbeit gebracht? Wenn ja, bitte akzeptiere meine Antwort. Glückliche Kodierung. – tomsp

+0

Es hat funktioniert! Ich bin auf andere Probleme gestoßen, nachdem Sie mir geholfen haben, dieses Problem zu lösen! – Morjee

Verwandte Themen