I braintree Zahlung mit gehosteten Felder wie folgt festgelegt haben:Braintree gehostet Feld für zusätzliche CC
In JS-Datei:
braintree.setup(client_token, "custom", {
id: "my-sample-form",
paypal: {
container: "paypal-container"
},
hostedFields: {
number: {
selector: '#my-credit-card-field',
},
cvv: {
selector: '#my-security-code-field',
},
expirationDate: {
selector: '#my-expiration-field',
},
postalCode: {
selector: '#my-postal-code-field',
}
},
});
ich keine Probleme haben, wenn die Einrichtung neuer Kunde versuchen, wenn sie benötigen, ihre CC Details zu füllen, aber wenn ich Setup bestehende Kunden versuchen, scheiterte die JS-Datei aufgrund von nicht vorhandenen #my-credit-card-field
, etc ..
In meinem new.html.erb, ich habe so etwas wie dies:
<% unless current_user.has_payment_info? %>
<div id="my-credit-card" readonly>**** **** **** <%= @last_4_number %></div>
<% else %>
<div id="my-credit-card-field"></div>
<div id="my-security-code-field"></div>
<div id="my-expiration-field"></div>
<div id="my-postal-code-field"></div>
<% end %>
So werde ich cc Details für neue Kunden fragen, und bestehende Kunden können ihre Zahlungsmethode Informationen speichern. Ich habe so etwas in meinem Controller:
def create
@amount = params[:slider]
@token = Braintree::Customer.find(current_user.braintree_customer_id).credit_cards.first.token
unless current_user.has_payment_info?
@result = Braintree::Transaction.sale(
amount: @amount,
payment_method_nonce: params[:payment_method_nonce],
options: {
store_in_vault: true
})
else
@result = Braintree::Transaction.sale(
customer_id: current_user.braintree_customer_id,
amount: @amount,
payment_method_token: @token)
end
if @result.success?
#Some codes here
end
end
Mein Problem:
Wenn ich meine ID my-credit-card-field
gesetzt, für bestehende Kundenformular dann müssen sie die Details aufgrund hostedfields Selektor js füllen. Wenn ich keine Selektoren einstelle, dann gibt es Fehler in der JS-Datei. Gibt es eine bessere Möglichkeit, das Formular für bestehende Kunden zu erstellen, die ihre Zahlungsmethode bereits festgelegt haben?
Dank und jede Hilfe wird geschätzt!
Danke, eine letzte Sache - Wie benutze ich Partials für Javascript? – pyfl88
Offen gesagt gibt es viele Möglichkeiten, aber für etwas so einfach, würde ich eine einzelne Teilansicht (ja, im Verzeichnis app/Ansichten gespeichert), die nur das Javascript enthält. In dieser Ansicht können Sie dazu den 'javascript_tag' verwenden (http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-javascript_tag).Es gibt andere Methoden, wie 'content_for' in Ihren Ansichten zu verwenden oder ein alternatives Layout zu verwenden, aber wahrscheinlich zu viel (es sei denn, Sie benötigen das JS im head-Tag (zweifelhaft), dann möchten Sie" content_for "). – GoGoCarl