Det är väl en omöjlig fråga att besvara med kodsnuttar ryckta ur sitt sammanhang så här.
Scriptet i sin helhet kan nås via länken överst på sidan. Det översta kodsjoket här skall sedan in på rad 800 i scriptet.
7 svar · 441 visningar · startad av kbking
Hej!
Jag sitter och testar ett shoppingcart script, som kallas NopCart och som verkar mycket flexibelt. Just nu har jag lagt till betalväxeln PayPal.
Eftersom PayPal inte erbjuder svenska kronor, som valuta hade jag tänkt använda EURO. Det jag gått bet på är att i scriptet - på rätt sätt - multiplicera med faktorn 0.10890000 för att få priset i EURO på PayPal-sidan. Jag får då felmeddelandet: "The link you have used to enter the PayPal system contains an incorrectly formatted item amount."
Den del av scriptet som för över värdena till PayPal är:
if ( PaymentProcessor == 'pp' ) {
//Process hidden values for PayPal.
strOutput += "<input type=hidden name=\"item_number_"+ strFooter + "\" value=\"" + fields[0] + "\">";
strOutput += "<input type=hidden name=\"quantity_" + strFooter + "\" value=\"" + fields[1] + "\">";
strOutput += "<input type=hidden name=\"amount_" + strFooter + "\" value=\"" + fields[2] + "\">";
strOutput += "<input type=hidden name=\"item_name_" + strFooter + "\" value=\"" + fields[3] + "\">";
if (i == iNumberOrdered) {
strOutput += "<input type=hidden name=\"shipping_" + strFooter + "\" value=\"" + strShipping + "\">";
} else {
strOutput += "<input type=hidden name=\"shipping_" + strFooter + "\" value=\"0.00\">";
}
strOutput += "<input type=hidden name=\"on0_" + strFooter + "\" value=\"" + fields[5] + "\">";
}
och raden det gäller är:
strOutput += "<input type=hidden name=\"amount_" + strFooter + "\" value=\"" + fields[2] + "\">";
där fields[2] definieras:
fields[2] = database.substring( Token1+1, Token2 ); // Price
fields[2] == strPRICE
och Token0 och Token1 och Token2:
Token0 = database.indexOf("|", 0);
Token1 = database.indexOf("|", Token0+1);
Token2 = database.indexOf("|", Token1+1);
Min fråga är alltså hur jag ska skriva in faktorn 0.10890000 i scriptet.
Det är väl en omöjlig fråga att besvara med kodsnuttar ryckta ur sitt sammanhang så här.
Scriptet i sin helhet kan nås via länken överst på sidan. Det översta kodsjoket här skall sedan in på rad 800 i scriptet.
strOutput += "<input type=hidden name=\"amount_" + strFooter + "\" value=\"" + (parseFloat(fields[2])*0.1089) + "\">";
Förutsatt att resten av koden är korrekt.
Av allt att döma så är koden korrekt; alla uppgifter, som jag vill ha skickade till PayPal kommer också fram. Kruxet är att det är det svenska beloppet. Det är därför jag skulle vilja få in den här omräkningsfaktorn.
Med ditt förslag visar PayPal inget felmeddelande, utan istället en "steril" sida/kundvagn med texten: "Your shopping cart is empty."
Hmm...Jag kopierade och klistrade och kanske var det dumt att göra det. Så nu ersatte jag endast fields[2] med (parseFloat(fields[2])*0.1089) och lät bli övrig fungerande kod. Det gjorde att jag nu får jag samma felmeddelande som förut: "The link you have used to enter the PayPal system contains an incorrectly formatted item amount."
Det som kan vara fel i själva uträkningen är att det blir ett långt decimaltal som summa, vi kan avrunda det så här;
strOutput += "<input type=hidden name=\"amount_" + strFooter + "\" value=\"" + parseInt(parseFloat(fields[2])*0.1089+0.5) + "\">";
Fungerar det utan omräkningen borde det fungera så här. I annat fall skulle jag tippa på att det är fältnamnen som inte är korrekt. Det lilla jag använt PayPal har jag använt fältnamnet "amount" för summa och inte som i detta fall "amount_..." (vad nu strFooter innehåller).
Det var Lösningen! :)
Skäms nästan att fråga, men blir det bästa avrundning med 0,5?
Vet du om det finns svenska betalväxlar, som jag kan utnyttja på liknande vis? Gratis eller inte spelar inte så stor roll, bara de är bra och har stort förtroende bland folk.
parseInt huggar bara heltalsdelen av uttrycket. (parseInt(0.8) ger alltså 0 och inte 1, samma som Math.floor) Därför kompenserade jag med 0,5.
http://www.wallit.se är en svensk betalväxel som jag haft kontakt med. De fungerade bra och är enkla att ha att göra med.