Skip to content

Commit 93b8991

Browse files
authored
Merge pull request #6 from MadBrains/apple_parameters
[2.0.2] Add more Apple Parameters
2 parents 61c22cb + 02aac09 commit 93b8991

35 files changed

+2853
-1009
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 2.0.2
2+
3+
* Change proto structure
4+
* [iOS] Add more Apple Parameters
5+
16
## 2.0.1
27

38
* [Android] Fix Dependency conflict with firebase

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Easy integration with Google Pay and Apple Pay for your flutter app.
1717
Add this to your package's pubspec.yaml file:
1818
```yaml
1919
dependencies:
20-
mad_pay: 2.0.1
20+
mad_pay: 2.0.2
2121
```
2222
2323
For Android: set `minSdkVersion` to 21

android/src/main/kotlin/ru/madbrains/mad_pay/PaymentHelpers.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package ru.madbrains.mad_pay
22

3+
import google.Google.CardAuthMethods
34
import ru.madbrains.mad_pay.MadPay.PaymentNetwork
4-
import ru.madbrains.mad_pay.MadPay.CardAuthMethods
55

66
class PaymentHelpers {
77
companion object {

android/src/main/kotlin/ru/madbrains/mad_pay/RawMethods.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class RawMethods {
7171
}
7272

7373
fun getPaymentMethod(totalPrice: Double, allowedPaymentNetworks: List<MadPay.PaymentNetwork>,
74-
google: MadPay.GoogleParameters,
74+
google: google.Google.GoogleParameters,
7575
emailRequired: Boolean, currencyCode: String, countryCode: String): JSONObject {
7676

7777
val paymentNetworks = PaymentHelpers.getPaymentNetwork(allowedPaymentNetworks)

example/lib/main.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@ class _MyAppState extends State<MyApp> {
7575
),
7676
apple: AppleParameters(
7777
merchantIdentifier: 'example_id',
78+
billingContact: Contact(
79+
emailAddres: 'test@test.com',
80+
),
81+
shippingContact: Contact(
82+
emailAddres: 'test@test.com',
83+
),
7884
),
7985
currencyCode: 'USD',
8086
countryCode: 'US',

example/pubspec.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ packages:
7373
path: ".."
7474
relative: true
7575
source: path
76-
version: "2.0.1"
76+
version: "2.0.2"
7777
matcher:
7878
dependency: transitive
7979
description:

ios/Classes/PaymentHelpers.swift

Lines changed: 88 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -97,33 +97,111 @@ class PaymentNetworkHelper {
9797
paymentNetwork.compactMap({ decodePaymentNetwork($0) })
9898
}
9999

100-
static func getMerchantCapabilities(_ merchantCapabilities: MerchantCapabilities) -> PKMerchantCapability {
100+
static func getMerchantCapabilities(_ merchantCapabilities: Apple_MerchantCapabilities) -> PKMerchantCapability {
101101
switch (merchantCapabilities) {
102-
case MerchantCapabilities.threeds:
102+
case Apple_MerchantCapabilities.threeds:
103103
return PKMerchantCapability.capability3DS
104-
case MerchantCapabilities.credit:
104+
case Apple_MerchantCapabilities.credit:
105105
return PKMerchantCapability.capabilityCredit
106-
case MerchantCapabilities.debit:
106+
case Apple_MerchantCapabilities.debit:
107107
return PKMerchantCapability.capabilityDebit
108-
case MerchantCapabilities.emv:
108+
case Apple_MerchantCapabilities.emv:
109109
return PKMerchantCapability.capabilityEMV
110110
default:
111111
return PKMerchantCapability.capability3DS
112112
}
113113
}
114114

115-
static func getShippingType(_ shippingType: ShippingType) -> PKShippingType {
115+
static func getShippingType(_ shippingType: Apple_ShippingType) -> PKShippingType {
116116
switch (shippingType) {
117-
case ShippingType.shipping:
117+
case Apple_ShippingType.shipping:
118118
return PKShippingType.shipping
119-
case ShippingType.delivery:
119+
case Apple_ShippingType.delivery:
120120
return PKShippingType.delivery
121-
case ShippingType.servicePickup:
121+
case Apple_ShippingType.servicePickup:
122122
return PKShippingType.servicePickup
123-
case ShippingType.storePickup:
123+
case Apple_ShippingType.storePickup:
124124
return PKShippingType.storePickup
125125
default:
126126
return PKShippingType.shipping
127127
}
128128
}
129+
130+
static func getPaymentSummaryItem(_ paymentItems: Array<PaymentItem>) -> Array<PKPaymentSummaryItem> {
131+
var paymentSummaryItem = [PKPaymentSummaryItem]()
132+
paymentItems.forEach { item in
133+
let itemTitle = item.name
134+
let itemPrice = item.price
135+
let payment = PKPaymentSummaryItem(label: itemTitle, amount: NSDecimalNumber(floatLiteral: itemPrice))
136+
paymentSummaryItem.append(payment)
137+
}
138+
return paymentSummaryItem
139+
}
140+
141+
static func getShippingMethods(_ methods: Array<Apple_ShippingMethod>) -> Array<PKShippingMethod>? {
142+
var shippingMethods = [PKShippingMethod]()
143+
methods.forEach { item in
144+
let itemTitle = item.name
145+
let itemPrice = item.price
146+
let shippingMethod = PKShippingMethod(label: itemTitle, amount: NSDecimalNumber(floatLiteral: itemPrice))
147+
shippingMethod.identifier = item.identifier
148+
shippingMethod.detail = item.detail
149+
shippingMethods.append(shippingMethod)
150+
}
151+
return shippingMethods
152+
}
153+
154+
static func getContactFields(_ contacts: Array<String>) -> Set<PKContactField> {
155+
var items = Set<PKContactField>()
156+
contacts.forEach { item in
157+
items.insert(PKContactField(rawValue: item))
158+
}
159+
return items
160+
}
161+
162+
static func getContact(_ appleContact: Apple_Contact) -> PKContact? {
163+
let contact = PKContact()
164+
165+
contact.emailAddress = appleContact.emailAddres
166+
if appleContact.hasName {
167+
contact.name = getPersonNameComponents(appleContact.name)
168+
}
169+
if appleContact.hasPostalAddress {
170+
contact.postalAddress = getPostalAddress(appleContact.postalAddress)
171+
}
172+
if !appleContact.phoneNumber.isEmpty {
173+
contact.phoneNumber = CNPhoneNumber(stringValue: appleContact.phoneNumber)
174+
}
175+
return contact
176+
}
177+
178+
private static func getPersonNameComponents(_ personName: Apple_PersonNameComponents) -> PersonNameComponents {
179+
var name = PersonNameComponents()
180+
name.namePrefix = personName.namePrefix
181+
name.familyName = personName.familyName
182+
name.givenName = personName.givenName
183+
name.middleName = personName.middleName
184+
name.nameSuffix = personName.nameSuffix
185+
name.nickname = personName.nickname
186+
if personName.hasPhoneticRepresentation {
187+
name.phoneticRepresentation = getPersonNameComponents(personName.phoneticRepresentation)
188+
}
189+
return name
190+
}
191+
192+
private static func getPostalAddress(_ postalAddress: Apple_PostalAddress) -> CNPostalAddress {
193+
let address = CNMutablePostalAddress()
194+
address.city = postalAddress.city
195+
address.country = postalAddress.country
196+
address.isoCountryCode = postalAddress.isoCountryCode
197+
address.postalCode = postalAddress.postalCode
198+
address.state = postalAddress.state
199+
address.street = postalAddress.street
200+
if #available(iOS 10.3, *) {
201+
address.subAdministrativeArea = postalAddress.subAdministrativeArea
202+
address.subLocality = postalAddress.subLocality
203+
}
204+
205+
return address
206+
}
129207
}

ios/Classes/SwiftMadPayPlugin.swift

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -80,33 +80,37 @@ public class SwiftMadPayPlugin: NSObject, FlutterPlugin {
8080

8181
if (arguments.apple.merchantIdentifier.isEmpty || arguments.currencyCode.isEmpty || arguments.countryCode.isEmpty) {
8282
invokeErrorResult(errorCode: Constants.invalidParametersCode, message: """
83-
Invalid Payment parameters.
84-
merchantIdentifier: \(arguments.apple.merchantIdentifier)
85-
currencyCode: \(arguments.currencyCode)
86-
countryCode: \(arguments.countryCode)
87-
""")
83+
Invalid Payment parameters.
84+
merchantIdentifier: \(arguments.apple.merchantIdentifier)
85+
currencyCode: \(arguments.currencyCode)
86+
countryCode: \(arguments.countryCode)
87+
""")
8888
return
8989
}
9090

9191
var paymentNetworks = PaymentNetworkHelper.getPaymentNetworks(arguments.allowedPaymentNetworks)
9292
paymentNetworks = paymentNetworks.isEmpty ? PKPaymentRequest.availableNetworks() : paymentNetworks
9393

94-
var paymentItems = [PKPaymentSummaryItem]()
95-
arguments.paymentItems.forEach { item in
96-
let itemTitle = item.name
97-
let itemPrice = item.price
98-
let item = PKPaymentSummaryItem(label: itemTitle, amount: NSDecimalNumber(floatLiteral: itemPrice))
99-
paymentItems.append(item)
100-
}
101-
10294
let paymentRequest = PKPaymentRequest()
103-
paymentRequest.paymentSummaryItems = paymentItems
95+
paymentRequest.paymentSummaryItems = PaymentNetworkHelper.getPaymentSummaryItem(arguments.paymentItems)
10496
paymentRequest.supportedNetworks = paymentNetworks
10597
paymentRequest.merchantIdentifier = arguments.apple.merchantIdentifier
10698
paymentRequest.countryCode = arguments.countryCode
10799
paymentRequest.currencyCode = arguments.currencyCode
108100
paymentRequest.merchantCapabilities = PaymentNetworkHelper.getMerchantCapabilities(arguments.apple.merchantCapabilities)
101+
paymentRequest.billingContact = PaymentNetworkHelper.getContact(arguments.apple.billingContact)
102+
paymentRequest.shippingContact = PaymentNetworkHelper.getContact(arguments.apple.shippingContact)
103+
paymentRequest.shippingMethods = PaymentNetworkHelper.getShippingMethods(arguments.apple.shippingMethods)
109104
paymentRequest.shippingType = PaymentNetworkHelper.getShippingType(arguments.apple.shippingType)
105+
paymentRequest.applicationData = arguments.apple.applicationData
106+
if #available(iOS 11.0, *) {
107+
if !arguments.apple.requiredBillingContactFields.isEmpty {
108+
paymentRequest.requiredBillingContactFields = PaymentNetworkHelper.getContactFields(arguments.apple.requiredBillingContactFields)
109+
}
110+
if !arguments.apple.requiredShippingContactFields.isEmpty {
111+
paymentRequest.requiredShippingContactFields = PaymentNetworkHelper.getContactFields(arguments.apple.requiredShippingContactFields)
112+
}
113+
}
110114

111115
let paymentController = PKPaymentAuthorizationController(paymentRequest: paymentRequest)
112116
paymentController.delegate = self

0 commit comments

Comments
 (0)