webForumDet fria alternativet

Scriptproblem

JavaScript

7 svar · 441 visningar · startad av kbking

Medlem sedan mars 2003168 inlägg
Frågan#1

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.

Medlem sedan mars 2003168 inlägg
#2

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.

Medlem sedan juni 20004 308 inlägg
#3
strOutput += "<input type=hidden name=\"amount_" + strFooter + "\" value=\"" + (parseFloat(fields[2])*0.1089) + "\">";

Förutsatt att resten av koden är korrekt.

Medlem sedan mars 2003168 inlägg
#4

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."

Medlem sedan juni 20004 308 inlägg
#5

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).

Medlem sedan mars 2003168 inlägg
#6

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.

Medlem sedan juni 20004 308 inlägg
#7

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.

Medlem sedan mars 2003168 inlägg
#8

Tack för svaret!

Då går jag in på deras sida och tar en närmare titt. :)

412 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
277 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)