Skip to content

Commit 0b97a04

Browse files
Multiple merchant capabilities (#41)
* Added ability to provide multiple merchant capabilities * PR feedback * guard check * updated flutter_svg to latest version. * mad_pay_android version bump * mad_pay_android version bump * Bump version & edit merchantCapabilities guard * Fix doc Co-authored-by: Michael Gobbers <michaelgobbers@gmail.com>
1 parent 03b39ac commit 0b97a04

26 files changed

+608
-1522
lines changed

example/ios/Runner.xcodeproj/project.pbxproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@
155155
97C146E61CF9000F007C117D /* Project object */ = {
156156
isa = PBXProject;
157157
attributes = {
158-
LastUpgradeCheck = 1020;
158+
LastUpgradeCheck = 1300;
159159
ORGANIZATIONNAME = "";
160160
TargetAttributes = {
161161
97C146ED1CF9000F007C117D = {

example/lib/main.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ class _MyAppState extends State<MyApp> {
4848
shippingContact: Contact(
4949
emailAddress: 'test@test.com',
5050
),
51+
merchantCapabilities: <MerchantCapabilities>[
52+
MerchantCapabilities.threeds,
53+
MerchantCapabilities.credit,
54+
],
5155
);
5256

5357
final GoogleParameters googleParameters = GoogleParameters(

packages/mad_pay/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 2.2.8
2+
3+
* Bump `mad_pay_android` version to `2.2.7` (Bump `flutter_svg` version to `1.0.3`)
4+
* Bump `mad_pay_ios` version to `2.2.4` (Added ability to provide multiple merchant capabilities)
5+
16
## 2.2.7
27

38
* Bump `mad_pay_android` version to `2.2.6` (Added support for building on Apple Silicon)

packages/mad_pay/pubspec.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: mad_pay
22
description: Mad Pay will help you make payments through Apple Pay and Google Pay
3-
version: 2.2.7
3+
version: 2.2.8
44
repository: https://github.com/MadBrains/Mad-Pay-Flutter
55
issue_tracker: https://github.com/MadBrains/Mad-Pay-Flutter/issues
66
homepage: https://madbrains.ru/
@@ -13,8 +13,8 @@ dependencies:
1313
flutter:
1414
sdk: flutter
1515
mad_pay_platform_interface: ^2.2.2
16-
mad_pay_android: ^2.2.6
17-
mad_pay_ios: ^2.2.3
16+
mad_pay_android: ^2.2.7
17+
mad_pay_ios: ^2.2.4
1818

1919
# For development. Remove/comment before publishing to pub.
2020
# dependency_overrides:

packages/mad_pay_android/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 2.2.7
2+
3+
* Bump `flutter_svg` version to `1.0.3`
4+
15
## 2.2.6
26

37
* Added support for building on Apple Silicon

packages/mad_pay_android/android/protos/apple.proto

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ option java_package = "ru.madbrains.mad_pay_android";
66

77
message AppleParameters {
88
string merchant_identifier = 1;
9-
MerchantCapabilities merchant_capabilities = 2;
9+
repeated MerchantCapabilities merchant_capabilities = 2;
1010
repeated string supported_countries = 3;
1111
repeated string required_billing_contact_fields = 4;
1212
repeated string required_shipping_contact_fields = 5;

packages/mad_pay_android/pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: mad_pay_android
22
description: A plug-in to add support for payments on the Android side of Mad Pay
3-
version: 2.2.6
3+
version: 2.2.7
44
repository: https://github.com/MadBrains/Mad-Pay-Flutter
55
issue_tracker: https://github.com/MadBrains/Mad-Pay-Flutter/issues
66
homepage: https://madbrains.ru/
@@ -15,7 +15,7 @@ dependencies:
1515
flutter_localizations:
1616
sdk: flutter
1717
mad_pay_platform_interface: ^2.2.2
18-
flutter_svg: ^0.23.0+1
18+
flutter_svg: ^1.0.3
1919

2020
# For development. Remove/comment before publishing to pub.
2121
# dependency_overrides:

packages/mad_pay_ios/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 2.2.4
2+
3+
* Added ability to provide multiple merchant capabilities
4+
15
## 2.2.3
26

37
* Fix typo `emailAddress`

packages/mad_pay_ios/ios/Classes/PaymentHelpers.swift

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -97,19 +97,28 @@ class PaymentNetworkHelper {
9797
paymentNetwork.compactMap({ decodePaymentNetwork($0) })
9898
}
9999

100-
static func getMerchantCapabilities(_ merchantCapabilities: Apple_MerchantCapabilities) -> PKMerchantCapability {
101-
switch (merchantCapabilities) {
102-
case Apple_MerchantCapabilities.threeds:
103-
return PKMerchantCapability.capability3DS
104-
case Apple_MerchantCapabilities.credit:
105-
return PKMerchantCapability.capabilityCredit
106-
case Apple_MerchantCapabilities.debit:
107-
return PKMerchantCapability.capabilityDebit
108-
case Apple_MerchantCapabilities.emv:
109-
return PKMerchantCapability.capabilityEMV
110-
default:
111-
return PKMerchantCapability.capability3DS
100+
static func getMerchantCapabilities(_ merchantCapabilities: [Apple_MerchantCapabilities]?) -> PKMerchantCapability {
101+
102+
guard let capabilities = merchantCapabilities, !capabilities.isEmpty else {
103+
return .capability3DS;
104+
}
105+
106+
var decodedCapabilities: PKMerchantCapability = [];
107+
108+
if(capabilities.contains(Apple_MerchantCapabilities.threeds) ){
109+
decodedCapabilities = decodedCapabilities.union(.capability3DS)
112110
}
111+
if(capabilities.contains(Apple_MerchantCapabilities.emv)){
112+
decodedCapabilities = decodedCapabilities.union(.capabilityEMV)
113+
}
114+
if(capabilities.contains(Apple_MerchantCapabilities.credit)){
115+
decodedCapabilities = decodedCapabilities.union(.capabilityCredit)
116+
}
117+
if(capabilities.contains(Apple_MerchantCapabilities.debit)){
118+
decodedCapabilities = decodedCapabilities.union(.capabilityDebit)
119+
}
120+
121+
return decodedCapabilities;
113122
}
114123

115124
static func getShippingType(_ shippingType: Apple_ShippingType) -> PKShippingType {

packages/mad_pay_ios/ios/Classes/protos/apple.pb.swift

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ struct Apple_AppleParameters {
126126
set {_uniqueStorage()._merchantIdentifier = newValue}
127127
}
128128

129-
var merchantCapabilities: Apple_MerchantCapabilities {
129+
var merchantCapabilities: [Apple_MerchantCapabilities] {
130130
get {return _storage._merchantCapabilities}
131131
set {_uniqueStorage()._merchantCapabilities = newValue}
132132
}
@@ -355,7 +355,7 @@ extension Apple_AppleParameters: SwiftProtobuf.Message, SwiftProtobuf._MessageIm
355355

356356
fileprivate class _StorageClass {
357357
var _merchantIdentifier: String = String()
358-
var _merchantCapabilities: Apple_MerchantCapabilities = .threeds
358+
var _merchantCapabilities: [Apple_MerchantCapabilities] = []
359359
var _supportedCountries: [String] = []
360360
var _requiredBillingContactFields: [String] = []
361361
var _requiredShippingContactFields: [String] = []
@@ -399,7 +399,7 @@ extension Apple_AppleParameters: SwiftProtobuf.Message, SwiftProtobuf._MessageIm
399399
// enabled. https://github.com/apple/swift-protobuf/issues/1034
400400
switch fieldNumber {
401401
case 1: try { try decoder.decodeSingularStringField(value: &_storage._merchantIdentifier) }()
402-
case 2: try { try decoder.decodeSingularEnumField(value: &_storage._merchantCapabilities) }()
402+
case 2: try { try decoder.decodeRepeatedEnumField(value: &_storage._merchantCapabilities) }()
403403
case 3: try { try decoder.decodeRepeatedStringField(value: &_storage._supportedCountries) }()
404404
case 4: try { try decoder.decodeRepeatedStringField(value: &_storage._requiredBillingContactFields) }()
405405
case 5: try { try decoder.decodeRepeatedStringField(value: &_storage._requiredShippingContactFields) }()
@@ -416,11 +416,15 @@ extension Apple_AppleParameters: SwiftProtobuf.Message, SwiftProtobuf._MessageIm
416416

417417
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
418418
try withExtendedLifetime(_storage) { (_storage: _StorageClass) in
419+
// The use of inline closures is to circumvent an issue where the compiler
420+
// allocates stack space for every if/case branch local when no optimizations
421+
// are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
422+
// https://github.com/apple/swift-protobuf/issues/1182
419423
if !_storage._merchantIdentifier.isEmpty {
420424
try visitor.visitSingularStringField(value: _storage._merchantIdentifier, fieldNumber: 1)
421425
}
422-
if _storage._merchantCapabilities != .threeds {
423-
try visitor.visitSingularEnumField(value: _storage._merchantCapabilities, fieldNumber: 2)
426+
if !_storage._merchantCapabilities.isEmpty {
427+
try visitor.visitPackedEnumField(value: _storage._merchantCapabilities, fieldNumber: 2)
424428
}
425429
if !_storage._supportedCountries.isEmpty {
426430
try visitor.visitRepeatedStringField(value: _storage._supportedCountries, fieldNumber: 3)
@@ -431,12 +435,12 @@ extension Apple_AppleParameters: SwiftProtobuf.Message, SwiftProtobuf._MessageIm
431435
if !_storage._requiredShippingContactFields.isEmpty {
432436
try visitor.visitRepeatedStringField(value: _storage._requiredShippingContactFields, fieldNumber: 5)
433437
}
434-
if let v = _storage._billingContact {
438+
try { if let v = _storage._billingContact {
435439
try visitor.visitSingularMessageField(value: v, fieldNumber: 6)
436-
}
437-
if let v = _storage._shippingContact {
440+
} }()
441+
try { if let v = _storage._shippingContact {
438442
try visitor.visitSingularMessageField(value: v, fieldNumber: 7)
439-
}
443+
} }()
440444
if !_storage._shippingMethods.isEmpty {
441445
try visitor.visitRepeatedMessageField(value: _storage._shippingMethods, fieldNumber: 8)
442446
}
@@ -499,18 +503,22 @@ extension Apple_Contact: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementa
499503
}
500504

501505
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
506+
// The use of inline closures is to circumvent an issue where the compiler
507+
// allocates stack space for every if/case branch local when no optimizations
508+
// are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
509+
// https://github.com/apple/swift-protobuf/issues/1182
502510
if !self.emailAddress.isEmpty {
503511
try visitor.visitSingularStringField(value: self.emailAddress, fieldNumber: 1)
504512
}
505-
if let v = self._name {
513+
try { if let v = self._name {
506514
try visitor.visitSingularMessageField(value: v, fieldNumber: 2)
507-
}
515+
} }()
508516
if !self.phoneNumber.isEmpty {
509517
try visitor.visitSingularStringField(value: self.phoneNumber, fieldNumber: 3)
510518
}
511-
if let v = self._postalAddress {
519+
try { if let v = self._postalAddress {
512520
try visitor.visitSingularMessageField(value: v, fieldNumber: 4)
513-
}
521+
} }()
514522
try unknownFields.traverse(visitor: &visitor)
515523
}
516524

@@ -590,6 +598,10 @@ extension Apple_PersonNameComponents: SwiftProtobuf.Message, SwiftProtobuf._Mess
590598

591599
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
592600
try withExtendedLifetime(_storage) { (_storage: _StorageClass) in
601+
// The use of inline closures is to circumvent an issue where the compiler
602+
// allocates stack space for every if/case branch local when no optimizations
603+
// are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
604+
// https://github.com/apple/swift-protobuf/issues/1182
593605
if !_storage._namePrefix.isEmpty {
594606
try visitor.visitSingularStringField(value: _storage._namePrefix, fieldNumber: 1)
595607
}
@@ -608,9 +620,9 @@ extension Apple_PersonNameComponents: SwiftProtobuf.Message, SwiftProtobuf._Mess
608620
if !_storage._nickname.isEmpty {
609621
try visitor.visitSingularStringField(value: _storage._nickname, fieldNumber: 6)
610622
}
611-
if let v = _storage._phoneticRepresentation {
623+
try { if let v = _storage._phoneticRepresentation {
612624
try visitor.visitSingularMessageField(value: v, fieldNumber: 7)
613-
}
625+
} }()
614626
}
615627
try unknownFields.traverse(visitor: &visitor)
616628
}

0 commit comments

Comments
 (0)