class PayPalPaymentsForm(forms.Form): """ Creates a PayPal Payments Standard "Buy It Now" button, configured for a selling a single item with no shipping. For a full overview of all the fields you can set (there is a lot!) see: http://tinyurl.com/pps-integration Usage: >>> f = PayPalPaymentsForm(initial={'item_name':'Widget 001', ...}) >>> f.render() u'<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> ...' """ CMD_CHOICES = (("_xclick", "Buy now or Donations"), ("_cart", "Shopping cart"), ("_xclick-subscriptions", "Subscribe")) SHIPPING_CHOICES = ((1, "No shipping"), (0, "Shipping")) NO_NOTE_CHOICES = ((1, "No Note"), (0, "Include Note")) RECURRING_PAYMENT_CHOICES = ((1, "Subscription Payments Recur"), (0, "Subscription payments do not recur")) REATTEMPT_ON_FAIL_CHOICES = ((1, "reattempt billing on Failure"), (0, "Do Not reattempt on failure")) # Where the money goes. business = forms.CharField(widget=ValueHiddenInput(), initial=RECEIVER_EMAIL) # Item information. amount = forms.IntegerField(widget=ValueHiddenInput()) item_name = forms.CharField(widget=ValueHiddenInput()) item_number = forms.CharField(widget=ValueHiddenInput()) quantity = forms.CharField(widget=ValueHiddenInput()) # Subscription Related. a3 = forms.CharField(widget=ValueHiddenInput()) # Subscription Price p3 = forms.CharField(widget=ValueHiddenInput()) # Subscription Duration t3 = forms.CharField(widget=ValueHiddenInput()) # Subscription unit of Duration, default to Month src = forms.CharField(widget=ValueHiddenInput()) # Is billing recurring? default to yes sra = forms.CharField(widget=ValueHiddenInput()) # Reattempt billing on failed cc transaction no_note = forms.CharField(widget=ValueHiddenInput()) # Localization / PayPal Setup lc = forms.CharField(widget=ValueHiddenInput()) page_style = forms.CharField(widget=ValueHiddenInput()) cbt = forms.CharField(widget=ValueHiddenInput()) # IPN control. notify_url = forms.CharField(widget=ValueHiddenInput()) cancel_return = forms.CharField(widget=ValueHiddenInput()) return_url = forms.CharField(widget=ReservedValueHiddenInput(attrs={"name":"return"})) custom = forms.CharField(widget=ValueHiddenInput()) invoice = forms.CharField(widget=ValueHiddenInput()) # Default fields. cmd = forms.ChoiceField(widget=forms.HiddenInput(), initial=CMD_CHOICES[0][0]) charset = forms.CharField(widget=forms.HiddenInput(), initial="utf-8") currency_code = forms.CharField(widget=forms.HiddenInput(), initial="USD") no_shipping = forms.ChoiceField(widget=forms.HiddenInput(), choices=SHIPPING_CHOICES, initial=SHIPPING_CHOICES[0][0]) def __init__(self, button_type="buy", *args, **kwargs): super(PayPalPaymentsForm, self).__init__(*args, **kwargs) self.button_type = button_type def render(self): return mark_safe(u"""<form action="%s" method="post"> %s <input type="image" src="%s" border="0" name="submit" alt="Buy it Now" /> </form>""" % (self.get_endpoint(), self.as_p(), self.get_image())) def get_endpoint(self): if TEST: return SANDBOX_POSTBACK_ENDPOINT else: return POSTBACK_ENDPOINT def get_image(self): return {(True, True): SUBSCRIPTION_SANDBOX_IMAGE, (True, False): SANDBOX_IMAGE, (False, True): SUBSCRIPTION_IMAGE, (False, False): IMAGE}[TEST, self.is_subscription()] def is_transaction(self): return self.button_type == "buy" def is_subscription(self): return self.button_type == "subscribe"
class PayPalPaymentsForm(forms.Form): """ Creates a PayPal Payments Standard "Buy It Now" button, configured for a selling a single item with no shipping. For a full overview of all the fields you can set (there is a lot!) see: http://tinyurl.com/pps-integration Usage: >>> f = PayPalPaymentsForm(initial={'item_name':'Widget 001', ...}) >>> f.render() u'<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> ...' """ CMD_CHOICES = (("_xclick", "Buy now or Donations"), ("_donations", "Donations"), ("_cart", "Shopping cart"), ("_xclick-subscriptions", "Subscribe")) SHIPPING_CHOICES = ((1, "No shipping"), (0, "Shipping")) NO_NOTE_CHOICES = ((1, "No Note"), (0, "Include Note")) RECURRING_PAYMENT_CHOICES = ((1, "Subscription Payments Recur"), (0, "Subscription payments do not recur")) REATTEMPT_ON_FAIL_CHOICES = ((1, "reattempt billing on Failure"), (0, "Do Not reattempt on failure")) BUY = 'buy' SUBSCRIBE = 'subscribe' DONATE = 'donate' # Where the money goes, business = forms.CharField(widget=ValueHiddenInput(), initial=RECEIVER_EMAIL) # Item information. amount = forms.IntegerField(widget=ValueHiddenInput()) item_name = forms.CharField(widget=ValueHiddenInput()) item_number = forms.CharField(widget=ValueHiddenInput()) quantity = forms.CharField(widget=ValueHiddenInput()) # Subscription Related. a1 = forms.CharField(widget=ValueHiddenInput()) # Trial 1 Price p1 = forms.CharField(widget=ValueHiddenInput()) # Trial 1 Duration t1 = forms.CharField(widget=ValueHiddenInput() ) # Trial 1 unit of Duration, default to Month a2 = forms.CharField(widget=ValueHiddenInput()) # Trial 2 Price p2 = forms.CharField(widget=ValueHiddenInput()) # Trial 2 Duration t2 = forms.CharField(widget=ValueHiddenInput() ) # Trial 2 unit of Duration, default to Month a3 = forms.CharField(widget=ValueHiddenInput()) # Subscription Price p3 = forms.CharField(widget=ValueHiddenInput()) # Subscription Duration t3 = forms.CharField(widget=ValueHiddenInput() ) # Subscription unit of Duration, default to Month src = forms.CharField( widget=ValueHiddenInput()) # Is billing recurring? default to yes sra = forms.CharField(widget=ValueHiddenInput() ) # Reattempt billing on failed cc transaction no_note = forms.CharField(widget=ValueHiddenInput()) # Can be either 1 or 2. 1 = modify or allow new subscription creation, 2 = modify only modify = forms.IntegerField(widget=ValueHiddenInput() ) # Are we modifying an existing subscription? # Localization / PayPal Setup lc = forms.CharField(widget=ValueHiddenInput()) page_style = forms.CharField(widget=ValueHiddenInput()) cbt = forms.CharField(widget=ValueHiddenInput()) # IPN control. notify_url = forms.CharField(widget=ValueHiddenInput()) cancel_return = forms.CharField(widget=ValueHiddenInput()) return_url = forms.CharField(widget=ReservedValueHiddenInput( attrs={"name": "return"})) invoice = forms.CharField(widget=ValueHiddenInput()) #Invoice is added tot he payplak IPN - it is in paypal.standard.forms.py - #adding host and enduser email form-- can't do this.. not registered #host_email = forms.CharField(widget=ValueHiddenInput()) #enduser_email = forms.CharField(widget=ValueHiddenInput()) custom = forms.CharField(widget=ValueHiddenInput()) receiver_id = forms.CharField(widget=ValueHiddenInput()) # Default fields. cmd = forms.ChoiceField(widget=forms.HiddenInput(), initial=CMD_CHOICES[0][0]) charset = forms.CharField(widget=forms.HiddenInput(), initial="utf-8") currency_code = forms.CharField(widget=forms.HiddenInput(), initial="USD") no_shipping = forms.ChoiceField(widget=forms.HiddenInput(), choices=SHIPPING_CHOICES, initial=SHIPPING_CHOICES[0][0]) def __init__(self, button_type="buy", *args, **kwargs): super(PayPalPaymentsForm, self).__init__(*args, **kwargs) self.button_type = button_type if 'initial' in kwargs: # Dynamically create, so we can support everything PayPal does. for k, v in kwargs['initial'].items(): if k not in self.base_fields: self.fields[k] = forms.CharField(label=k, widget=ValueHiddenInput(), initial=v) def test_mode(self): return getattr(settings, 'PAYPAL_TEST', True) def get_endpoint(self): "Returns the endpoint url for the form." if self.test_mode(): return SANDBOX_POSTBACK_ENDPOINT else: return POSTBACK_ENDPOINT def render(self): return mark_safe(u"""<form action="%s" method="post"> %s <input type="image" class="paypal" src="%s" border="0" name="submit" alt="Buy it Now" /> </form>""" % (self.get_endpoint(), self.as_p(), self.get_image())) #JMY - may need to add height and width dimensions.. or alter the image.., JB had width="122" height="40" #JMY: the SRC above renders as... https://www.sandbox.paypal.com/en_US/i/btn/btn_buynowCC_LG.gif # the URL is defined in paypal/standard/conf.py under SANDBOX_IMAGE #I want to redirect to John's image, which is at: src="/static/blocbox/images/paypal.png" def sandbox(self): "Deprecated. Use self.render() instead." import warnings warnings.warn( """PaypalPaymentsForm.sandbox() is deprecated. Use the render() method instead.""", DeprecationWarning) return self.render() def get_image(self): return { (True, self.SUBSCRIBE): SUBSCRIPTION_SANDBOX_IMAGE, (True, self.BUY): JB_PAYPAL_IMAGE, #SANDBOX_IMAGE, #defined in conf.py as "https://www.sandbox.paypal.com/en_US/i/btn/btn_buynowCC_LG.gif") (True, self.DONATE): DONATION_SANDBOX_IMAGE, (False, self.SUBSCRIBE): SUBSCRIPTION_IMAGE, (False, self.BUY): IMAGE, (False, self.DONATE): DONATION_IMAGE, }[self.test_mode(), self.button_type] def is_transaction(self): return not self.is_subscription() def is_donation(self): return self.button_type == self.DONATE def is_subscription(self): return self.button_type == self.SUBSCRIBE
class PayPalPaymentsForm(forms.Form): """ Creates a PayPal Payments Standard "Buy It Now" button, configured for a selling a single item with no shipping. For a full overview of all the fields you can set (there is a lot!) see: http://tinyurl.com/pps-integration Usage: >>> f = PayPalPaymentsForm(initial={'item_name':'Widget 001', ...}) >>> f.render() u'<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> ...' """ CMD_CHOICES = ( ("_xclick", "Buy now or Donations"), ("_cart", "Shopping cart"), ("_xclick-subscriptions", "Subscribe") ) SHIPPING_CHOICES = ((1, "No shipping"), (0, "Shipping")) NO_NOTE_CHOICES = ((1, "No Note"), (0, "Include Note")) RECURRING_PAYMENT_CHOICES = ( (1, "Subscription Payments Recur"), (0, "Subscription payments do not recur") ) REATTEMPT_ON_FAIL_CHOICES = ( (1, "reattempt billing on Failure"), (0, "Do Not reattempt on failure") ) BUY = 'buy' SUBSCRIBE = 'subscribe' DONATE = 'donate' # Where the money goes. business = forms.CharField(widget=ValueHiddenInput(), initial=RECEIVER_EMAIL) # Item information. amount = forms.IntegerField(widget=ValueHiddenInput()) item_name = forms.CharField(widget=ValueHiddenInput()) item_number = forms.CharField(widget=ValueHiddenInput()) quantity = forms.CharField(widget=ValueHiddenInput()) # Subscription Related. a1 = forms.CharField(widget=ValueHiddenInput()) # Trial 1 Price p1 = forms.CharField(widget=ValueHiddenInput()) # Trial 1 Duration t1 = forms.CharField(widget=ValueHiddenInput()) # Trial 1 unit of Duration, default to Month a2 = forms.CharField(widget=ValueHiddenInput()) # Trial 2 Price p2 = forms.CharField(widget=ValueHiddenInput()) # Trial 2 Duration t2 = forms.CharField(widget=ValueHiddenInput()) # Trial 2 unit of Duration, default to Month a3 = forms.CharField(widget=ValueHiddenInput()) # Subscription Price p3 = forms.CharField(widget=ValueHiddenInput()) # Subscription Duration t3 = forms.CharField(widget=ValueHiddenInput()) # Subscription unit of Duration, default to Month src = forms.CharField(widget=ValueHiddenInput()) # Is billing recurring? default to yes sra = forms.CharField(widget=ValueHiddenInput()) # Reattempt billing on failed cc transaction no_note = forms.CharField(widget=ValueHiddenInput()) # Can be either 1 or 2. 1 = modify or allow new subscription creation, 2 = modify only modify = forms.IntegerField(widget=ValueHiddenInput()) # Are we modifying an existing subscription? # Localization / PayPal Setup lc = forms.CharField(widget=ValueHiddenInput()) page_style = forms.CharField(widget=ValueHiddenInput()) cbt = forms.CharField(widget=ValueHiddenInput()) # IPN control. notify_url = forms.CharField(widget=ValueHiddenInput()) cancel_return = forms.CharField(widget=ValueHiddenInput()) return_url = forms.CharField(widget=ReservedValueHiddenInput(attrs={"name":"return"})) custom = forms.CharField(widget=ValueHiddenInput()) invoice = forms.CharField(widget=ValueHiddenInput()) # Default fields. cmd = forms.ChoiceField(widget=forms.HiddenInput(), initial=CMD_CHOICES[0][0]) charset = forms.CharField(widget=forms.HiddenInput(), initial="utf-8") currency_code = forms.CharField(widget=forms.HiddenInput(), initial="USD") no_shipping = forms.ChoiceField(widget=forms.HiddenInput(), choices=SHIPPING_CHOICES, initial=SHIPPING_CHOICES[0][0]) def __init__(self, button_type="buy", extra_fields={}, *args, **kwargs): super(PayPalPaymentsForm, self).__init__(*args, **kwargs) self.button_type = button_type self.extra_fields = extra_fields def render(self): extra_fields = u''.join(['<input type="hidden" name="%s" value="%s" />' % \ (escape(name), escape(value)) for name, value in self.extra_fields.iteritems()]) return mark_safe(FORM_HTML % (POSTBACK_ENDPOINT, self.as_p(), extra_fields, self.get_image())) def sandbox(self): extra_fields = u''.join(['<input type="hidden" name="%s" value="%s" />' % \ (escape(name), escape(value)) for name, value in self.extra_fields.iteritems()]) return mark_safe(FORM_HTML % (SANDBOX_POSTBACK_ENDPOINT, self.as_p(), extra_fields, self.get_image())) def get_image(self): return { (True, self.SUBSCRIBE): SUBSCRIPTION_SANDBOX_IMAGE, (True, self.BUY): SANDBOX_IMAGE, (True, self.DONATE): DONATION_SANDBOX_IMAGE, (False, self.SUBSCRIBE): SUBSCRIPTION_IMAGE, (False, self.BUY): IMAGE, (False, self.DONATE): DONATION_IMAGE, }[TEST, self.button_type] def is_transaction(self): return not self.is_subscription() def is_donation(self): return self.button_type == self.DONATE def is_subscription(self): return self.button_type == self.SUBSCRIBE
class PayPalPaymentsForm(forms.Form): """ Creates a PayPal Payments Standard "Buy It Now" button, configured for a selling a single item with no shipping. For a full overview of all the fields you can set (there is a lot!) see: http://tinyurl.com/pps-integration Usage: >>> f = PayPalPaymentsForm(initial={'item_name':'Widget 001', ...}) >>> f.render() u'<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> ...' """ CMD_CHOICES = (("_xclick", "Buy now or Donations"), ("_donations", "Donations"), ("_cart", "Shopping cart"), ("_xclick-subscriptions", "Subscribe")) SHIPPING_CHOICES = ((1, "No shipping"), (0, "Shipping")) NO_NOTE_CHOICES = ((1, "No Note"), (0, "Include Note")) RECURRING_PAYMENT_CHOICES = ((1, "Subscription Payments Recur"), (0, "Subscription payments do not recur")) REATTEMPT_ON_FAIL_CHOICES = ((1, "reattempt billing on Failure"), (0, "Do Not reattempt on failure")) BUY = 'buy' SUBSCRIBE = 'subscribe' DONATE = 'donate' # Where the money goes. business = forms.CharField(widget=ValueHiddenInput()) # Item information. amount = forms.IntegerField(widget=ValueHiddenInput()) item_name = forms.CharField(widget=ValueHiddenInput()) item_number = forms.CharField(widget=ValueHiddenInput()) quantity = forms.CharField(widget=ValueHiddenInput()) # Subscription Related. a1 = forms.CharField(widget=ValueHiddenInput()) # Trial 1 Price p1 = forms.CharField(widget=ValueHiddenInput()) # Trial 1 Duration t1 = forms.CharField(widget=ValueHiddenInput() ) # Trial 1 unit of Duration, default to Month a2 = forms.CharField(widget=ValueHiddenInput()) # Trial 2 Price p2 = forms.CharField(widget=ValueHiddenInput()) # Trial 2 Duration t2 = forms.CharField(widget=ValueHiddenInput() ) # Trial 2 unit of Duration, default to Month a3 = forms.CharField(widget=ValueHiddenInput()) # Subscription Price p3 = forms.CharField(widget=ValueHiddenInput()) # Subscription Duration t3 = forms.CharField(widget=ValueHiddenInput() ) # Subscription unit of Duration, default to Month src = forms.CharField( widget=ValueHiddenInput()) # Is billing recurring? default to yes sra = forms.CharField(widget=ValueHiddenInput() ) # Reattempt billing on failed cc transaction no_note = forms.CharField(widget=ValueHiddenInput()) # Can be either 1 or 2. 1 = modify or allow new subscription creation, 2 = modify only modify = forms.IntegerField(widget=ValueHiddenInput() ) # Are we modifying an existing subscription? # Localization / PayPal Setup lc = forms.CharField(widget=ValueHiddenInput()) page_style = forms.CharField(widget=ValueHiddenInput()) cbt = forms.CharField(widget=ValueHiddenInput()) # IPN control. notify_url = forms.CharField(widget=ValueHiddenInput()) cancel_return = forms.CharField(widget=ValueHiddenInput()) return_url = forms.CharField(widget=ReservedValueHiddenInput( attrs={"name": "return"})) custom = forms.CharField(widget=ValueHiddenInput()) invoice = forms.CharField(widget=ValueHiddenInput()) # Default fields. cmd = forms.ChoiceField(widget=forms.HiddenInput(), initial=CMD_CHOICES[0][0]) charset = forms.CharField(widget=forms.HiddenInput(), initial="utf-8") currency_code = forms.CharField(widget=forms.HiddenInput(), initial="USD") no_shipping = forms.ChoiceField(widget=forms.HiddenInput(), choices=SHIPPING_CHOICES, initial=SHIPPING_CHOICES[0][0]) def __init__(self, button_type="buy", *args, **kwargs): super(PayPalPaymentsForm, self).__init__(*args, **kwargs) self.button_type = button_type if 'initial' in kwargs: kwargs['initial'] = self._fix_deprecated_paypal_receiver_email( kwargs['initial']) # Dynamically create, so we can support everything PayPal does. for k, v in kwargs['initial'].items(): if k not in self.base_fields: self.fields[k] = forms.CharField(label=k, widget=ValueHiddenInput(), initial=v) def _fix_deprecated_paypal_receiver_email(self, initial_args): if 'business' not in initial_args: if hasattr(settings, 'PAYPAL_RECEIVER_EMAIL'): warn( """The use of the settings.PAYPAL_RECEIVER_EMAIL is Deprecated. The keyword business argument must be given to PayPalPaymentsForm on creation""", DeprecationWarning) initial_args['business'] = settings.PAYPAL_RECEIVER_EMAIL return initial_args def test_mode(self): return getattr(settings, 'PAYPAL_TEST', True) def get_endpoint(self): "Returns the endpoint url for the form." if self.test_mode(): return SANDBOX_POSTBACK_ENDPOINT else: return POSTBACK_ENDPOINT def render(self): return format_html( u"""<form action="{0}" method="post"> {1} <input type="image" src="{2}" border="0" name="submit" alt="Buy it Now" /> </form>""", self.get_endpoint(), self.as_p(), self.get_image()) def sandbox(self): "Deprecated. Use self.render() instead." import warnings warnings.warn( """PaypalPaymentsForm.sandbox() is deprecated. Use the render() method instead.""", DeprecationWarning) return self.render() def get_image(self): return { (True, self.SUBSCRIBE): SUBSCRIPTION_SANDBOX_IMAGE, (True, self.BUY): SANDBOX_IMAGE, (True, self.DONATE): DONATION_SANDBOX_IMAGE, (False, self.SUBSCRIBE): SUBSCRIPTION_IMAGE, (False, self.BUY): IMAGE, (False, self.DONATE): DONATION_IMAGE, }[self.test_mode(), self.button_type] def is_transaction(self): warn_untested() return not self.is_subscription() def is_donation(self): warn_untested() return self.button_type == self.DONATE def is_subscription(self): warn_untested() return self.button_type == self.SUBSCRIBE
class PayPalPaymentsForm(forms.Form): """ Creates a PayPal Payments Standard "Buy It Now" button, configured for a selling a single item with no shipping. For a full overview of all the fields you can set (there is a lot!) see: http://tinyurl.com/pps-integration Usage: >>> f = PayPalPaymentsForm(initial={'item_name':'Widget 001', ...}) >>> f.render() u'<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> ...' """ CMD_CHOICES = (("_xclick", "Buy now or Donations"), ("_cart", "Shopping cart"), ("_xclick-subscriptions", "Subscribe")) SHIPPING_CHOICES = ((1, "No shipping"), (0, "Shipping")) NO_NOTE_CHOICES = ((1, "No Note"), (0, "Include Note")) RECURRING_PAYMENT_CHOICES = ((1, "Subscription Payments Recur"), (0, "Subscription payments do not recur")) REATTEMPT_ON_FAIL_CHOICES = ((1, "reattempt billing on Failure"), (0, "Do Not reattempt on failure")) # Where the money goes. business = forms.CharField(widget=ValueHiddenInput(), initial=RECEIVER_EMAIL) upload = forms.CharField(widget=forms.HiddenInput(), initial="1") # Item information. amount = forms.IntegerField(widget=ValueHiddenInput()) item_name = forms.CharField(widget=ValueHiddenInput()) item_number = forms.CharField(widget=ValueHiddenInput()) quantity = forms.CharField(widget=ValueHiddenInput()) # Subscription Related. a1 = forms.CharField(widget=ValueHiddenInput()) # Trial 1 Price p1 = forms.CharField(widget=ValueHiddenInput()) # Trial 1 Duration t1 = forms.CharField(widget=ValueHiddenInput() ) # Trial 1 unit of Duration, default to Month a2 = forms.CharField(widget=ValueHiddenInput()) # Trial 2 Price p2 = forms.CharField(widget=ValueHiddenInput()) # Trial 2 Duration t2 = forms.CharField(widget=ValueHiddenInput() ) # Trial 2 unit of Duration, default to Month a3 = forms.CharField(widget=ValueHiddenInput()) # Subscription Price p3 = forms.CharField(widget=ValueHiddenInput()) # Subscription Duration t3 = forms.CharField(widget=ValueHiddenInput() ) # Subscription unit of Duration, default to Month src = forms.CharField( widget=ValueHiddenInput()) # Is billing recurring? default to yes sra = forms.CharField(widget=ValueHiddenInput() ) # Reattempt billing on failed cc transaction no_note = forms.CharField(widget=ValueHiddenInput()) # Can be either 1 or 2. 1 = modify or allow new subscription creation, 2 = modify only modify = forms.IntegerField(widget=ValueHiddenInput() ) # Are we modifying an existing subscription? # Localization / PayPal Setup lc = forms.CharField(widget=ValueHiddenInput()) page_style = forms.CharField(widget=ValueHiddenInput()) cbt = forms.CharField(widget=ValueHiddenInput()) # IPN control. notify_url = forms.CharField(widget=ValueHiddenInput()) cancel_return = forms.CharField(widget=ValueHiddenInput()) return_url = forms.CharField(widget=ReservedValueHiddenInput( attrs={"name": "return"})) custom = forms.CharField(widget=ValueHiddenInput()) invoice = forms.CharField(widget=ValueHiddenInput()) handling_cart = forms.CharField(widget=ValueHiddenInput()) # Default fields. cmd = forms.ChoiceField(widget=forms.HiddenInput(), initial=CMD_CHOICES[1][0]) charset = forms.CharField(widget=forms.HiddenInput(), initial="utf-8") currency_code = forms.CharField(widget=forms.HiddenInput(), initial="GBP") def __init__(self, cart, button_type="buy", *args, **kwargs): order = kwargs.pop('order') super(PayPalPaymentsForm, self).__init__(*args, **kwargs) self.button_type = button_type custom_val = "" if order.delivery.price: self.fields['handling_cart'] = forms.CharField( widget=forms.HiddenInput(), initial=str(order.delivery.price)) for i, line in enumerate(cart): self.fields['amount_' + str(i + 1)] = forms.CharField( widget=forms.HiddenInput(), initial=str(line.item.total_price())) self.fields['item_name_' + str(i + 1)] = forms.CharField( widget=forms.HiddenInput(), initial=str(line.item.name)) self.fields['quantity_' + str(i + 1)] = forms.CharField( widget=forms.HiddenInput(), initial=str(line.quantity)) self.fields['custom'] = forms.CharField(widget=forms.HiddenInput(), initial=custom_val) def render(self): return mark_safe(u"""<form action="%s" method="post"> %s <button type="submit" id="buy-button" class="btn btn-success">BUY</button> </form>""" % (POSTBACK_ENDPOINT, self.as_p())) def sandbox(self): return mark_safe(u"""<form action="%s" method="post"> %s <button type="submit" id="buy-button" class="btn btn-success">BUY</button> </form>""" % (SANDBOX_POSTBACK_ENDPOINT, self.as_p())) def get_image(self): return { (True, True): SUBSCRIPTION_SANDBOX_IMAGE, (True, False): SANDBOX_IMAGE, (False, True): SUBSCRIPTION_IMAGE, (False, False): IMAGE }[TEST, self.is_subscription()] def is_transaction(self): return self.button_type == "buy" def is_subscription(self): return self.button_type == "subscribe"