@@ -27,156 +27,154 @@ import okhttp3.MediaType.Companion.toMediaType
2727import okhttp3.RequestBody.Companion.toRequestBody
2828import java.util.*
2929
30- class Datatrans {
31- companion object {
32- data class DatatransTokenizationRequest (
33- val paymentMethod : PaymentMethod ,
34- val language : String = Locale .getDefault().language,
35- )
36-
37- data class DatatransTokenizationResponse (
38- val mobileToken : String ,
39- val isTesting : Boolean? ,
40- )
41-
42- val datatransPaymentMethods = mapOf (
43- PaymentMethod .MASTERCARD to " ECA" ,
44- PaymentMethod .VISA to " VIS" ,
45- PaymentMethod .AMEX to " AMX" ,
46- PaymentMethod .TWINT to " TWI" ,
47- PaymentMethod .POST_FINANCE_CARD to " PFC"
48- )
49-
50- @JvmStatic
51- fun registerCard (activity : FragmentActivity , project : Project , paymentMethod : PaymentMethod ) {
52- val descriptor = project.paymentMethodDescriptors.find { it.paymentMethod == paymentMethod }
53- if (descriptor == null ) {
54- project.events.logError(" Datatrans Error: No payment descriptor" )
55- Logger .e(" Datatrans error: No payment method descriptor for $paymentMethod " )
30+ object Datatrans {
31+ data class DatatransTokenizationRequest (
32+ val paymentMethod : PaymentMethod ,
33+ val language : String = Locale .getDefault().language,
34+ )
35+
36+ data class DatatransTokenizationResponse (
37+ val mobileToken : String ,
38+ val isTesting : Boolean? ,
39+ )
40+
41+ val datatransPaymentMethods = mapOf (
42+ PaymentMethod .MASTERCARD to " ECA" ,
43+ PaymentMethod .VISA to " VIS" ,
44+ PaymentMethod .AMEX to " AMX" ,
45+ PaymentMethod .TWINT to " TWI" ,
46+ PaymentMethod .POST_FINANCE_CARD to " PFC"
47+ )
48+
49+ @JvmStatic
50+ fun registerCard (activity : FragmentActivity , project : Project , paymentMethod : PaymentMethod ) {
51+ val descriptor = project.paymentMethodDescriptors.find { it.paymentMethod == paymentMethod }
52+ if (descriptor == null ) {
53+ project.events.logError(" Datatrans Error: No payment descriptor" )
54+ Logger .e(" Datatrans error: No payment method descriptor for $paymentMethod " )
5655
57- Dispatch .mainThread {
58- showError(activity, paymentMethod)
59- }
60- return
56+ Dispatch .mainThread {
57+ showError(activity, paymentMethod)
58+ }
59+ return
60+ }
61+
62+ val url = descriptor.links?.get(" tokenization" )
63+ if (url == null ) {
64+ project.events.logError(" Datatrans Error: No tokenization url" )
65+ Logger .e(" Datatrans error: No tokenization url" )
66+
67+ Dispatch .mainThread {
68+ showError(activity, paymentMethod)
6169 }
70+ return
71+ }
6272
63- val url = descriptor.links?.get(" tokenization" )
64- if (url == null ) {
65- project.events.logError(" Datatrans Error: No tokenization url" )
66- Logger .e(" Datatrans error: No tokenization url" )
73+ val request: Request = Request .Builder ()
74+ .url(Snabble .getInstance().absoluteUrl(url.href))
75+ .post(GsonHolder .get().toJson(
76+ DatatransTokenizationRequest (paymentMethod)
77+ ).toRequestBody(" application/json" .toMediaType()))
78+ .build()
79+
80+ val okClient = project.okHttpClient
81+ okClient.newCall(request).enqueue(object : SimpleJsonCallback <DatatransTokenizationResponse >(DatatransTokenizationResponse ::class .java), Callback {
82+ override fun success (response : DatatransTokenizationResponse ) {
83+ startDatatransTransaction(activity, response, paymentMethod, project)
84+ }
6785
86+ override fun error (t : Throwable ? ) {
6887 Dispatch .mainThread {
6988 showError(activity, paymentMethod)
7089 }
71- return
90+
91+ project.events.logError(" Datatrans Tokenization Error: " + t?.message)
92+ Logger .e(" Datatrans Tokenization Error: ${t?.message} " )
7293 }
94+ })
95+ }
7396
74- val request: Request = Request .Builder ()
75- .url(Snabble .getInstance().absoluteUrl(url.href))
76- .post(GsonHolder .get().toJson(
77- DatatransTokenizationRequest (paymentMethod)
78- ).toRequestBody(" application/json" .toMediaType()))
79- .build()
80-
81- val okClient = project.okHttpClient
82- okClient.newCall(request).enqueue(object : SimpleJsonCallback <DatatransTokenizationResponse >(DatatransTokenizationResponse ::class .java), Callback {
83- override fun success (response : DatatransTokenizationResponse ) {
84- startDatatransTransaction(activity, response, paymentMethod, project)
97+ private fun showError (activity : FragmentActivity , paymentMethod : PaymentMethod ) {
98+ if (! activity.isDestroyed) {
99+ val err = when (paymentMethod) {
100+ PaymentMethod .TWINT -> {
101+ R .string.Snabble_Payment_Twint_error
85102 }
86-
87- override fun error (t : Throwable ? ) {
88- Dispatch .mainThread {
89- showError(activity, paymentMethod)
90- }
91-
92- project.events.logError(" Datatrans Tokenization Error: " + t?.message)
93- Logger .e(" Datatrans Tokenization Error: ${t?.message} " )
103+ PaymentMethod .POST_FINANCE_CARD -> {
104+ R .string.Snabble_Payment_PostFinanceCard_error
94105 }
95- })
96- }
97-
98- private fun showError (activity : FragmentActivity , paymentMethod : PaymentMethod ) {
99- if (! activity.isDestroyed) {
100- val err = when (paymentMethod) {
101- PaymentMethod .TWINT -> {
102- R .string.Snabble_Payment_Twint_error
103- }
104- PaymentMethod .POST_FINANCE_CARD -> {
105- R .string.Snabble_Payment_PostFinanceCard_error
106- }
107- else -> {
108- R .string.Snabble_Payment_CreditCard_error
109- }
106+ else -> {
107+ R .string.Snabble_Payment_CreditCard_error
110108 }
111-
112- Toast .makeText(activity, err, Toast .LENGTH_LONG ).show()
113109 }
110+
111+ Toast .makeText(activity, err, Toast .LENGTH_LONG ).show()
114112 }
113+ }
115114
116- private fun startDatatransTransaction (activity : FragmentActivity ,
117- tokenizationResponse : DatatransTokenizationResponse ,
118- paymentMethod : PaymentMethod ,
119- project : Project ) {
120- val transaction = Transaction (tokenizationResponse.mobileToken)
121- transaction.listener = object : TransactionListener {
122- override fun onTransactionSuccess (result : TransactionSuccess ) {
123- activity.runOnUiThreadWhenResumed {
124- val token = result.paymentMethodToken
125- var month = " "
126- var year = " "
127-
128- when (token) {
129- is PostFinanceCardToken -> {
130- token.cardExpiryDate?.let {
131- month = it.formattedMonth
132- year = it.formattedYear
133- }
115+ private fun startDatatransTransaction (activity : FragmentActivity ,
116+ tokenizationResponse : DatatransTokenizationResponse ,
117+ paymentMethod : PaymentMethod ,
118+ project : Project ) {
119+ val transaction = Transaction (tokenizationResponse.mobileToken)
120+ transaction.listener = object : TransactionListener {
121+ override fun onTransactionSuccess (result : TransactionSuccess ) {
122+ activity.runOnUiThreadWhenResumed {
123+ val token = result.paymentMethodToken
124+ var month = " "
125+ var year = " "
126+
127+ when (token) {
128+ is PostFinanceCardToken -> {
129+ token.cardExpiryDate?.let {
130+ month = it.formattedMonth
131+ year = it.formattedYear
134132 }
135- is CardToken -> {
136- token.cardExpiryDate?. let {
137- month = it.formattedMonth
138- year = it.formattedYear
139- }
133+ }
134+ is CardToken -> {
135+ token.cardExpiryDate?. let {
136+ month = it.formattedMonth
137+ year = it.formattedYear
140138 }
141139 }
140+ }
142141
143- if (token != null ) {
144- Keyguard .unlock(activity, object : Keyguard .Callback {
145- override fun success () {
146- val store = Snabble .getInstance().paymentCredentialsStore
147- val credentials = PaymentCredentials .fromDatatrans(
148- token.token,
149- PaymentCredentials .Brand .fromPaymentMethod(paymentMethod),
150- result.paymentMethodToken?.getDisplayTitle(activity),
151- month,
152- year,
153- project.id,
154- )
155- store.add(credentials)
156- }
157-
158- override fun error () {
159- Toast .makeText(activity, R .string.Snabble_SEPA_encryptionError , Toast .LENGTH_LONG ).show()
160- }
161- })
162- } else {
163- Toast .makeText(activity, R .string.Snabble_SEPA_encryptionError , Toast .LENGTH_LONG ).show()
164- }
142+ if (token != null ) {
143+ Keyguard .unlock(activity, object : Keyguard .Callback {
144+ override fun success () {
145+ val store = Snabble .getInstance().paymentCredentialsStore
146+ val credentials = PaymentCredentials .fromDatatrans(
147+ token.token,
148+ PaymentCredentials .Brand .fromPaymentMethod(paymentMethod),
149+ result.paymentMethodToken?.getDisplayTitle(activity),
150+ month,
151+ year,
152+ project.id,
153+ )
154+ store.add(credentials)
155+ }
156+
157+ override fun error () {
158+ Toast .makeText(activity, R .string.Snabble_SEPA_encryptionError , Toast .LENGTH_LONG ).show()
159+ }
160+ })
161+ } else {
162+ Toast .makeText(activity, R .string.Snabble_SEPA_encryptionError , Toast .LENGTH_LONG ).show()
165163 }
166164 }
165+ }
167166
168- override fun onTransactionError (exception : TransactionException ) {
169- activity.runOnUiThreadWhenResumed {
170- project.events.logError(" Datatrans TransactionException: " + exception.message)
171- showError(activity, paymentMethod)
172- }
167+ override fun onTransactionError (exception : TransactionException ) {
168+ activity.runOnUiThreadWhenResumed {
169+ project.events.logError(" Datatrans TransactionException: " + exception.message)
170+ showError(activity, paymentMethod)
173171 }
174172 }
175- transaction.options.appCallbackScheme = " snabble"
176- transaction.options.isTesting = tokenizationResponse.isTesting ? : false
177- transaction.options.useCertificatePinning = true
178- TransactionRegistry .startTransaction(activity, transaction)
179173 }
174+ transaction.options.appCallbackScheme = " snabble"
175+ transaction.options.isTesting = tokenizationResponse.isTesting ? : false
176+ transaction.options.useCertificatePinning = true
177+ TransactionRegistry .startTransaction(activity, transaction)
180178 }
181179}
182180
0 commit comments