code: def make_secret(form_instance, secret_fields=None):
      
      warn_untested()
      # @@@ Moved here as temporary fix to avoid dependancy on auth.models.
      # @@@ amount is mc_gross on the IPN - where should mapping logic go?
      # @@@ amount / mc_gross is not nessecarily returned as it was sent - how to use it? 10.00 vs. 10.0
      # @@@ the secret should be based on the invoice or custom fields as well - otherwise its always the same.
  
      # Build the secret with fields availible in both PaymentForm and the IPN. Order matters.
      if secret_fields is None:
          secret_fields = ['business', 'item_name']
  
      data = ""
      for name in secret_fields:
          if hasattr(form_instance, 'cleaned_data'):
              if name in form_instance.cleaned_data:
                  data += unicode(form_instance.cleaned_data[name])
          else:
              # Initial data passed into the constructor overrides defaults.
              if name in form_instance.initial:
                  data += unicode(form_instance.initial[name])
              elif name in form_instance.fields and form_instance.fields[name].initial is not None:
                  data += unicode(form_instance.fields[name].initial)
  
      secret = get_sha1_hexdigest(settings.SECRET_KEY, data)
      return secret
docs: Returns a secret for use in a EWP form or an IPN verification based on a
      selection of variables in params. Should only be used with SSL.