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 ) } ))
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)
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))
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)
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)