def get_token_url(self, amount):
        """
        Get the URL, including token, to use for accessing Paypal.
        
        @param amount     Amount of sale
        
        @return           URL
        """

        data = self.credentials.copy()
        data.update({
            'METHOD' : 'SetExpressCheckout',
            'RETURNURL' : self.settings.return_url,
            'CANCELURL' : self.settings.cancel_url,
            'AMT' : amount,
            'NOSHIPPING' : '1',
            })

        response = self.get_url(urllib.urlencode(data))
        if 'TOKEN' not in response:
            raise invalid_response_exception(str(response) + str(data))

        token = paypal_ec_token(token = response['TOKEN'], amount = amount,
                                time=datetime.utcnow())
        token.save()

        # the 'useraction=commit' makes the paypal site appear to complete the transaction with
        # something like a "Pay Now" button, instead of sending the user back to us to review
        # the details before submitting a payment
        return token.token, '%s&useraction=commit&token=%s' % (settings.express_checkout_url,
                                                               token.token)
 def test_cleanup_paypal_ec_tokens(self):
     # make some Paypal express checkout tokens in the db
     ec_tokens = [models.paypal_ec_token(amount='$100.00', token='1',
                      time=(datetime.utcnow() - timedelta(hours=4))),
                  models.paypal_ec_token(amount='$110.00', token='2',
                      time=(datetime.utcnow() - timedelta(hours=3, minutes=30))),
                  models.paypal_ec_token(amount='$120.00', token='3',
                      time=(datetime.utcnow() - timedelta(hours=3))),
                  models.paypal_ec_token(amount='$130.00', token='4',
                      time=(datetime.utcnow() - timedelta(hours=2, minutes=30))),
                  models.paypal_ec_token(amount='$140.00', token='5',
                      time=(datetime.utcnow() - timedelta(hours=1))),
                  models.paypal_ec_token(amount='$150.00', token='6',
                      time=datetime.utcnow())]
     
     for ec_token in ec_tokens:
         ec_token.save()
 
     self.pu.cleanup_paypal_ec_tokens()
     self.assertEquals(models.paypal_ec_token.objects.count(), 3)
     self.assertEquals(models.paypal_ec_token.objects.filter(token='4').count(), 1)
     self.assertEquals(models.paypal_ec_token.objects.filter(token='5').count(), 1)
     self.assertEquals(models.paypal_ec_token.objects.filter(token='6').count(), 1)