1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
//
// KWMBeforePayVC.m
// iCemarose
//
// Created by HouWeiBin on 16/9/2.
// Copyright © 2016年 kollway. All rights reserved.
//
#import "KWMBeforePayVC.h"
#import "KWMDiscountVC.h"
#import "KWMSelectAddressVC.h"
#import "KWMPayTypeVC.h"
#import "KWMPaySuccessVC.h"
#import "KWMShopCartModel.h"
#import "KWMStringUtil.h"
#import "KWMCheckoutWebViewVC.h"
#import "KWMPaySuccessVC.h"
#import "KWMStringUtil.h"
#import "UIColor+SAMAdditions.h"
@interface KWMBeforePayVC ()
@property (nonatomic) BUYCustomer *customer;
@end
@implementation KWMBeforePayVC
+(NSString *)kwmTag{
return @"KWMBeforePayVC";
}
- (void)setAddress:(BUYAddress *)address{
if (address) {
_address = address;
}
}
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self initDefaultData];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"提交订单";
}
-(void)initDefaultData{
if (!_address) {
[self initDefaultAddress];
}
if (!self.checkout){
[self initCheckOut];
}
}
//因为没有地址后进入的地址页面
-(void)kwm_getAddress:(BUYAddress *)address{
self.address = address;
}
//创建订单后进入的地址页面
-(void)kwm_selectAddress:(BUYCheckout *)checkout{
self.checkout = checkout;
self.checkout.shippingRate = nil;
self.checkout.shippingRateId = nil;
[self initData];
}
-(void)kwm_selectShippingRate:(BUYCheckout *)checkout{
self.checkout = checkout;
[self initData];
}
- (void)kwm_addedDiscount:(BUYCheckout *)checkout{
self.checkout = checkout;
[self initData];
}
- (void)kwm_addedGiftCard:(BUYCheckout *)checkout{
self.checkout = checkout;
[self initData];
}
- (void)kwm_removedGiftCard:(BUYCheckout *)checkout{
self.checkout = checkout;
[self initData];
}
- (void)initData{
if(self.checkout == nil){
[self showToast:@"未成功创建订单"];
return;
}
//地址
if(self.checkout.billingAddress){
BUYAddress *address = self.checkout.billingAddress;
self.vAddressHeight.constant = 90;
self.vHasAddress.hidden = NO;
self.lbNoAddress.hidden = YES;
_lbName.text = address.lastName;
_lbPhone.text = address.phone;
if(address.province != nil){
//城市 省份
_lbAddress.text = [NSString stringWithFormat:@"%@, %@",address.city,address.province];
}else{
//具体地址 补充
_lbAddress.text = address.city;
}
_lbAddressDetail.text = [NSString stringWithFormat:@"%@ %@",address.address1,address.address2 == nil?@"":address.address2];
self.lbShippingRate.textColor = [UIColor sam_colorWithHex:@"393939"];
self.lbShippingRate.text = @"请选择配送方式";
}else{
self.vAddressHeight.constant = 37;
self.vHasAddress.hidden = YES;
self.lbNoAddress.hidden = NO;
self.lbShippingRate.textColor = [UIColor grayColor];
self.lbShippingRate.text = @"请先选择地址";
}
//优惠码
if(self.checkout.discount!=nil){
self.lbDiscount.text = self.checkout.discount.code;
}else{
self.lbDiscount.text = @"请输入优惠码";
}
//礼品卡
if(self.checkout.giftCardsArray!=nil && self.checkout.giftCardsArray.count>0){
BUYGiftCard *giftCard = [self.checkout.giftCardsArray objectAtIndex:0];
self.lbGiftCard.text = [NSString stringWithFormat:@"******%@",giftCard.lastCharacters];
}else{
self.lbGiftCard.text = @"请输入礼品卡";
}
//配送方式
if(self.checkout.shippingRate!=nil){
self.lbShippingRate.text = self.checkout.shippingRate.title;
}else{
self.lbShippingRate.text = @"请选择配送方式";
}
//总价
if(self.checkout!=nil){
self.lbTotalPrice.text = [NSString stringWithFormat:@"¥%@",[KWMStringUtil getEUR2CNYstring:self.checkout.totalPrice]];
}
}
- (void)initDefaultAddress{
NSDictionary *customerDict = [[NSUserDefaults standardUserDefaults] objectForKey:@"customer"];
_customer = [[BUYCustomer alloc] initWithModelManager:self.client.modelManager JSONDictionary:customerDict];
if (_customer) {
NSDictionary *defaultAddress = [customerDict objectForKey:@"default_address"];
if (defaultAddress) {
_address = [[BUYAddress alloc] initWithModelManager:self.client.modelManager JSONDictionary:defaultAddress];
}
}
if(_address){
self.vAddressHeight.constant = 90;
self.vHasAddress.hidden = NO;
self.lbNoAddress.hidden = YES;
_lbName.text = _address.lastName;
_lbPhone.text = _address.phone;
if(_address.province != nil){
//城市 省份
_lbAddress.text = [NSString stringWithFormat:@"%@, %@",_address.city,_address.province];
}else{
//具体地址 补充
_lbAddress.text = _address.city;
}
_lbAddressDetail.text = [NSString stringWithFormat:@"%@ %@",_address.address1,_address.address2 == nil?@"":_address.address2];
self.lbShippingRate.textColor = [UIColor sam_colorWithHex:@"393939"];
self.lbShippingRate.text = @"请选择配送方式";
}else{
self.vAddressHeight.constant = 37;
self.vHasAddress.hidden = YES;
self.lbNoAddress.hidden = NO;
self.lbShippingRate.textColor = [UIColor grayColor];
self.lbShippingRate.text = @"请先选择地址";
}
}
//初始化订单
-(void)initBuyCart{
if(self.fastPayCart!=nil){
self.cart = self.fastPayCart;
return;
}
if(self.shopcartArray == nil || self.shopcartArray.count == 0){
[self showToast:@"购物车还没有商品,不能下单哦~"];
return;
}
self.cart = [self.client.modelManager insertCartWithJSONDictionary:nil];
//将商品加入
for (KWMShopCartModel *shopcartModel in self.shopcartArray) {
if(shopcartModel.shopCartDict == nil){
return;
}
BUYProduct *product = [self.client.modelManager insertProductWithJSONDictionary:shopcartModel.shopCartDict];
if(product == nil || product.identifier == nil){
return;
}
//将商品加入buycart中,每个商品就是一个商品规格model
if(product.variantsArray!=nil && product.variantsArray.count>0){
for(BUYProductVariant *mVariant in product.variantsArray){
if([mVariant.title isEqualToString:shopcartModel.size]){
[self.cart setVariant:mVariant withTotalQuantity:shopcartModel.quantity];
break;
}
}
}
}
}
//初始化订单
-(void)initCheckOut{
[self initBuyCart];
//如果已登录
if(self.cart && self.customer){
BUYCheckout *checkout = nil;
//如果self.checkout1=nil,则为缓存订单,反正则为新建订单
NSDictionary *checkoutCache = [self.userDao checkOutCache];
if(checkoutCache){
checkout = [[BUYCheckout alloc] initWithModelManager:self.client.modelManager JSONDictionary:checkoutCache];
[checkout updateWithCart:self.cart];
}else{
checkout = [[BUYCheckout alloc] initWithModelManager:self.client.modelManager cart:self.cart];
}
if(self.address){
if([self checkAddress:self.address]){
KWMSelectAddressVC *addressVC = (KWMSelectAddressVC *)[KWMBaseVC findControllerBy:[KWMSelectAddressVC kwmTag] fromStoryboard:@"ShopCart"];
addressVC.checkout = checkout;
addressVC.delegate = self;
[self.navigationController pushViewController:addressVC animated:YES];
return;
}
if([KWMStringUtil isEmpty:self.address.firstName]){
self.address.firstName = @"";
}
if([KWMStringUtil isEmpty:self.address.provinceCode]){
self.address.provinceCode = @"0";
}
checkout.shippingAddress = self.address;
checkout.billingAddress = self.address;
}
checkout.email = self.customer.email;
// self.client.urlScheme = @"CemaroseApp://";
if(checkoutCache){
[self requestUpdateCheckout:checkout isCacheCheckout:YES];
}else{
[self requestCreateCheckout:checkout];
}
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
//选择地址页面
-(void)onClickAddress:(id)sender{
if(self.checkout == nil){
[self showToast:@"未成功创建订单"];
return;
}
KWMSelectAddressVC *addressVC = (KWMSelectAddressVC *)[KWMBaseVC findControllerBy:[KWMSelectAddressVC kwmTag] fromStoryboard:@"ShopCart"];
addressVC.checkout = self.checkout;
addressVC.delegate = self;
[self.navigationController pushViewController:addressVC animated:YES];
}
//支付方式页面
-(void)onClickPayType:(id)sender{
if(self.checkout == nil){
[self showToast:@"未成功创建订单"];
return;
}
KWMPayTypeVC *typeVC = (KWMPayTypeVC *)[KWMBaseVC findControllerBy:[KWMPayTypeVC kwmTag] fromStoryboard:@"ShopCart"];
[self.navigationController pushViewController:typeVC animated:YES];
}
//优惠码页面
-(void)onClickDiscount:(id)sender{
if(self.checkout == nil){
[self showToast:@"未成功创建订单"];
return;
}
KWMDiscountVC *discountVC = (KWMDiscountVC *)[KWMBaseVC findControllerBy:[KWMDiscountVC kwmTag] fromStoryboard:@"ShopCart"];
discountVC.checkout = self.checkout;
discountVC.delegate = self;
[self.navigationController pushViewController:discountVC animated:YES];
}
//礼品卡页面
-(void)onClickGiftCard:(id)sender{
if(self.checkout == nil){
[self showToast:@"未成功创建订单"];
return;
}
KWMGiftCardVC *giftCardVC = (KWMGiftCardVC *)[KWMBaseVC findControllerBy:[KWMGiftCardVC kwmTag] fromStoryboard:@"ShopCart"];
giftCardVC.delegate = self;
giftCardVC.checkout = self.checkout;
[self.navigationController pushViewController:giftCardVC animated:YES];
}
//选择配送方式页面
-(void)onClickShipping:(id)sender{
if(self.checkout == nil){
[self showToast:@"未成功创建订单"];
return;
}
if(self.checkout.billingAddress == nil){
[self showToast:@"请先选择地址"];
return;
}
KWMShippingVC *shippingVC = (KWMShippingVC *)[KWMBaseVC findControllerBy:[KWMShippingVC kwmTag] fromStoryboard:@"ShopCart"];
shippingVC.delegate = self;
shippingVC.checkout = self.checkout;
[self.navigationController pushViewController:shippingVC animated:YES];
}
-(void)onClickPay:(id)sender{
[self startCheckout];
}
-(void)startCheckout{
if(self.checkout == nil){
[self showToast:@"未成功初始化订单"];
return;
}
if(self.checkout.shippingAddress == nil){
[self showToast:@"请先选择地址"];
return;
}
if(self.checkout.shippingRate == nil){
[self showToast:@"请先选择配送方式"];
return;
}
if(self.checkout.webCheckoutURL == nil){
[self showToast:@"未成功创建支付链接"];
return;
}
KWMCheckoutWebViewVC *checkoutVC = (KWMCheckoutWebViewVC *)[KWMBaseVC findControllerBy:[KWMCheckoutWebViewVC kwmTag] fromStoryboard:@"ShopCart"];
checkoutVC.payURL = self.checkout.webCheckoutURL;
[self.navigationController pushViewController:checkoutVC animated:YES];
}
//设置配送费到订单
-(void)setShippingToCheckout:(BUYShippingRate *)shippingRate{
if(self.checkout == nil){
return;
}
if(shippingRate == nil){
return;
}
[self.checkout setShippingRate:shippingRate];
[self requestUpdateCheckout:self.checkout isCacheCheckout:NO];
}
-(BOOL)checkAddress:(BUYAddress *)address{
if(address == nil){
[self showToast:@"您的地址尚未有任何地址,请前往选择地址"];
return YES;
}else if([KWMStringUtil isEmpty:address.firstName] && [KWMStringUtil isEmpty:address.lastName]){
[self showToast:@"您的地址缺少收件人姓名,请前往完善地址"];
return YES;
}else if([KWMStringUtil isEmpty:address.city]){
[self showToast:@"您的地址缺少所在城市,请前往完善地址"];
return YES;
}else if([KWMStringUtil isEmpty:address.zip]){
[self showToast:@"您的地址缺少邮政编码,请前往完善地址"];
return YES;
}else if([KWMStringUtil isEmpty:address.phone]){
[self showToast:@"您的地址缺少收件人电话号码,请前往完善地址"];
return YES;
}
return NO;
}
-(void)requestCreateCheckout:(BUYCheckout *)checkout{
[self showLoading];
//[self showToast:@"创建订单中"];
__weak KWMBeforePayVC *weakSelf = self;
self.checkoutCreationOperation = [self.client createCheckout:checkout completion:^(NSDictionary *dictionary,BUYCheckout *checkout, NSError *error) {
[self hideLoading];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
if (error == nil && checkout) {
weakSelf.checkout = checkout;
//[self showToast:@"创建订单成功"];
[weakSelf initData];
NSLog(@"saveDict: %@",dictionary);
[weakSelf.userDao saveCheckoutCache:dictionary];
if(weakSelf.checkout.shippingAddress!=nil){
[weakSelf requestShippingData];
}}
else {
[self hideLoading];
[weakSelf showError:error];
NSLog(@"Error creating checkout: %@", error);
}
}];
}
-(void)requestShippingData{
if(self.checkout==nil){
return;
}
[self showLoading];
__weak KWMBeforePayVC *weakSelf = self;
[self.client getShippingRatesForCheckoutWithToken:self.checkout.token completion:^(NSArray *shippingRates, BUYStatus status, NSError *error) {
[self hideLoading];
//自动设置配送
if (shippingRates && shippingRates.count > 0 && !error) {
[weakSelf setShippingToCheckout:shippingRates.firstObject];
}else {
[self hideLoading];
[weakSelf showError:error];
NSLog(@"Failed to retrieve shipping rates: %@", error);
}
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}];
}
-(void)requestUpdateCheckout:(BUYCheckout *)checkout isCacheCheckout:(BOOL)isCacheCheckout{
[self showLoading];
__weak KWMBeforePayVC *weakSelf = self;
[self.client updateCheckout:checkout completion:^(NSDictionary *dictionary, BUYCheckout *checkout, NSError *error) {
[self hideLoading];
if (error == nil && checkout) {
weakSelf.checkout = checkout;
[weakSelf initData];
NSLog(@"saveDict: %@", checkout);
[weakSelf.userDao saveCheckoutCache:dictionary];
}
else if(isCacheCheckout){//请求失败,并且为缓存订单更新,重新创建订单
weakSelf.checkout = nil;
[weakSelf.userDao deleteCheckoutCache];
[weakSelf initDefaultData];
}else{
[self hideLoading];
[weakSelf showError:error];
NSLog(@"Error applying checkout: %@", error);
}
}];
}
////判断订单是否支付
//-(void)requestCheckPay:(BUYCheckout *)checkCache{
// [self showLoading];
// __weak KWMBeforePayVC *weakSelf = self;
// [self.client getCompletionStatusOfCheckoutWithToken:checkCache.token completion:^(BUYStatus status, NSError * _Nullable error) {
// [self hideLoading];
// if (error == nil && status) {
// if(status == BUYStatusProcessing){
// weakSelf.checkout = checkCache;
// //在原有缓存订单的基础上设置初始数据
// [weakSelf initDefaultData];
// return;
// }
// }
// [weakSelf.userDao deleteCheckoutCache];
// [weakSelf initDefaultData];
//
// }];
//}
@end