Example #1
0
 def test_doExpressCheckoutPayment_invalid(self, mock_request_object):
     ec_token = 'EC-1234567890'
     payerid = 'LXYZABC1234'
     item = self.ec_item.copy()
     item.update({'token': ec_token, 'payerid': payerid})
     mock_request_object.return_value = 'ack=Failure&l_errorcode=42&l_longmessage0=Broken'
     wpp = PayPalWPP(REQUEST)
     with self.assertRaises(PayPalFailure):
         wpp.doExpressCheckoutPayment(item)
Example #2
0
 def test_doExpressCheckoutPayment_invalid(self, mock_request_object):
     ec_token = 'EC-1234567890'
     payerid = 'LXYZABC1234'
     item = self.ec_item.copy()
     item.update({'token': ec_token, 'payerid': payerid})
     mock_request_object.return_value = 'ack=Failure&l_errorcode=42&l_longmessage0=Broken'
     wpp = PayPalWPP(make_request())
     with self.assertRaises(PayPalFailure):
         wpp.doExpressCheckoutPayment(item)
Example #3
0
 def test_doExpressCheckoutPayment(self, mock_request_object):
     ec_token = 'EC-1234567890'
     payerid = 'LXYZABC1234'
     item = self.ec_item.copy()
     item.update({'token': ec_token, 'payerid': payerid})
     mock_request_object.return_value = 'ack=Success&token=%s&version=%spaymentinfo_0_amt=%s' % \
         (ec_token, VERSION, self.ec_item['paymentrequest_0_amt'])
     wpp = PayPalWPP(make_request())
     wpp.doExpressCheckoutPayment(item)
     call_args = mock_request_object.call_args
     self.assertIn('VERSION=%s' % VERSION, call_args[0][1])
     self.assertIn('METHOD=DoExpressCheckoutPayment', call_args[0][1])
     self.assertIn('TOKEN=%s' % ec_token, call_args[0][1])
     self.assertIn('PAYMENTREQUEST_0_AMT=%s' % item['paymentrequest_0_amt'],
                   call_args[0][1])
     self.assertIn('PAYERID=%s' % payerid, call_args[0][1])
Example #4
0
 def test_doExpressCheckoutPayment(self, mock_request_object):
     ec_token = 'EC-1234567890'
     payerid = 'LXYZABC1234'
     item = self.ec_item.copy()
     item.update({'token': ec_token, 'payerid': payerid})
     mock_request_object.return_value = 'ack=Success&token=%s&version=%spaymentinfo_0_amt=%s' % \
         (ec_token, VERSION, self.ec_item['paymentrequest_0_amt'])
     wpp = PayPalWPP(REQUEST)
     wpp.doExpressCheckoutPayment(item)
     call_args = mock_request_object.call_args
     self.assertIn('VERSION=%s' % VERSION, call_args[0][1])
     self.assertIn('METHOD=DoExpressCheckoutPayment', call_args[0][1])
     self.assertIn('TOKEN=%s' % ec_token, call_args[0][1])
     self.assertIn('PAYMENTREQUEST_0_AMT=%s' % item['paymentrequest_0_amt'],
                   call_args[0][1])
     self.assertIn('PAYERID=%s' % payerid, call_args[0][1])
Example #5
0
 def test_doExpressCheckoutPayment(self, mock_request_object):
     ec_token = "EC-1234567890"
     payerid = "LXYZABC1234"
     item = self.ec_item.copy()
     item.update({"token": ec_token, "payerid": payerid})
     mock_request_object.return_value = "ack=Success&token={}&version={}paymentinfo_0_amt={}".format(
         ec_token,
         VERSION,
         self.ec_item["paymentrequest_0_amt"],
     )
     wpp = PayPalWPP(make_request())
     wpp.doExpressCheckoutPayment(item)
     call_args = mock_request_object.call_args
     self.assertIn(f"VERSION={VERSION}", call_args[0][1])
     self.assertIn("METHOD=DoExpressCheckoutPayment", call_args[0][1])
     self.assertIn(f"TOKEN={ec_token}", call_args[0][1])
     self.assertIn(f"PAYMENTREQUEST_0_AMT={item['paymentrequest_0_amt']}",
                   call_args[0][1])
     self.assertIn(f"PAYERID={payerid}", call_args[0][1])
Example #6
0
    def validate_confirm_form(self):
        """
        Third and final step of ExpressCheckout. Request has pressed the confirmation but
        and we can send the final confirmation to PayPal using the data from the POST'ed form.
        """
        wpp = PayPalWPP(self.request)
        pp_data = dict(token=self.request.POST['token'], payerid=self.request.POST['PayerID'])
        self.item.update(pp_data)

        # @@@ This check and call could be moved into PayPalWPP.
        try:
            if self.is_recurring():
                wpp.createRecurringPaymentsProfile(self.item)
            else:
                wpp.doExpressCheckoutPayment(self.item)
        except PayPalFailure:
            self.context['errors'] = self.errors['processing']
            return self.render_payment_form()
        else:
            return HttpResponseRedirect(self.success_url)
Example #7
0
    def validate_confirm_form(self):
        """
        Third and final step of ExpressCheckout. Request has pressed the confirmation but
        and we can send the final confirmation to PayPal using the data from the POST'ed form.
        """
        wpp = PayPalWPP(self.request)
        pp_data = dict(token=self.request.POST['token'],
                       payerid=self.request.POST['PayerID'])
        self.item.update(pp_data)

        # @@@ This check and call could be moved into PayPalWPP.
        try:
            if self.is_recurring():
                wpp.createRecurringPaymentsProfile(self.item)
            else:
                wpp.doExpressCheckoutPayment(self.item)
        except PayPalFailure:
            self.context['errors'] = self.errors['processing']
            return self.render_payment_form()
        else:
            return HttpResponseRedirect(self.success_url)
Example #8
0
    def process(self, ipaddress, user, item):
        """Process a PayPal ExpressCheckout payment."""
        from paypal.pro.helpers import PayPalWPP
        wpp = PayPalWPP(ipaddress, user)
        params = self.cleaned_data
        params.update(item)

        try:
            # Create single payment:
            if 'billingperiod' not in params:
                nvp_obj = wpp.doExpressCheckoutPayment(params)
            # Create recurring payment:
            else:
                nvp_obj = wpp.createRecurringPaymentsProfile(params)
        except PayPalFailure:
            return None
        return nvp_obj
Example #9
0
    def validate_confirm_form(self):
        """
        Third and final step of ExpressCheckout. Request has pressed the confirmation but
        and we can send the final confirmation to PayPal using the data from the POST'ed form.
        """
        wpp = PayPalWPP(self.request)
        pp_data = dict(token=self.request.POST['token'], payerid=self.request.POST['PayerID'])
        self.item.update(pp_data)
        
        if self.is_recurring:
            success = wpp.createRecurringPaymentsProfile(self.item)
        else:
            success = wpp.doExpressCheckoutPayment(self.item)

        if success:
            payment_was_successful.send(sender=self.item)
            return HttpResponseRedirect(self.success_url)
        else:
            self.context['errors'] = self.processing_error
            return self.render_payment_form()
Example #10
0
 def test_doExpressCheckoutPayment_deprecation(self, mock_request_object):
     wpp = PayPalWPP(make_request())
     mock_request_object.return_value = 'ack=Success&token=EC-XXXX&version=%s'
     ec_token = 'EC-1234567890'
     payerid = 'LXYZABC1234'
     item = self.ec_item.copy()
     item.update({'amt': item['paymentrequest_0_amt'],
                  'token': ec_token,
                  'payerid': payerid})
     del item['paymentrequest_0_amt']
     with warnings.catch_warnings(record=True) as warning_list:
         warnings.simplefilter("always")
         nvp_obj = wpp.doExpressCheckoutPayment(item)
         # Make sure our warning was given
         self.assertTrue(any(warned.category == DeprecationWarning
                             for warned in warning_list))
         # Make sure the method still went through
         call_args = mock_request_object.call_args
         self.assertIn('PAYMENTREQUEST_0_AMT=%s' % item['amt'],
                       call_args[0][1])
         self.assertEqual(nvp_obj.ack, "Success")
Example #11
0
    def validate_confirm_form(self):
        """
        Final express flow step.
        User has pressed the confirm button and now we send it off to PayPal.
        
        """
        wpp = PayPalWPP(self.request)
        pp_data = dict(token=self.request.POST['token'], payerid=self.request.POST['PayerID'])
        self.item.update(pp_data)
        
        if self.is_recurring:
            success = wpp.createRecurringPaymentsProfile(self.item)
        else:
            success = wpp.doExpressCheckoutPayment(self.item)

        if success:
            payment_was_successful.send(sender=self.item)
            return HttpResponseRedirect(self.success_url)
        else:
            self.context['errors'] = "There was a problem processing the payment. Please check your information and try again."
            return self.render_payment_form()
Example #12
0
def paypal_end(request):
    """
    Do payment and create order object in DB
    """
    try:
        wpp = PayPalWPP(request)
        token = request.GET['token']
        params = {"token": token}
        nvp = wpp.getExpressCheckoutDetails(params)
        order_dict = nvp.response_dict.copy()

        params = {
            "token":
            token,
            "payerid":
            nvp.payerid,
            "paymentrequest_0_amt":
            nvp.response_dict.get("paymentrequest_0_amt"),
            "paymentrequest_0_currencycode":
            nvp.response_dict.get("paymentrequest_0_currencycode")
        }

        payment = wpp.doExpressCheckoutPayment(params)

        order_dict['transactionid'] = payment.response_dict.get(
            'paymentinfo_0_transactionid')

        order = create_order_from_express_paypal(order_dict)
        send_order_email(order.email, order, order.items.all)

        data = {
            'order_id': order.id,
        }
        return HttpResponse(json.dumps(data), content_type='application/json')
    except Exception, e:

        print e
        data = {'error': e.message}
        return HttpResponseServerError(json.dumps(data),
                                       content_type='application/json')
Example #13
0
def paypal_end(request):
    """
    Do payment and create order object in DB
    """
    try:
        wpp = PayPalWPP(request)
        token = request.GET['token']
        params = {"token": token}
        nvp = wpp.getExpressCheckoutDetails(params)
        order_dict = nvp.response_dict.copy()

        params = {
            "token": token,
            "payerid": nvp.payerid,
            "paymentrequest_0_amt": nvp.response_dict.get("paymentrequest_0_amt"),
            "paymentrequest_0_currencycode" : nvp.response_dict.get("paymentrequest_0_currencycode")
        }

        payment = wpp.doExpressCheckoutPayment(params)

        order_dict['transactionid'] = payment.response_dict.get('paymentinfo_0_transactionid')

        order = create_order_from_express_paypal(order_dict)
        send_order_email(order.email, order, order.items.all)

        data = {
            'order_id': order.id,
        }
        return HttpResponse(json.dumps(data), content_type='application/json')
    except Exception, e:

        print e
        data = {
            'error': e.message
        }
        return HttpResponseServerError(json.dumps(data), content_type='application/json')