Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
shopify_iossdk
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cemarose
shopify_iossdk
Commits
a438f0a8
Commit
a438f0a8
authored
May 30, 2016
by
Dima Bart
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Organize BUYClient+Checkout.h
parent
837e5b9e
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
132 additions
and
124 deletions
+132
-124
BUYClient+Checkout.h
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient+Checkout.h
+35
-31
BUYClient+Checkout.m
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient+Checkout.m
+97
-93
No files found.
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient+Checkout.h
View file @
a438f0a8
...
...
@@ -70,6 +70,8 @@ typedef void (^BUYDataGiftCardBlock)(BUYGiftCard * _Nullable giftCard, NSError *
@interface
BUYClient
(
Checkout
)
#pragma mark - Checkout -
/**
* Builds a checkout on Shopify. The checkout object is used to prepare an order
*
...
...
@@ -92,26 +94,19 @@ typedef void (^BUYDataGiftCardBlock)(BUYGiftCard * _Nullable giftCard, NSError *
-
(
BUYRequestOperation
*
)
createCheckoutWithCartToken
:(
NSString
*
)
cartToken
completion
:(
BUYDataCheckoutBlock
)
block
;
/**
*
Applies a gift card code to the checkout
.
*
Updates a given BUYCheckout on Shopify
.
*
* @param giftCardCode The gift card code to apply on an existing checkout on Shopify. Note: This is not the same as the gift card identifier.
* @param checkout An existing BUYCheckout on Shopify
* @param block (^BUYDataCheckoutBlock)(BUYCheckout *checkout, NSError *error);
* Note: There's no guarantee that the BUYCheckout returned will be the same as the one that is passed in.
* We recommended using the BUYCheckout returned in the block.
*
* @return The associated BUYRequestOperation
*/
-
(
BUYRequestOperation
*
)
applyGiftCardWithCode
:(
NSString
*
)
giftCardCode
toCheckout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCheckoutBlock
)
block
;
/**
* Removes a gift card from the checkout.
* Note: A BUYCheckout object with an `orderId` is a completed checkout.
*
* @param giftCardCode The BUYGiftCard identifier to remove on an existing checkout on Shopify.
* @param checkout An existing BUYCheckout on Shopify
* @param block (^BUYDataCheckoutBlock)(BUYCheckout *checkout, NSError *error);
* @param checkout The BUYCheckout to updated on Shopify
* @param block (^BUYDataCheckoutBlock)(BUYCheckout *checkout, NSError *error);
*
* @return The associated BUYRequestOperation
*/
-
(
BUYRequestOperation
*
)
removeGiftCard
:(
BUYGiftCard
*
)
giftCard
from
Checkout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCheckoutBlock
)
block
;
-
(
BUYRequestOperation
*
)
update
Checkout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCheckoutBlock
)
block
;
/**
* Retrieves an updated version of a BUYCheckout from Shopify.
...
...
@@ -127,21 +122,6 @@ typedef void (^BUYDataGiftCardBlock)(BUYGiftCard * _Nullable giftCard, NSError *
-
(
BUYRequestOperation
*
)
getCheckout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCheckoutBlock
)
block
;
/**
* Updates a given BUYCheckout on Shopify.
*
* Note: There's no guarantee that the BUYCheckout returned will be the same as the one that is passed in.
* We recommended using the BUYCheckout returned in the block.
*
* Note: A BUYCheckout object with an `orderId` is a completed checkout.
*
* @param checkout The BUYCheckout to updated on Shopify
* @param block (^BUYDataCheckoutBlock)(BUYCheckout *checkout, NSError *error);
*
* @return The associated BUYRequestOperation
*/
-
(
BUYRequestOperation
*
)
updateCheckout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCheckoutBlock
)
block
;
/**
* Finalizes the BUYCheckout and charges the payment provider (ex: Credit Card, Apple Pay, etc).
* This enqueues a completion job on Shopify and returns immediately.
* You must get the job's status by calling checkCompletionStatusOfCheckout:block
...
...
@@ -178,7 +158,7 @@ typedef void (^BUYDataGiftCardBlock)(BUYGiftCard * _Nullable giftCard, NSError *
*/
-
(
BUYRequestOperation
*
)
getCompletionStatusOfCheckoutURL
:(
NSURL
*
)
url
completion
:(
BUYDataStatusBlock
)
block
;
#pragma mark - Shipping Rates
#pragma mark - Shipping Rates
-
/**
* Retrieves a list of applicable shipping rates for a given BUYCheckout.
...
...
@@ -191,7 +171,7 @@ typedef void (^BUYDataGiftCardBlock)(BUYGiftCard * _Nullable giftCard, NSError *
*/
-
(
BUYRequestOperation
*
)
getShippingRatesForCheckout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataShippingRatesBlock
)
block
;
#pragma mark -
Payment Management
#pragma mark -
Cards -
/**
* Prepares a credit card for usage during the checkout process. This sends it to Shopify's secure servers.
...
...
@@ -212,6 +192,30 @@ typedef void (^BUYDataGiftCardBlock)(BUYGiftCard * _Nullable giftCard, NSError *
-
(
BUYRequestOperation
*
)
storeCreditCard
:(
BUYCreditCard
*
)
creditCard
checkout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCreditCardBlock
)
block
;
/**
* Applies a gift card code to the checkout.
*
* @param giftCardCode The gift card code to apply on an existing checkout on Shopify. Note: This is not the same as the gift card identifier.
* @param checkout An existing BUYCheckout on Shopify
* @param block (^BUYDataCheckoutBlock)(BUYCheckout *checkout, NSError *error);
*
* @return The associated BUYRequestOperation
*/
-
(
BUYRequestOperation
*
)
applyGiftCardWithCode
:(
NSString
*
)
giftCardCode
toCheckout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCheckoutBlock
)
block
;
/**
* Removes a gift card from the checkout.
*
* @param giftCardCode The BUYGiftCard identifier to remove on an existing checkout on Shopify.
* @param checkout An existing BUYCheckout on Shopify
* @param block (^BUYDataCheckoutBlock)(BUYCheckout *checkout, NSError *error);
*
* @return The associated BUYRequestOperation
*/
-
(
BUYRequestOperation
*
)
removeGiftCard
:(
BUYGiftCard
*
)
giftCard
fromCheckout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCheckoutBlock
)
block
;
#pragma mark - Reservations -
/**
* Convenience method to release all product inventory reservations by setting its
* `reservationTime` to `@0` and calls `updateCheckout:completion`. We recommend creating
* a new BUYCheckout object from a BUYCart for further API calls.
...
...
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient+Checkout.m
View file @
a438f0a8
...
...
@@ -43,26 +43,7 @@
@implementation
BUYClient
(
Checkout
)
#pragma mark - API -
-
(
void
)
handleCheckoutResponse
:(
NSDictionary
*
)
json
error
:(
NSError
*
)
error
block
:(
BUYDataCheckoutBlock
)
block
{
BUYCheckout
*
checkout
=
nil
;
if
(
json
&&
!
error
)
{
checkout
=
[
self
.
modelManager
insertCheckoutWithJSONDictionary
:
json
[
@"checkout"
]];
}
block
(
checkout
,
error
);
}
-
(
void
)
configureCheckout
:(
BUYCheckout
*
)
checkout
{
checkout
.
marketingAttribution
=
@{
@"medium"
:
@"iOS"
,
@"source"
:
self
.
applicationName
};
checkout
.
sourceName
=
@"mobile_app"
;
if
(
self
.
urlScheme
||
checkout
.
webReturnToURL
)
{
checkout
.
webReturnToURL
=
checkout
.
webReturnToURL
?:
[
NSURL
URLWithString
:
self
.
urlScheme
];
checkout
.
webReturnToLabel
=
checkout
.
webReturnToLabel
?:
[
@"Return to "
stringByAppendingString
:
self
.
applicationName
];
}
}
#pragma mark - Checkout -
-
(
BUYRequestOperation
*
)
createCheckout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCheckoutBlock
)
block
{
...
...
@@ -85,60 +66,16 @@
return
[
self
postCheckout
:
json
completion
:
block
];
}
-
(
BUYRequestOperation
*
)
postCheckout
:(
NSDictionary
*
)
checkoutJSON
completion
:(
BUYDataCheckoutBlock
)
block
{
return
[
self
postRequestForURL
:[
self
urlForCheckouts
]
object
:
checkoutJSON
completionHandler
:^
(
NSDictionary
*
json
,
NSHTTPURLResponse
*
response
,
NSError
*
error
)
{
[
self
handleCheckoutResponse
:
json
error
:
error
block
:
block
];
}];
}
-
(
BUYRequestOperation
*
)
applyGiftCardWithCode
:(
NSString
*
)
giftCardCode
toCheckout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCheckoutBlock
)
block
{
BUYAssertCheckout
(
checkout
);
BUYAssert
(
giftCardCode
.
length
>
0
,
@"Failed to apply gift card code. Invalid gift card code."
);
BUYGiftCard
*
giftCard
=
[
self
.
modelManager
giftCardWithCode
:
giftCardCode
];
NSURL
*
url
=
[
self
urlForCheckoutsUsingGiftCardWithToken
:
checkout
.
token
];
return
[
self
postRequestForURL
:
url
object
:
giftCard
completionHandler
:^
(
NSDictionary
*
json
,
NSHTTPURLResponse
*
response
,
NSError
*
error
)
{
if
(
json
&&
!
error
)
{
[
self
updateCheckout
:
checkout
withGiftCardDictionary
:
json
[
@"gift_card"
]
addingGiftCard
:
YES
];
}
block
(
checkout
,
error
);
}];
}
-
(
BUYRequestOperation
*
)
removeGiftCard
:(
BUYGiftCard
*
)
giftCard
fromCheckout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCheckoutBlock
)
block
-
(
BUYRequestOperation
*
)
updateCheckout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCheckoutBlock
)
block
{
BUYAssertCheckout
(
checkout
);
BUYAssert
(
giftCard
.
identifier
,
@"Failed to remove gift card. Gift card must have a valid identifier."
);
NSURL
*
url
=
[
self
urlForCheckoutsUsingGiftCard
:
giftCard
.
identifier
token
:
checkout
.
token
];
return
[
self
deleteRequestForURL
:
url
completionHandler
:
^
(
NSDictionary
*
json
,
NSHTTPURLResponse
*
response
,
NSError
*
error
)
{
if
(
!
error
)
{
[
self
updateCheckout
:
checkout
withGiftCardDictionary
:
json
[
@"gift_card"
]
addingGiftCard
:
NO
];
}
block
(
checkout
,
error
);
NSURL
*
route
=
[
self
urlForCheckoutsWithToken
:
checkout
.
token
];
return
[
self
patchRequestForURL
:
route
object
:
checkout
completionHandler
:^
(
NSDictionary
*
json
,
NSHTTPURLResponse
*
response
,
NSError
*
error
)
{
[
self
handleCheckoutResponse
:
json
error
:
error
block
:
block
];
}];
}
-
(
void
)
updateCheckout
:(
BUYCheckout
*
)
checkout
withGiftCardDictionary
:(
NSDictionary
*
)
giftCardDictionary
addingGiftCard
:(
BOOL
)
addingGiftCard
{
if
(
addingGiftCard
)
{
BUYGiftCard
*
giftCard
=
[
self
.
modelManager
insertGiftCardWithJSONDictionary
:
giftCardDictionary
];
[
checkout
.
giftCardsSet
addObject
:
giftCard
];
}
else
{
[
checkout
removeGiftCardWithIdentifier
:
giftCardDictionary
[
@"id"
]];
}
checkout
.
paymentDue
=
[
NSDecimalNumber
buy_decimalNumberFromJSON
:
giftCardDictionary
[
@"checkout"
][
@"payment_due"
]];
// Marking the checkout as clean. The properties we have updated above we don't need to re-sync with Shopify.
// There's also an issue with gift cards where syncing the gift card JSON won't work since the update endpoint
// doesn't accept the gift card without a gift card code (which we do not have).
[
checkout
markAsClean
];
}
-
(
BUYRequestOperation
*
)
getCheckout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCheckoutBlock
)
block
{
return
[
self
getCheckout
:
checkout
start
:
YES
completion
:
block
];
...
...
@@ -154,36 +91,12 @@
}];
}
-
(
BUYRequestOperation
*
)
updateCheckout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCheckoutBlock
)
block
{
BUYAssertCheckout
(
checkout
);
NSURL
*
url
=
[
self
urlForCheckoutsWithToken
:
checkout
.
token
];
return
[
self
patchRequestForURL
:
url
object
:
checkout
completionHandler
:^
(
NSDictionary
*
json
,
NSHTTPURLResponse
*
response
,
NSError
*
error
)
{
[
self
handleCheckoutResponse
:
json
error
:
error
block
:
block
];
}];
}
-
(
BUYOperation
*
)
completeCheckout
:(
BUYCheckout
*
)
checkout
paymentToken
:(
id
<
BUYPaymentToken
>
)
paymentToken
completion
:(
BUYDataCheckoutBlock
)
block
{
BUYCheckoutOperation
*
operation
=
[[
BUYCheckoutOperation
alloc
]
initWithClient
:
self
checkout
:
checkout
token
:
paymentToken
completion
:
block
];
[
self
startOperation
:
operation
];
return
operation
;
}
-
(
BUYRequestOperation
*
)
beginCheckout
:(
BUYCheckout
*
)
checkout
paymentToken
:(
id
<
BUYPaymentToken
>
)
paymentToken
completion
:(
BUYDataCheckoutBlock
)
block
{
BUYAssertCheckout
(
checkout
);
BOOL
isFree
=
(
checkout
.
paymentDue
&&
checkout
.
paymentDue
.
floatValue
==
0
);
BUYAssert
(
paymentToken
||
isFree
,
@"Failed to complete checkout. Checkout must have a payment token or have a payment value equal to $0.00"
);
NSURL
*
url
=
[
self
urlForCheckoutsCompletionWithToken
:
checkout
.
token
];
return
[
self
postRequestForURL
:
url
object
:[
paymentToken
JSONDictionary
]
start
:
NO
completionHandler
:^
(
NSDictionary
*
json
,
NSHTTPURLResponse
*
response
,
NSError
*
error
)
{
[
self
handleCheckoutResponse
:
json
error
:
error
block
:
block
];
}];
}
-
(
BUYRequestOperation
*
)
getCompletionStatusOfCheckout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataStatusBlock
)
block
{
BUYAssertCheckout
(
checkout
);
...
...
@@ -208,6 +121,22 @@
return
[
self
getCompletionStatusOfCheckoutToken
:
token
start
:
YES
completion
:
block
];
}
#pragma mark - Checkout Helpers -
-
(
BUYRequestOperation
*
)
beginCheckout
:(
BUYCheckout
*
)
checkout
paymentToken
:(
id
<
BUYPaymentToken
>
)
paymentToken
completion
:(
BUYDataCheckoutBlock
)
block
{
BUYAssertCheckout
(
checkout
);
BOOL
isFree
=
(
checkout
.
paymentDue
&&
checkout
.
paymentDue
.
floatValue
==
0
);
BUYAssert
(
paymentToken
||
isFree
,
@"Failed to complete checkout. Checkout must have a payment token or have a payment value equal to $0.00"
);
NSURL
*
route
=
[
self
urlForCheckoutsCompletionWithToken
:
checkout
.
token
];
return
[
self
postRequestForURL
:
route
object
:[
paymentToken
JSONDictionary
]
start
:
NO
completionHandler
:^
(
NSDictionary
*
json
,
NSHTTPURLResponse
*
response
,
NSError
*
error
)
{
[
self
handleCheckoutResponse
:
json
error
:
error
block
:
block
];
}];
}
-
(
BUYRequestOperation
*
)
getCompletionStatusOfCheckoutToken
:(
NSString
*
)
token
start
:(
BOOL
)
start
completion
:(
BUYDataStatusBlock
)
block
{
NSURL
*
url
=
[
self
urlForCheckoutsProcessingWithToken
:
token
];
...
...
@@ -216,6 +145,49 @@
}];
}
-
(
BUYRequestOperation
*
)
postCheckout
:(
NSDictionary
*
)
checkoutJSON
completion
:(
BUYDataCheckoutBlock
)
block
{
return
[
self
postRequestForURL
:[
self
urlForCheckouts
]
object
:
checkoutJSON
completionHandler
:^
(
NSDictionary
*
json
,
NSHTTPURLResponse
*
response
,
NSError
*
error
)
{
[
self
handleCheckoutResponse
:
json
error
:
error
block
:
block
];
}];
}
-
(
void
)
configureCheckout
:(
BUYCheckout
*
)
checkout
{
checkout
.
marketingAttribution
=
@{
@"medium"
:
@"iOS"
,
@"source"
:
self
.
applicationName
};
checkout
.
sourceName
=
@"mobile_app"
;
if
(
self
.
urlScheme
||
checkout
.
webReturnToURL
)
{
checkout
.
webReturnToURL
=
checkout
.
webReturnToURL
?:
[
NSURL
URLWithString
:
self
.
urlScheme
];
checkout
.
webReturnToLabel
=
checkout
.
webReturnToLabel
?:
[
@"Return to "
stringByAppendingString
:
self
.
applicationName
];
}
}
-
(
void
)
handleCheckoutResponse
:(
NSDictionary
*
)
json
error
:(
NSError
*
)
error
block
:(
BUYDataCheckoutBlock
)
block
{
BUYCheckout
*
checkout
=
nil
;
if
(
json
&&
!
error
)
{
checkout
=
[
self
.
modelManager
insertCheckoutWithJSONDictionary
:
json
[
@"checkout"
]];
}
block
(
checkout
,
error
);
}
-
(
void
)
updateCheckout
:(
BUYCheckout
*
)
checkout
withGiftCardDictionary
:(
NSDictionary
*
)
giftCardDictionary
addingGiftCard
:(
BOOL
)
addingGiftCard
{
if
(
addingGiftCard
)
{
BUYGiftCard
*
giftCard
=
[
self
.
modelManager
insertGiftCardWithJSONDictionary
:
giftCardDictionary
];
[
checkout
.
giftCardsSet
addObject
:
giftCard
];
}
else
{
[
checkout
removeGiftCardWithIdentifier
:
giftCardDictionary
[
@"id"
]];
}
checkout
.
paymentDue
=
[
NSDecimalNumber
buy_decimalNumberFromJSON
:
giftCardDictionary
[
@"checkout"
][
@"payment_due"
]];
// Marking the checkout as clean. The properties we have updated above we don't need to re-sync with Shopify.
// There's also an issue with gift cards where syncing the gift card JSON won't work since the update endpoint
// doesn't accept the gift card without a gift card code (which we do not have).
[
checkout
markAsClean
];
}
#pragma mark - Shipping Rates -
-
(
BUYRequestOperation
*
)
getShippingRatesForCheckout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataShippingRatesBlock
)
block
...
...
@@ -243,7 +215,7 @@
return
operation
;
}
#pragma mark -
Payment
s -
#pragma mark -
Card
s -
-
(
BUYRequestOperation
*
)
storeCreditCard
:(
BUYCreditCard
*
)
creditCard
checkout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCreditCardBlock
)
completion
{
...
...
@@ -266,6 +238,38 @@
}];
}
-
(
BUYRequestOperation
*
)
applyGiftCardWithCode
:(
NSString
*
)
giftCardCode
toCheckout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCheckoutBlock
)
block
{
BUYAssertCheckout
(
checkout
);
BUYAssert
(
giftCardCode
.
length
>
0
,
@"Failed to apply gift card code. Invalid gift card code."
);
BUYGiftCard
*
giftCard
=
[
self
.
modelManager
giftCardWithCode
:
giftCardCode
];
NSURL
*
route
=
[
self
urlForCheckoutsUsingGiftCardWithToken
:
checkout
.
token
];
return
[
self
postRequestForURL
:
route
object
:
giftCard
completionHandler
:^
(
NSDictionary
*
json
,
NSHTTPURLResponse
*
response
,
NSError
*
error
)
{
if
(
json
&&
!
error
)
{
[
self
updateCheckout
:
checkout
withGiftCardDictionary
:
json
[
@"gift_card"
]
addingGiftCard
:
YES
];
}
block
(
checkout
,
error
);
}];
}
-
(
BUYRequestOperation
*
)
removeGiftCard
:(
BUYGiftCard
*
)
giftCard
fromCheckout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCheckoutBlock
)
block
{
BUYAssertCheckout
(
checkout
);
BUYAssert
(
giftCard
.
identifier
,
@"Failed to remove gift card. Gift card must have a valid identifier."
);
NSURL
*
route
=
[
self
urlForCheckoutsUsingGiftCard
:
giftCard
.
identifier
token
:
checkout
.
token
];
return
[
self
deleteRequestForURL
:
route
completionHandler
:
^
(
NSDictionary
*
json
,
NSHTTPURLResponse
*
response
,
NSError
*
error
)
{
if
(
!
error
)
{
[
self
updateCheckout
:
checkout
withGiftCardDictionary
:
json
[
@"gift_card"
]
addingGiftCard
:
NO
];
}
block
(
checkout
,
error
);
}];
}
#pragma mark - Reservations -
-
(
BUYRequestOperation
*
)
removeProductReservationsFromCheckout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCheckoutBlock
)
block
{
BUYAssertCheckout
(
checkout
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment