Exemple #1
0
  def post(self):
    '''start preapproval'''
    user = users.get_current_user()
    if not user:
      self.redirect(users.create_login_url(self.request.uri))

    amount = float(self.request.get( "amount" ))
    item = model.Preapproval( user=user, status="NEW", secret=util.random_alnum(16), amount=int(amount*100) )
    item.put()
    # get key
    preapproval = paypal.Preapproval(
      amount=amount,
      return_url="%s/success/%s/%s/" % ( self.request.uri, item.key(), item.secret ),
      cancel_url=self.request.uri,
      remote_address=self.request.remote_addr )
    
    item.debug_request = preapproval.raw_request
    item.debug_response = preapproval.raw_response
    item.put()

    if preapproval.status() == 'Success':
      item.status = 'CREATED'
      item.preapproval_key = preapproval.key()
      item.put()
      self.redirect( preapproval.next_url() ) # go to paypal
    else:
      item.status = 'ERROR'
      item.status_detail = 'Preapproval status was "%s"' % preapproval.status()
      item.put()

    path = os.path.join(os.path.dirname(__file__), 'templates/profile.htm')
    self.response.out.write(template.render(path, { 'message': 'An error occurred connecting to PayPal', 'user': user, 'profile': model.Profile.find( user ) } ))
Exemple #2
0
    def start_purchase(self, item):
        purchase = model.Purchase(item=item,
                                  purchaser=users.get_current_user(),
                                  status='NEW',
                                  secret=util.random_alnum(16))
        purchase.put()
        if settings.USE_IPN:
            ipn_url = "%s/ipn/%s/%s/" % (self.request.host_url, purchase.key(),
                                         purchase.secret)
        else:
            ipn_url = None
        pay = paypal.Pay(item.price_dollars(),
                         "%sreturn/%s/%s/" %
                         (self.request.uri, purchase.key(), purchase.secret),
                         "%scancel/%s/" % (self.request.uri, purchase.key()),
                         self.request.remote_addr,
                         ipn_url,
                         shipping=settings.SHIPPING)

        purchase.debug_request = pay.raw_request
        purchase.debug_response = pay.raw_response
        purchase.paykey = pay.paykey()
        purchase.put()

        if pay.status() == 'CREATED':
            purchase.status = 'CREATED'
            purchase.put()
            return (True, pay)
        else:
            purchase.status = 'ERROR'
            purchase.put()
            return (False, pay)
Exemple #3
0
    def _start_preapproval(self, ordernumber, partnername, myOrder):
        ''' start preapproval
        Rather than being associated with a user, each preapproval is associated with an order 

        item        : preapproval_model
        preapproval : preapproval_request

        '''

        amount = 200 # max payment to take, £
        item = model.Preapproval( order=myOrder.key, status="NEW", secret=util.random_alnum(16), amount=amount )
        item.put()

        # get key
        preapproval = paypal.Preapproval(
          amount=amount,
          return_url="%s/success/%s/%s/" % ( self.request.uri, item.key.id(), item.secret ),
          cancel_url="%s" % self.request.url,
          remote_address=self.request.remote_addr )

        item.debug_request = preapproval.raw_request
        item.debug_response = preapproval.raw_response
        item.put()

        print "item"
        print item

        if preapproval.status() == 'Success':
          item.status = 'CREATED'
          item.preapproval_key = preapproval.key()
          item.put()
          self.redirect( str(preapproval.next_url()) ) # go to paypal
        else:
          item.status = 'ERROR'
          item.status_detail = 'preapproval status was "%s"' % preapproval.status()
          item.put()

        template_values = {
            'message': 'An error occurred connecting to PayPal'
        }
        template = JINJA_ENVIRONMENT.get_template('templates/message.html')
        self.response.write(template.render(template_values))
Exemple #4
0
    def set_ExpressPurchase(self, item):
        purchase = model.Purchase(item=item,
                                  owner=item.owner,
                                  purchaser=users.get_current_user(),
                                  status='NEW',
                                  secret=util.random_alnum(16))
        purchase.put()

        ipn_url = None

        seller_paypal_email = None

        returnurl = "%sreturn/%s/%s/" % (self.request.uri, purchase.key(),
                                         purchase.secret)
        cancelurl = "%scancel/%s/" % (self.request.uri, purchase.key())

        #        pay = paypal.ExpressPay(
        #            item.price_dollars(),
        #            returnurl,
        #            cancelurl,
        #            self.request.remote_addr,
        #            seller_paypal_email,
        #            ipn_url,
        #            shipping=settings.SHIPPING)

        self.signature_values = {
            'USER': settings.PAYPAL_USERID,
            'PWD': settings.PAYPAL_PASSWORD,
            'SIGNATURE': settings.PAYPAL_SIGNATURE,
            'VERSION': '65.0',
        }
        self.API_ENDPOINT = 'https://api-3t.sandbox.paypal.com/nvp'
        self.PAYPAL_URL = 'https://www.sandbox.paypal.com/webscr&cmd=_express-checkout'
        self.signature = urllib.urlencode(self.signature_values) + "&"

        params = {'METHOD': 'SetExpressCheckout'}
        expressParams = {
            'PAYMENTREQUEST_0_AMT': '%0.2f' % item.price_dollars(),
            'PAYMENTREQUEST_0_CURRENCYCODE': 'USD',
            'PAYMENTREQUEST_0_PAYMENTACTION': 'Sale',
            'RETURNURL': returnurl,
            'CANCELURL': cancelurl
        }
        params_string = self.signature + urllib.urlencode(
            params) + "&" + urllib.urlencode(expressParams)

        self.raw_response = urllib.urlopen(self.API_ENDPOINT, params_string)
        self.response_content = self.raw_response.read()

        logging.debug(self.request.uri)
        logging.debug(self.request.remote_addr)

        data = self.API_ENDPOINT + params_string
        purchase.debug_request = json.dumps(data)
        purchase.debug_response = self.response_content

        res = urllib.unquote(self.response_content)
        datares = dict(
            (n, v) for n, v in (a.split('=') for a in res.split('&')))
        logging.debug(datares)
        ret_url = ""
        if datares['ACK'] == 'Success':
            purchase.paykey = datares['TOKEN']
            purchase.status = 'CREATED'
            purchase.put()
            url_red = self.PAYPAL_URL + '&token=' + purchase.paykey
            logging.info('redirect to:%s' % url_red)
            ret_url = url_red
            #            secret = util.random_alnum(16)
            #            method_params = {
            #                'METHOD' : 'DoExpressCheckoutPayment'
            #                    }
            #            detail_params = {
            #                'TOKEN' : purchase.paykey,
            #                'PAYERID' : secret,
            #                'PAYMENTREQUEST_0_AMT' : '%0.2f' % item.price_dollars(),
            #                'PAYMENTREQUEST_0_CURRENCYCODE' : 'USD',
            #                'PAYMENTREQUEST_0_PAYMENTACTION' : 'Sale'
            #            }
            #            do_exp_params_string = self.signature + urllib.urlencode(method_params) + "&" + urllib.urlencode(detail_params)
            #            ret_url = self.PAYPAL_URL + "&" + do_exp_params_string
            #            logging.info('redirect to:  %s' % ret_url)
            return (True, ret_url)
        else:
            return (False, ret_url)
  def start_purchase(self, item):
    purchase = model.Purchase( item=item, owner=item.owner, purchaser=users.get_current_user(), status='NEW', secret=util.random_alnum(16) )
    purchase.put()
    if settings.USE_IPN:
      ipn_url = "%s/ipn/%s/%s/" % ( self.request.host_url, purchase.key(), purchase.secret )
    else:
      ipn_url = None
    if settings.USE_CHAIN:
      seller_paypal_email = util.paypal_email(item.owner)
    else:
      seller_paypal_email = None
    pay = paypal.Pay( 
      item.price_dollars(), 
      "%sreturn/%s/%s/" % (self.request.uri, purchase.key(), purchase.secret), 
      "%scancel/%s/" % (self.request.uri, purchase.key()), 
      self.request.remote_addr,
      seller_paypal_email,
      ipn_url,
      shipping=settings.SHIPPING)

    purchase.debug_request = pay.raw_request
    purchase.debug_response = pay.raw_response
    purchase.paykey = pay.paykey()
    purchase.put()
    
    if pay.status() == 'CREATED':
      purchase.status = 'CREATED'
      purchase.put()
      return (True, pay)
    else:
      purchase.status = 'ERROR'
      purchase.put()
      return (False, pay)
Exemple #6
0
    def set_ExpressPurchase(self, item):
        purchase = model.Purchase( item=item, owner=item.owner, purchaser=users.get_current_user(), status='NEW', secret=util.random_alnum(16) )
        purchase.put()

        ipn_url = None

        seller_paypal_email = None
        
        returnurl = "%sreturn/%s/%s/" % (self.request.uri, purchase.key(), purchase.secret)
        cancelurl = "%scancel/%s/" % (self.request.uri, purchase.key())
        
#        pay = paypal.ExpressPay( 
#            item.price_dollars(), 
#            returnurl, 
#            cancelurl, 
#            self.request.remote_addr,
#            seller_paypal_email,
#            ipn_url,
#            shipping=settings.SHIPPING)
        
        self.signature_values = {
            'USER' :settings.PAYPAL_USERID,
            'PWD': settings.PAYPAL_PASSWORD,
            'SIGNATURE':settings.PAYPAL_SIGNATURE,
            'VERSION' : '65.0',
                            }
        self.API_ENDPOINT = 'https://api-3t.sandbox.paypal.com/nvp'
        self.PAYPAL_URL = 'https://www.sandbox.paypal.com/webscr&cmd=_express-checkout'
        self.signature = urllib.urlencode(self.signature_values) + "&"
        
        params = {
            'METHOD' : 'SetExpressCheckout'
        }
        expressParams = {
            'PAYMENTREQUEST_0_AMT' : '%0.2f' % item.price_dollars(),
            'PAYMENTREQUEST_0_CURRENCYCODE' : 'USD',
            'PAYMENTREQUEST_0_PAYMENTACTION' : 'Sale',
            'RETURNURL' : returnurl,
            'CANCELURL' : cancelurl
            }
        params_string = self.signature + urllib.urlencode(params) + "&" + urllib.urlencode(expressParams)
        
        self.raw_response = urllib.urlopen(self.API_ENDPOINT, params_string)
        self.response_content = self.raw_response.read()
        
        logging.debug(self.request.uri)
        logging.debug(self.request.remote_addr)

        data = self.API_ENDPOINT + params_string
        purchase.debug_request = json.dumps(data)
        purchase.debug_response = self.response_content
        
        res = urllib.unquote(self.response_content)
        datares = dict( (n,v) for n,v in (a.split('=') for a in res.split('&') ) )
        logging.debug(datares)
        ret_url = ""
        if datares['ACK'] == 'Success':
            purchase.paykey = datares['TOKEN']
            purchase.status = 'CREATED'
            purchase.put()
            url_red = self.PAYPAL_URL + '&token=' + purchase.paykey
            logging.info('redirect to:%s' % url_red)
            ret_url = url_red
#            secret = util.random_alnum(16)
#            method_params = {
#                'METHOD' : 'DoExpressCheckoutPayment'
#                    }
#            detail_params = {
#                'TOKEN' : purchase.paykey,
#                'PAYERID' : secret,
#                'PAYMENTREQUEST_0_AMT' : '%0.2f' % item.price_dollars(),
#                'PAYMENTREQUEST_0_CURRENCYCODE' : 'USD',
#                'PAYMENTREQUEST_0_PAYMENTACTION' : 'Sale'
#            }
#            do_exp_params_string = self.signature + urllib.urlencode(method_params) + "&" + urllib.urlencode(detail_params)
#            ret_url = self.PAYPAL_URL + "&" + do_exp_params_string
#            logging.info('redirect to:  %s' % ret_url)
            return (True, ret_url)
        else:
            return (False, ret_url)