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)
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)
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])
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])
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])
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)
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
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()
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")
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()
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')
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')