2016-10-11 2 views
0

ich alle über das Internet gesucht haben, kann ich aber keine klare Antwort auf diese Frage zu bekommen scheinen. Ich verwende die Block.io-API, um Bitcoin-Zahlungen zu meiner App hinzuzufügen. Ich erhalte einen JSON-Hash, der für jede Zahlung eine neue Bitcoin-Adresse enthält, ich kann die Bitcoin-Adresse extrahieren, aber ich muss sie automatisch in meiner Datenbank speichern. Wenn ein Benutzer auf eine bestimmte Seite zugreift, wird die Adresse auch auf dieser Seite generiert. Ich bin mit PostgresqlWie automatisch Daten von API speichern zu - Ruby on Rails

Die JSON wie folgt aussieht:

{"status"=>"success", "data"=>{"network"=>"BTCTEST", "address"=>"2MstFNxtnp3pLLuXUK4Gra5dMcaz132d4dt", "available_balance"=>"0.01000000", "pending_received_balance"=>"0.00000000"}} 

Ich habe einen Controller, der die API-Aufrufe, die Adresse zu generieren:

class PaymentsController < ApplicationController 
    def index 
    @new_address = BlockIo.get_new_address 
    end 
end 

Und die Bitcoin-Adresse verwendet angezeigt:

<%= @new_address["data"]["address"] %> 

Ich denke über das Erstellen einer neuen Funktion, die die Bitcoin-Adresse speichern wird die Datenbank und Karte die Route die Ausführung dieser Funktion auf die spezifische Seite zugreifen, so etwas wie:

Controller:

class PaymentsController < ApplicationController 
    def create 
    @new_address = BlockIo.get_new_address 

## I need assistance with the rest to auto save 

    end 
end 

Routen:

match '/save_btc' => 'payments#create', via: [:get, :post] 

wenn jemand domain.com/save_btc das eröffnet Bitcoin-Adresse muss automatisch in der Datenbank gespeichert werden.

Ich habe bereits erzeugt die folgende Migration

rails g model Payment bitcoin:string 

Kommentare oder Unterstützung wird sehr geschätzt.

+1

Zunächst einmal, verwenden Sie nicht für etwas GET-Anfragen, den Zustand ändert, spart etwas Neues etc. Es ist nicht semantische und es ist stattdessen in Bezug auf die Sicherheit in Bezug auf CSRF, Protokolle usw. Verwenden Sie POST/PUT/PATCH problematisch. Danach versuchen Sie es einfach z.B. mit einer regulären 'create' Controller Aktion und sehen was passiert. Sie können jederzeit zurückkehren, wenn Sie ein spezifisches Problem haben. –

+0

Ich bin mit @ HalilÖzgür hier. Versuchen Sie, Standard-REST-Endpunkte zu verwenden, es sei denn, Sie haben einen wirklich außergewöhnlichen Fall. Dies könnte besser durch etwas wie "bitcoin_addresses # create" über POST geleitet werden. – tadman

+0

@tadman Ich habe den Controller und das Routing aktualisiert, aber ich bin nicht damit vertraut, Daten von einer API von Drittanbietern zu speichern, können Sie eine Anleitung zur richtigen Syntax zum Aufruf des API BlockIo anbieten.get_new_address und speichere es auch. Da ich gewohnt bin, das Model/Controller als Payment zu verwenden = Payment.new etc ... Wie oder ist die API bei dieser Methode "eingesteckt"? –

Antwort

1

Es sieht aus wie BlockIo bereits den JSON-String für Sie das Parsen und einen regelmäßigen Ruby-Hash zurück.

Ich würde so etwas wie dies versuchen:

new_address = BlockIo.get_new_address 
Payment.create(bitcoin: new_address['data']['address']) 

Sie wollen wahrscheinlich den Status der Antwort new_address['status'] und stellen Sie sicher, zu überprüfen, ob die Adresse vor dem Speichern vorhanden ist. Aber der Code oben sollte dir den Anfang machen.

Sie werden wahrscheinlich eine Umleitung oder so etwas wie head :ok tun wollen, nachdem die Zahlung erstellt wird.

Hinweis: Sie müssen nicht die @ für die Variablennamen verwenden. Dies wird normalerweise nur verwendet, wenn Sie diese Informationen an eine Ansicht übergeben.

+0

Vielen Dank. Das hat den Trick für mich gemacht. –