Ich habe paypal adaptive Bezahlsystem in einer Website integriert, aber ich bekomme einen Fehler, während ich auschecke, dass, wenn die Menge bis zu 2 Dezimalstellen nicht abgerundet ist, der Bruchbetrag sein könnte hat verloren. Was ist die Lösung dafür? Ich rundee gerade die Beträge ab, aber irgendeine Idee, wie man den Bruchteilbetrag auch erhält?paypal Adaptive Zahlungsproblem - Bruchbetrag ist abgerundet
Antwort
Sie müssen sicherstellen, dass der Betrag, den Sie an PayPal senden, für die Währung richtig gerundet wird. Dies bedeutet, dass ein US-Dollar-Betrag höchstens 2 Untereinheiten (Cent) hätte.
Bei Verwendung der adaptiven Lohnedelsteine Rubin und immer noch Probleme auftreten:
Ein weiteres Problem, das ich vor kurzem in ihren Rubin Edelsteine lief ist, dass sie schwebt statt Dezimalstellen verwenden, was eine schlechte Praxis für monetäre Werte ist . Floats sind ungenau. Zum Beispiel in Ruby ...
2.20 - 2.01 = 0.1900000000000004
Wenn Sie richtig die Menge der Untereinheiten Einstellung sind, wenn in der param ihre build_pay
Methode übergeben und Sie immer noch den Fehler bekommen ...
If the fractional amount is rounded for currency conversion, funds could be lost
dann kann das Problem sehr gut innerhalb der Verwendung von Float in ihrem Edelstein sein. Ihre Protokolle zeigen dies, und Sie können es testen, indem Sie die Menge 715.57
verwenden, die ihr Edelstein an ihre API als 715.57000000001
wegen ihrer Verwendung von .to_f
in ihrem paypal-sdk-core
Juwel sendet.
Um dies zu beheben, gepatcht ich Affen ihre Float
Klasse in meinem Rails-Anwendung durch das Hinzufügen dieser zu meiner app, im Wesentlichen es als BigDecimal statt einem Float Gießen:
module PayPal::SDK::Core
module API
module DataTypes
module SimpleTypes
class Float < ::Float
def self.new(float)
# Floats are inccurate. BigDecimal is better.
# Ruby example: 2.20 - 2.01 = 0.1900000000000004
# To support currencies with up to 4 subunits, we round(4)
BigDecimal.new(float.to_f.round(4).to_s)
end
end
end
end
end
end
meine config/initializers/paypal.rb
. Ich kann nicht sagen, dass dies die eleganteste Lösung ist, aber es funktioniert. Ich habe auch ein Problem in ihrem Repo erstellt und kann es hoffentlich bald wieder hören.
Weitere Informationen über float Probleme mit Währung:
Referenz 1: https://stackoverflow.com/a/3730040/1109211
Referenz 2: https://stackoverflow.com/a/3730249/1109211
- 1. Paypal Java-SDK Zahlungsproblem
- 2. Paypal Vorautorisierte + Adaptive Zahlung
- 3. Paypal Adaptive Chained Zahlung
- 4. Paypal X - adaptive Zahlungen - was ist das?
- 5. PayPal Sandbox 500 Proxy Error - PayPal Adaptive
- 6. PayPal adaptive Zahlung Erfolg Funktion
- 7. Paypal Adaptive Payment: Wrong Shop
- 8. PayPal Adaptive Payments Pre-Approval
- 9. Paypal Adaptive/Chained Payments Workflow
- 10. PayPal adaptive Zahlung IPN Funktionsaufruf
- 11. Rückerstattungsfunktionalität in Paypal Adaptive Payments
- 12. Paypal Zahlungsproblem in Bezug auf Kreditkartennummer und Art
- 13. PayPal Adaptive Payments - Fehler 520009 - Konto ist eingeschränkt
- 14. Was ist der JSON für PayPal Adaptive Payments Verkettete Zahlung
- 15. Paypal Adaptive Payments in REST API
- 16. PayPal Adaptive Payment Api Benutzerdaten eingeben
- 17. Paypal Adaptive Zahlung für mobiles Web
- 18. Paypal adaptive Zahlung zurück leere Antwort
- 19. PayPal Adaptive Payments Service 550001 Fehler
- 20. Adaptive Payment Api Paypal [Peer to Peer]
- 21. PayPal Adaptive Payment Formular Einreichung Bug
- 22. PayPal Adaptive Payment - angelleye CodeIgniter-Bibliothek
- 23. CS-CART Paypal Adaptive Payments Integration Ausgabe
- 24. Unterstützt PayPal Adaptive Payment in Saudi-Arabien?
- 25. Paypal Rückerstattung API für paypal adaptive Zahlungen, wenn der Absender mehr als einer ist?
- 26. Adaptive Zahlungen
- 27. PayPal-Parameter für Artikeldetails, Umsatzsteuer und Versand in Adaptive Payments
- 28. Paypal Adaptive Payments und Webhook-Events nicht registriert
- 29. Warum kann ich Paypal Adaptive Payments nicht mehr verwenden?
- 30. Erhalten Sie den Gebührenbetrag mit PayPal Adaptive Payments API?
Welche Währung verwenden Sie, dass mehr als zwei Ziffern rechts vom Komma verwendet Punkt? Die kleinste Einheit der US-Währung ist ein Cent (0,01), und es gibt keinen kleineren * Teilbetrag * als 1/100 eines Dollars. Die Lösung ist eine ordentliche Rundung, so dass Bruchstücke (Cent) entsprechend aufgerundet werden. Sie können einem Kunden nicht sehr gut sagen * Ihre Kosten betragen $ 11.125 *, wenn das nicht auf der Abrechnung steht. –