docs: def signature(self):
          """
          Compute the ORDER_HASH of the request.
  
          The hashable string is composed by getting the values from:
              MERCHANT
              ORDER_REF
              ORDER_DATE
              ORDER_PNAME[]
              ORDER_PCODE[]
              ORDER_PINFO[]
              ORDER_PRICE[]
              ORDER_QTY[]
              ORDER_VAT[]
              ORDER_SHIPPING
              PRICES_CURRENCY
              DISCOUNT
              DESTINATION_CITY
              DESTINATION_STATE
              DESTINATION_COUNTRY
              PAY_METHOD
              ORDER_PRICE_TYPE[]
              SELECTED_INSTALLMENTS_NO
              TESTORDER
          in this exact order. Next, we need to concatenate their lenghts with
          thier values, resulting in a string like:
  
          8PAYUDEMO9789456123192016-10-05 11:12:279CD Player12MobilePhone6Laptop
          10PROD_0489110PROD_0740910PROD_0496527Extended Warranty - 5 Years8
          Dual SIM1117"Display482.371945.7545230171311220220220103RON2559
          Bucuresti9Bucuresti2RO8CCVISAMC5GROSS5GROSS5GROSS4TRUE
  
          Using this string and the MERCHANT_KEY, we compute the HMAC.
          """
  
          hashable_fields = ['MERCHANT', 'ORDER_REF', 'ORDER_DATE',
                             'ORDER_SHIPPING', 'PRICES_CURRENCY', 'DISCOUNT',
                             'DESTINATION_CITY', 'DESTINATION_STATE',
                             'DESTINATION_COUNTRY', 'PAY_METHOD',
                             'SELECTED_INSTALLMENTS_NO', 'TESTORDER']
          result = text_type()
  
          # We need this hack since payU is not consistent
          # with the order of fields in hash string
  
          suffix = text_type()
          for field in self:
              if field.name == 'ORDER_HASH':
                  continue
  
              field_value = field.value()
  
              if field.name in hashable_fields and field_value:
                  encoded_value = text_type('{length}{value}').format(
                      length=len(text_type(field_value).encode('utf-8')), value=field_value
                  )
                  if field.name == 'TESTORDER' or \
                      field.name == 'SELECTED_INSTALLMENTS_NO':
                      suffix += encoded_value
                  else:
                      result += encoded_value
  
              if field.name == 'ORDER':
                  for detail in PAYU_ORDER_DETAILS:
                      if any([detail in order and order[detail]
                              for order in field_value]):
  
                          for order in field_value:
                              value = order.get(detail, '')
  
                              item = text_type('{length}{value}').format(
                                  length=len(text_type(value).encode('utf-8')), value=value
                              )
  
                              if detail == 'PRICE_TYPE':
                                  suffix += item
                              else:
                                  result += item
  
          result += suffix
          result = result.encode('utf-8')
          return hmac.new(PAYU_MERCHANT_KEY, result).hexdigest()