44
55from .environment import Environment
66from .exceptions import SwishError
7- from .models import Payment , Refund , CommerceQRCodeRequest
7+ from .models import Payment , Refund , CommerceQRCodeRequest , Operation
88
99try :
1010 from requests .packages .urllib3 .contrib import pyopenssl
@@ -26,21 +26,27 @@ def __post(self, endpoint, payload):
2626 else :
2727 base_url = self .environment .base_url
2828 url = base_url + endpoint
29- return requests .post (url = url , json = payload . to_primitive () , headers = {'Content-Type' : 'application/json' },
29+ return requests .post (url = url , json = payload , headers = {'Content-Type' : 'application/json' },
3030 cert = self .cert , verify = self .verify )
3131
3232 def post (self , endpoint , payload ):
33- warnings .warn ("You shouldn't be calling this method. It will be private in a future version." , DeprecationWarning );
33+ warnings .warn ("You shouldn't be calling this method. It will be private in a future version." , DeprecationWarning )
3434 self .__post (endpoint , payload )
3535
3636 def __get (self , endpoint , parameter ):
3737 url = self .environment .base_url + endpoint + '/' + str (parameter )
38- return requests .get (url , cert = self .cert , verify = self .verify )
38+ return requests .get (url = url , cert = self .cert , verify = self .verify )
3939
4040 def get (self , endpoint , parameter ):
41- warnings .warn ("You shouldn't be calling this method. It will be private in a future version." , DeprecationWarning );
41+ warnings .warn ("You shouldn't be calling this method. It will be private in a future version." , DeprecationWarning )
4242 self .__get (endpoint , parameter )
4343
44+ def __patch (self , endpoint , parameter , payload ):
45+ url = self .environment .base_url + endpoint + '/' + str (parameter )
46+ return requests .patch (url = url , json = payload , headers = {'Content-Type' : 'application/json-patch+json' },
47+ cert = self .cert , verify = self .verify )
48+
49+
4450 def create_payment (self , amount , currency , callback_url , payee_payment_reference = None , message = None ,
4551 payer_alias = None ):
4652 payment_request = Payment ({
@@ -53,7 +59,7 @@ def create_payment(self, amount, currency, callback_url, payee_payment_reference
5359 'payer_alias' : payer_alias
5460 })
5561
56- response = self .__post ('paymentrequests' , payment_request )
62+ response = self .__post ('paymentrequests' , payment_request . to_primitive () )
5763 if response .status_code == 422 :
5864 raise SwishError (response .json ())
5965 response .raise_for_status ()
@@ -67,6 +73,12 @@ def get_payment(self, payment_request_id):
6773 response .raise_for_status ()
6874 return Payment (response .json ())
6975
76+ def cancel_payment (self , payment_request_id ):
77+ operation = Operation ()
78+ response = self .__patch ('paymentrequests' , payment_request_id , [operation .to_primitive ()])
79+ response .raise_for_status ()
80+ return Payment (response .json ())
81+
7082 def create_refund (self , original_payment_reference , amount , currency , callback_url , payer_payment_reference = None ,
7183 payment_reference = None , payee_alias = None , message = None ):
7284 refund_request = Refund ({
@@ -81,7 +93,7 @@ def create_refund(self, original_payment_reference, amount, currency, callback_u
8193 'message' : message
8294 })
8395
84- response = self .__post ('refunds' , refund_request )
96+ response = self .__post ('refunds' , refund_request . to_primitive () )
8597 if response .status_code == 422 :
8698 raise SwishError (response .json ())
8799 response .raise_for_status ()
@@ -104,6 +116,6 @@ def commerce_qr_code(self, token, format, size=None, border=None, transparent=No
104116 'transparent' : transparent
105117 })
106118
107- response = self .__post ('commerce' , commerce_qr_code_request )
119+ response = self .__post ('commerce' , commerce_qr_code_request . to_primitive () )
108120 response .raise_for_status ()
109121 return response .content
0 commit comments