code: def doDirectPayment(self, params):
          
          defaults = {"method": "DoDirectPayment", "paymentaction": "Sale"}
          required = ["creditcardtype",
                      "acct",
                      "expdate",
                      "cvv2",
                      "ipaddress",
                      "firstname",
                      "lastname",
                      "street",
                      "city",
                      "state",
                      "countrycode",
                      "zip",
                      "amt",
                      ]
          nvp_obj = self._fetch(params, required, defaults)
          if nvp_obj.flag:
              raise PayPalFailure(nvp_obj.flag_info, nvp=nvp_obj)
          # @@@ Could check cvv2match / avscode are both 'X' or '0'
          # qd = django.http.QueryDict(nvp_obj.response)
          # if qd.get('cvv2match') not in ['X', '0']:
          #   nvp_obj.set_flag("Invalid cvv2match: %s" % qd.get('cvv2match')
          # if qd.get('avscode') not in ['X', '0']:
          #   nvp_obj.set_flag("Invalid avscode: %s" % qd.get('avscode')
          return nvp_obj
docs: Call PayPal DoDirectPayment method.