2010-12-29 10 views
2

Ich habe einen Kunden, der eine Anforderung hat, dass er bestimmte Produkte "außerhalb der Vereinigten Staaten" nicht verkaufen kann.Wie schränkt man Einkäufe auf NUR IP-Adressen in den USA mit Ruby/Rails ein?

Sie bevorzugen, dass Benutzer die Website sehen können, aber wenn sie versuchen, zur Kasse zu gehen, erscheint eine Meldung, dass sie sich außerhalb der Vereinigten Staaten befinden.

Ihre Website ist in Rails 2.3.8 gebaut.

+0

Dies kann nicht zuverlässig durchgeführt werden. – SLaks

+1

Wenn für diese Produkte ein physischer Versand erforderlich ist, ist es einfach, sich das Land anzusehen, in das der Benutzer das Produkt liefern möchte. –

+0

Interessante Frage. Aber was ist, wenn ein US-Bürger vorübergehend außerhalb der USA reist? –

Antwort

3

Schauen Sie sich die GeoIP gem an (lesen Sie die Anweisungen, Sie müssen die GeoLiteCity- oder GeoLiteCountry-Datenbank herunterladen, damit sie funktioniert). Es verwendet MaxMind's GeoIP database und kann Ihnen das Land (oder die Stadt, im Fall der Stadt-Datenbank) einer IP-Adresse mit einiger Genauigkeit geben. Es gibt eine kommerzielle Datenbank mit besserer Genauigkeit, die ich für Ihren Anwendungsfall empfehlen würde.

Allerdings ist darauf hinzuweisen, dass dies keine endgültige Lösung ist. Einige Kunden werden zu Unrecht abgewiesen, und einige werden in der Lage sein zu bestellen, obwohl sie es nicht tun sollten. Dinge wie Satellitenverbindungen, Proxy-Server und VPN-Dienste machen den IP-Standort unmöglich und keine Datenbank ist zu 100% vollständig oder korrekt.

+0

Ich habe die Datendatei heruntergeladen, den Edelstein installiert und getestet. Es funktioniert wie angekündigt und ich mag es, weil es nicht auf einen Drittanbieter-Dienst angewiesen ist. –

2

Was Sie suchen, ist eine Art von rauem Geolocation. Eine Möglichkeit, dies zu erreichen, besteht darin, eine DNS-Zone abzufragen, die speziell dafür entwickelt wurde. Eine solche Zone ist unter http://countries.nerd.dk beschrieben.

1

Ich komme aus der Ukraine. Und wenn ein bestimmter US-Shop keine Produkte im Ausland verkaufen möchte, gibt er normalerweise in der Policy/faq/etc an, dass nur von der US-Bank ausgestellte Zahlungskarten akzeptiert werden. Das scheint für mich die beste Lösung zu sein: "kann bestimmte Produkte außerhalb der USA nicht verkaufen".

Da gibt es Paket-/Post-/Speditionsfirmen, die von einem potentiellen Kunden davon genutzt werden können Kunden, die zwar außerhalb der USA wohnen, die der Kunde aber nicht direkt liefern muss. Dieser Kunde würde immer noch von diesen Verkäufen profitieren, wird aber von der Wahl befreit, die mit der Überseeschifffahrt verbunden ist.

Und wenn Sie es mit Geolocation lösen, würde dieser Kunde noch in der Lage sein, zusätzliches Geld zu verdienen, wenn die Leute die Seite immer noch durch verschiedene Arten von Proxies verwenden würden, wenn dieser Kunde es wert ist. :)

1

Sie können ihre Daten verwenden, die Sie in Ihre Datenbank ziehen, um die IP-Adresse des Benutzers zu überprüfen. http://www.ipligence.com/geolocation/ (Sie müssen noch über proxying Sorge)

würde ich auch überprüfen, wo Ihre Liefer es (Adressen wie oben vorgeschlagen Überprüfung), die auch mit der Karte backer wie VISA die Karte Adresse überprüfen, etc ..

Und oben vorgeschlagen, sollte Ihr Geld verarbeitender Agent keine Transaktionen von außerhalb der USA auf bestimmte Artikel (wenn möglich) erlauben

Aber ich habe Ihre Aussage gelesen Einige Produkte dürfen nicht außerhalb der USA verkauft werden Ich brauche einen Weg, um diese Produkte in Ihrem System zu markieren und dann den Benutzer wissen zu lassen, dass sie diese Artikel nicht kaufen können, sondern mit anderen im Warenkorb fortfahren.

1

Sie könnten eine Rack Middleware verwenden, aber Sie müssen sie zuerst auf Github umleiten.

https://github.com/roja/rack-geo

Im Moment dieses Projekt, das Sie Stadt und Organisation Namen auf der IP-Adresse des Computers, der die Anforderung basiert gibt - man muss auch Country Code.

Man könnte es mit dem Code hinzufügen relativ leicht hier: https://github.com/roja/rack-geo/blob/master/lib/rack/geo.rb

Sie dann einen Rack-Umgebungsvariable einstellen könnte, um anzuzeigen, wenn die Anforderung aus den USA ist in der Call-Methode:

Rack::Request.new(env)["born"] = "...in the USA" 

Fügen Sie es zu Ihrer Konfigurationsdatei hinzu:

Und dann in Ihrem Controller können Sie testen, ob die Anfrage diese Umgebungsvariable ordnungsgemäß eingestellt hat und Umleitung auf einen ‚bedauern, dass Sie aus den USA sein muss‘ Seite:

if params['born'] == "...in the USA" 
    redirect_to "/not_from_round_here" 
end 

Beachten Sie, dass die IP-Adresse Sniffing fehlbar ist. Ich nehme oft Züge in Großbritannien und lande mit Google auf Deutsch.

Verwandte Themen