2011-11-20 11 views
6

Witam Chciałbym utworzyć przycisk kupna Paypal, który ma ustawioną wartość dynamiczną. Chciałbym przekazać kwotę przez pole wprowadzania tekstu w formularzu i numer pozycji przez ukryte pole.Jak utworzyć przycisk PayPal z możliwymi do zastąpienia zmiennymi

Problem polega na tym, że kiedykolwiek robię, otrzymuję zaszyfrowany przycisk s-xclick ze strony PayPal. Ten przycisk nie zezwala na umieszczanie ukrytych zmiennych w formularzu.

Myślę, że potrzebuję przycisku xclick. Moim celem jest umożliwienie użytkownikom zwiększenia wewnętrznego kredytu mojej witryny.

EDIT (przesuwając dodatek na pytanie z odpowiedzią na pytanie) (stąd @tokam:

Aby dodać do dyskusji, chciałbym pokazać moją obecną rozwiązanie problemu:

Tutaj mamy trochę walidacji Javascript, który pomaga użytkownikowi na wejście. Uznają, że otwiera schowek na sukces

function validatePaypalForm() 
{ 
    var val = $('#paypalPaymentAmount').val().replace(/\s*$/, "").replace(/,/ , ".").replace(/€$/, ""); 
    var errormsg = ''; 
    var ret, amountField; 
    if(val==='' || isNaN(parseFloat(val)) || !isFinite(val)) 
    { 
     errormsg = 'Bitte geben Sie einen gültigen Betrag an'; 
}else if(parseFloat(val) < <?php echo $this->minimum?> ) 
{ 
    errormsg = 'Das Einzahlungsminimum betr&auml;gt <?php echo $this->minimum?>&euro;'; 
} 

ret = (errormsg === ''); 


amountField = $('#paypalAmountField'); 
if(ret) 
{ 
    amountField.removeClass('error');  
    $('#paypalAmountErrorMessage').html('&nbsp;'); 
    $('#paypalPaymentAmount').val(val); 
    fb.start( 
     '<p><strong>Sie werden in kürze zur Seite von Paypal weitergeleitet.</strong></p>', 
     'width:700 showPrint:false modal:true showClose:false showOuterClose:true showItemNumber:false closeOnNewWindow:false outsideClickCloses:true innerBorder:0 imageClickCloses:false scrolling: no' 
    ); 

}else{ 
    amountField.addClass('error'); 
    $('#paypalAmountErrorMessage').html(errormsg); 
} 

return ret; 

} Nadchodzi teraz mój przycisk. kwestie mam ze są np, że to jest łatwe dla t on, aby ustawić inny kod waluty. Mogę sobie z tym poradzić w moim słuchaczu IPN, zwracając pieniądze. Czy są inne problemy związane z niezaszyfrowanym, zmiennym przyciskiem?

<form onsubmit="return validatePaypalForm();" class="stn-form" action="https://www.paypal.com/cgi-bin/webscr" method="post"> 
<fieldset id="fieldset-p"><legend><span>2.</span>myproject Guthaben aufladen per Paypal Zahlung</legend> 
<div id='paypalAmountField' class="field"> 
<label for='paypalPaymentAmount' >Betrag &euro;:</label> 
<input id='paypalPaymentAmount' type="text" name='amount' value='' /> 
<span style='display:block;' id='paypalAmountErrorMessage' class='errorText'>'&nbsp;</span> 

</div> 
<input type="hidden" name="cmd" value="_xclick"> 
<input type="hidden" name="business" value="THE_ID_OF_MY_CLIENT"> 
<input type="hidden" name="lc" value="DE"> 
<input type="hidden" name="item_name" value="myproject Advertiser Vorkasse"> 
<input type="hidden" name='item_number' value="11500"> 
<input type="hidden" name="currency_code" value="EUR"> 
<input type="hidden" name="button_subtype" value="services"> 
<input type="hidden" name="no_note" value="1"> 
<input type="hidden" name="no_shipping" value="1"> 
<input type="hidden" name="bn" value="PP-BuyNowBF:btn_paynowCC_LG.gif:NonHosted"> 
<input type="hidden" name="rm" value="1"> 
<input type="hidden" name='cbt' value="Zu myproject.de zur&uuml;ckkehren"> 
<input type="hidden" name="currency_code" value="EUR"> 
<input type="hidden" name="return" value="http://myproject.somedomain.net/advertiser/guthaben-aufladen/ret/success" /> 
<input type="hidden" name="cancel_ return" value="http://myproject.somedomain.net/advertiser/guthaben-aufladen/ret/canceled" /> 
<div class="actionrow"> 

<input type="image" src="https://www.paypalobjects.com/de_DE/DE/i/btn/btn_paynowCC_LG.gif" border="0" name="submit" alt="Jetzt einfach, schnell und sicher online bezahlen – mit PayPal."> 
<img alt="" border="0" src="https://www.paypalobjects.com/de_DE/i/scr/pixel.gif" width="1" height="1"> 
</div> 
</fieldset> 
</form> 
+0

co próbowaliście? jakie są wyniki? czy spodziewasz się, że ktoś inny napisze to za Ciebie? –

+0

Czy rzeczywiście rozumiesz, że nie pytam o kod? Pytam o funkcję na stronie internetowej paypal, aby utworzyć przycisk bez hostingu lub zezwolić na Xmick typu cmd zamiast s-xclick !!!! –

+1

proste wyszukiwanie w Internecie by Ci to dało! – alonisser

Odpowiedz

9

Powodem, dla którego nie możesz przesłonić kwoty dynamicznie, jest to, że masz tak zwany "przycisk hostowany przez PayPal".
Za pomocą hostowanego przycisku kwota jest przechowywana po stronie PayPal i nie można jej zastąpić zmienną "amount". Będziesz chciał użyć przycisku, który nie jest hostowany, lub użyć wywołania API BMUpdateButton, aby dynamicznie aktualizować kwotę przycisku.
Aby użyć przycisku, który nie jest hostowany, po prostu znajdź "Krok 2" w narzędziu do tworzenia przycisków i odznacz przycisk "Host w systemie PayPal".

Opcja 2: Nadal korzystaj z hostowanego przycisku i użyj API BMUpdateButton, aby zaktualizować kwotę.Przykładowy wniosek o BMUpdateButton będzie wyglądać następująco:

USER=Your API username 
PWD=Your API password 
SIGNATURE=Your API signature 
VERSION=82.0 
HOSTEDUBTTONID=The value of <input type="hidden" name="hosted_button_id" value=""> 
BUTTONTYPE=The type of button. E.g. BUYNOW 
BUTTONCODE=The type of code you want to get back. E.g. HOSTED 
L_BUTTONVAR0=amount=The new amount with a period as separator 
L_BUTTONVAR1=item_name=Optional: a new item name if you wish 

Similary, można również użyć BMCreateButton API, aby utworzyć nowy przycisk lub użyj BMButtonSearch API przeglądać listę wszystkich zapisanych umieszczonych przycisków (do znajdź na przykład przycisk hosted_button swojego przycisku, na przykład)

Powodem użycia hostowanego przycisku jest to, że jest bezpieczniejszy. Niezamówiony, niezaszyfrowany przycisk zasadniczo pozostawiłby kwoty otwarte na manipulację. Oszukańcze transakcje czekają na realizację.

+0

Chcę, aby użytkownik mógł wpisać kwotę, ale najlepiej, aby upewnić się, że kod waluty nie został zmieniony przez użytkownika . Myślę, że to niesprawiedliwe, że głosowali na moje pytanie. To nie jest zbyt proste i szukałem go przez kilka godzin. –

+0

Powyższa odpowiedź nadal obowiązuje. Możesz pozwolić kupującemu wpisać kwotę, a następnie przyjąć tę kwotę, zadzwonić do API BMCReateButton, wysłać kwotę, uzyskać hosted_button_id i przekierować kupującego do PayPal (https://www.paypal.com/cgi-bin/webscr? cmd = _s-xclick & hosted_button_id = response_for_hosted_button_id_here) – Robert

+0

Zaimplementowałem rozwiązanie niezaszyfrowane, ale doświadczyłem, że możliwe jest zmodyfikowanie kodu waluty przez zmianę wartości posta. Mogłem to teraz złapać w moim słuchaczu ipn i zwrócić pieniądze w tej sprawie, ale zamierzam poświęcić trochę czasu, aby spróbować zaimplementować twoje rozwiązanie. Co myślisz? Potrzebuję zwrotu pieniędzy za pomocą mydła lub nvp. Pokażę ci, co już mam. –

2

Nie powinieneś używać xclick, który nie jest zaszyfrowany. sposób, w jaki to rozwiązałem, to używanie paypal button api - z jakimś buforowaniem w kliencie, aby za każdym razem nie wykonywać całej odpowiedzi żądania HTTP.

nuta że paypal wykorzystuje 2 rodzaje API - z NVP który jest rodzajem spokojny (też nie do końca) i SOAP (użyłem metody NVP)

można również wygenerować zaszyfrowane przycisk na serwerze za pomocą openssl - ale biegnę do nierozwiązywalnych problemów z tej metody i nie mógł uzyskać żadnej pomocy dla że albo tutaj lub w paypal strasznych forach programistycznych

edit: problem z przyciskami nie są szyfrowane przy użyciu Firebug, że ktoś (nie mówić o bardziej zaawansowanych narzędziach) może uniknąć płatności i zmienić koszt itp. "

Jeśli nalegasz w tym kierunku, możesz użyć prostego formularza html z paypal, aby utworzyć ten przycisk. robisz to w witrynie PayPal i tworzysz niezaszyfrowany przycisk, a następnie edytujesz kod HTML i zmieniasz potrzebne pole na <?php $variable?>. Zdecydowanie doradziłbym przeciw tej drodze.

+0

Jaki jest twój postęp w używaniu api? jakie jest ryzyko niezaszyfrowanych przycisków? na 1aandroid.de uruchamiam niezaszyfrowany przycisk, który działa dobrze, ale jest to przycisk darowizny i zapomniałem, jak udało mi się go zdobyć bez api i bez s-xclick np. tutaj http://www.1a-android.de/android-spiele/farm-story-nachbarn/ –

+0

Znalazłem to teraz http://support.qualityunit.com/knowledgebase/post-affiliate-pro/tips-tricks /how-to-create-paypal-non-hosted-non-encrypted-buttons.html , ale nie jestem pewien, czy jest wystarczająco bezpieczny w ten sposób. Muszę sprawdzić, czy kod waluty nie zostanie zmieniony przez użytkownika. –

+0

to jest niezabezpieczona, niezaszyfrowana droga! ale to zadziała, próbowałem go. – alonisser

0

myślę, że to może pracować dla Ciebie, jeśli aktualizować ... „[email protected]” ... to nie szyfrowane i wciąż wydaje się gospodarzem na stronie PayPal za wyczyszczenie

upuść: Wartość =” my_default_price " jeśli chcesz, aby użytkownik wprowadził go do pustego pola tekstowego ... na moją stronę, ceny są powiązane z ceną złota, więc muszę dynamicznie aktualizować zmienną" kwota "i po prostu pozostawić wartość =

<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> 
<input type="hidden" name="cmd" value="_xclick"> 
<input type="hidden" name="business" value="[email protected]"> 
<input type="hidden" name="item_name" value="example description"> 
<input type="hidden" name="item_number" value=""> 
<input type="text" name="amount" value="my_default_price"> 
<input type="hidden" name="no_shipping" value="1"> 
<input type="hidden" name="return" value="http://www.yoursite.com/returnpage.php"> 
<input type="hidden" name="currency_code" value="USD"> 
<input type="hidden" name="lc" value="US"> 
<input type="hidden" name="bn" value="PP-BuyNowBF"> 
<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but02.gif" border="0" name="submit" alt="Make your payments with PayPal. It is free, secure, effective."> 
<img alt="" border="0" src="https://www.paypal.com/it_IT/i/scr/pixel.gif" width="1" height="1"> 
</form> 
Powiązane problemy