内购的逻辑
This commit is contained in:
5
Podfile
5
Podfile
@@ -24,6 +24,11 @@ target 'xplan-ios' do
|
|||||||
pod 'SDCycleScrollView'
|
pod 'SDCycleScrollView'
|
||||||
#上传图片
|
#上传图片
|
||||||
pod 'Qiniu'
|
pod 'Qiniu'
|
||||||
|
#内购
|
||||||
|
pod 'IAPHelper'
|
||||||
|
#持久化存储
|
||||||
|
pod 'SSKeychain'
|
||||||
|
pod 'Base64'
|
||||||
#登录的
|
#登录的
|
||||||
pod 'mob_sharesdk'
|
pod 'mob_sharesdk'
|
||||||
pod 'mob_sharesdk/ShareSDKPlatforms/QQ'
|
pod 'mob_sharesdk/ShareSDKPlatforms/QQ'
|
||||||
|
14
Podfile.lock
14
Podfile.lock
@@ -14,8 +14,10 @@ PODS:
|
|||||||
- AFNetworking/Serialization (4.0.1)
|
- AFNetworking/Serialization (4.0.1)
|
||||||
- AFNetworking/UIKit (4.0.1):
|
- AFNetworking/UIKit (4.0.1):
|
||||||
- AFNetworking/NSURLSession
|
- AFNetworking/NSURLSession
|
||||||
|
- Base64 (1.1.2)
|
||||||
- FFPopup (1.1.5)
|
- FFPopup (1.1.5)
|
||||||
- HappyDNS (0.3.17)
|
- HappyDNS (0.3.17)
|
||||||
|
- IAPHelper (1.1)
|
||||||
- Masonry (1.1.0)
|
- Masonry (1.1.0)
|
||||||
- MBProgressHUD (1.2.0)
|
- MBProgressHUD (1.2.0)
|
||||||
- MJExtension (3.3.0)
|
- MJExtension (3.3.0)
|
||||||
@@ -43,12 +45,15 @@ PODS:
|
|||||||
- SDWebImage (5.11.1):
|
- SDWebImage (5.11.1):
|
||||||
- SDWebImage/Core (= 5.11.1)
|
- SDWebImage/Core (= 5.11.1)
|
||||||
- SDWebImage/Core (5.11.1)
|
- SDWebImage/Core (5.11.1)
|
||||||
|
- SSKeychain (1.4.1)
|
||||||
- SZTextView (1.3.0)
|
- SZTextView (1.3.0)
|
||||||
- YYText (1.0.7)
|
- YYText (1.0.7)
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- AFNetworking
|
- AFNetworking
|
||||||
|
- Base64
|
||||||
- FFPopup
|
- FFPopup
|
||||||
|
- IAPHelper
|
||||||
- Masonry
|
- Masonry
|
||||||
- MBProgressHUD
|
- MBProgressHUD
|
||||||
- MJExtension
|
- MJExtension
|
||||||
@@ -61,14 +66,17 @@ DEPENDENCIES:
|
|||||||
- ReactiveObjC
|
- ReactiveObjC
|
||||||
- SDCycleScrollView
|
- SDCycleScrollView
|
||||||
- SDWebImage
|
- SDWebImage
|
||||||
|
- SSKeychain
|
||||||
- SZTextView
|
- SZTextView
|
||||||
- YYText
|
- YYText
|
||||||
|
|
||||||
SPEC REPOS:
|
SPEC REPOS:
|
||||||
trunk:
|
trunk:
|
||||||
- AFNetworking
|
- AFNetworking
|
||||||
|
- Base64
|
||||||
- FFPopup
|
- FFPopup
|
||||||
- HappyDNS
|
- HappyDNS
|
||||||
|
- IAPHelper
|
||||||
- Masonry
|
- Masonry
|
||||||
- MBProgressHUD
|
- MBProgressHUD
|
||||||
- MJExtension
|
- MJExtension
|
||||||
@@ -79,13 +87,16 @@ SPEC REPOS:
|
|||||||
- ReactiveObjC
|
- ReactiveObjC
|
||||||
- SDCycleScrollView
|
- SDCycleScrollView
|
||||||
- SDWebImage
|
- SDWebImage
|
||||||
|
- SSKeychain
|
||||||
- SZTextView
|
- SZTextView
|
||||||
- YYText
|
- YYText
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce
|
AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce
|
||||||
|
Base64: cecfb41a004124895a7bcee567a89bae5a89d49b
|
||||||
FFPopup: a208dcee8db3e54ec4a88fcd6481f6f5d85b7a83
|
FFPopup: a208dcee8db3e54ec4a88fcd6481f6f5d85b7a83
|
||||||
HappyDNS: 848ef73e24f2b0e2752064223ce2dc0dd88900ea
|
HappyDNS: 848ef73e24f2b0e2752064223ce2dc0dd88900ea
|
||||||
|
IAPHelper: fd74f53b0ac142eed085777b88b86a11746a2dd4
|
||||||
Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
|
Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
|
||||||
MBProgressHUD: 3ee5efcc380f6a79a7cc9b363dd669c5e1ae7406
|
MBProgressHUD: 3ee5efcc380f6a79a7cc9b363dd669c5e1ae7406
|
||||||
MJExtension: 01704cca2b60a214c10761b6491eab74069d68a9
|
MJExtension: 01704cca2b60a214c10761b6491eab74069d68a9
|
||||||
@@ -96,9 +107,10 @@ SPEC CHECKSUMS:
|
|||||||
ReactiveObjC: 011caa393aa0383245f2dcf9bf02e86b80b36040
|
ReactiveObjC: 011caa393aa0383245f2dcf9bf02e86b80b36040
|
||||||
SDCycleScrollView: a0d74c3384caa72bdfc81470bdbc8c14b3e1fbcf
|
SDCycleScrollView: a0d74c3384caa72bdfc81470bdbc8c14b3e1fbcf
|
||||||
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
|
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
|
||||||
|
SSKeychain: 55cc80f66f5c73da827e3077f02e43528897db41
|
||||||
SZTextView: 094dc6acc9beec537685c545d6e3e0d4975174e1
|
SZTextView: 094dc6acc9beec537685c545d6e3e0d4975174e1
|
||||||
YYText: 5c461d709e24d55a182d1441c41dc639a18a4849
|
YYText: 5c461d709e24d55a182d1441c41dc639a18a4849
|
||||||
|
|
||||||
PODFILE CHECKSUM: ad9235b352788673e6e5cf8b0d1b7c840428a840
|
PODFILE CHECKSUM: e15982fef9e57d97997b5e561f9e5bd64d3950fc
|
||||||
|
|
||||||
COCOAPODS: 1.10.1
|
COCOAPODS: 1.10.1
|
||||||
|
@@ -135,6 +135,11 @@
|
|||||||
E88B5CBD26FB3BDF00DA9178 /* XPTeenagerAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = E88B5CBC26FB3BDF00DA9178 /* XPTeenagerAlertView.m */; };
|
E88B5CBD26FB3BDF00DA9178 /* XPTeenagerAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = E88B5CBC26FB3BDF00DA9178 /* XPTeenagerAlertView.m */; };
|
||||||
E88B5CC126FB407B00DA9178 /* XPMineUserInfoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E88B5CC026FB407B00DA9178 /* XPMineUserInfoViewController.m */; };
|
E88B5CC126FB407B00DA9178 /* XPMineUserInfoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E88B5CC026FB407B00DA9178 /* XPMineUserInfoViewController.m */; };
|
||||||
E88B5CC526FB42B000DA9178 /* XPMineUserInfoHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = E88B5CC426FB42B000DA9178 /* XPMineUserInfoHeaderView.m */; };
|
E88B5CC526FB42B000DA9178 /* XPMineUserInfoHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = E88B5CC426FB42B000DA9178 /* XPMineUserInfoHeaderView.m */; };
|
||||||
|
E89DA66427005932008483C1 /* XPIAPHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = E89DA66327005932008483C1 /* XPIAPHelper.m */; };
|
||||||
|
E89DA66727006443008483C1 /* RechargeStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = E89DA66627006443008483C1 /* RechargeStorage.m */; };
|
||||||
|
E89DA67227008D59008483C1 /* WalletInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E89DA67127008D59008483C1 /* WalletInfoModel.m */; };
|
||||||
|
E89DA67527009ACD008483C1 /* XPMineRechargeNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = E89DA67427009ACD008483C1 /* XPMineRechargeNavView.m */; };
|
||||||
|
E89DA67827009F16008483C1 /* NSObject+JSONString.m in Sources */ = {isa = PBXBuildFile; fileRef = E89DA67727009F16008483C1 /* NSObject+JSONString.m */; };
|
||||||
E8AC720D26F435F5007D6E91 /* UIImageView+LoadImage.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AC720C26F435F5007D6E91 /* UIImageView+LoadImage.m */; };
|
E8AC720D26F435F5007D6E91 /* UIImageView+LoadImage.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AC720C26F435F5007D6E91 /* UIImageView+LoadImage.m */; };
|
||||||
E8AC721026F43955007D6E91 /* UIImageConstant.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AC720F26F43955007D6E91 /* UIImageConstant.m */; };
|
E8AC721026F43955007D6E91 /* UIImageConstant.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AC720F26F43955007D6E91 /* UIImageConstant.m */; };
|
||||||
E8AC721326F46ADD007D6E91 /* XPMineSettingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AC721226F46ADD007D6E91 /* XPMineSettingViewController.m */; };
|
E8AC721326F46ADD007D6E91 /* XPMineSettingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AC721226F46ADD007D6E91 /* XPMineSettingViewController.m */; };
|
||||||
@@ -442,6 +447,16 @@
|
|||||||
E88B5CC026FB407B00DA9178 /* XPMineUserInfoViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoViewController.m; sourceTree = "<group>"; };
|
E88B5CC026FB407B00DA9178 /* XPMineUserInfoViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoViewController.m; sourceTree = "<group>"; };
|
||||||
E88B5CC326FB42B000DA9178 /* XPMineUserInfoHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoHeaderView.h; sourceTree = "<group>"; };
|
E88B5CC326FB42B000DA9178 /* XPMineUserInfoHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoHeaderView.h; sourceTree = "<group>"; };
|
||||||
E88B5CC426FB42B000DA9178 /* XPMineUserInfoHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoHeaderView.m; sourceTree = "<group>"; };
|
E88B5CC426FB42B000DA9178 /* XPMineUserInfoHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoHeaderView.m; sourceTree = "<group>"; };
|
||||||
|
E89DA66227005931008483C1 /* XPIAPHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPIAPHelper.h; sourceTree = "<group>"; };
|
||||||
|
E89DA66327005932008483C1 /* XPIAPHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPIAPHelper.m; sourceTree = "<group>"; };
|
||||||
|
E89DA66527006443008483C1 /* RechargeStorage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RechargeStorage.h; sourceTree = "<group>"; };
|
||||||
|
E89DA66627006443008483C1 /* RechargeStorage.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RechargeStorage.m; sourceTree = "<group>"; };
|
||||||
|
E89DA67027008D59008483C1 /* WalletInfoModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WalletInfoModel.h; sourceTree = "<group>"; };
|
||||||
|
E89DA67127008D59008483C1 /* WalletInfoModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WalletInfoModel.m; sourceTree = "<group>"; };
|
||||||
|
E89DA67327009ACD008483C1 /* XPMineRechargeNavView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineRechargeNavView.h; sourceTree = "<group>"; };
|
||||||
|
E89DA67427009ACD008483C1 /* XPMineRechargeNavView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineRechargeNavView.m; sourceTree = "<group>"; };
|
||||||
|
E89DA67627009F16008483C1 /* NSObject+JSONString.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSObject+JSONString.h"; sourceTree = "<group>"; };
|
||||||
|
E89DA67727009F16008483C1 /* NSObject+JSONString.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSObject+JSONString.m"; sourceTree = "<group>"; };
|
||||||
E8AC720B26F435F5007D6E91 /* UIImageView+LoadImage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIImageView+LoadImage.h"; sourceTree = "<group>"; };
|
E8AC720B26F435F5007D6E91 /* UIImageView+LoadImage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIImageView+LoadImage.h"; sourceTree = "<group>"; };
|
||||||
E8AC720C26F435F5007D6E91 /* UIImageView+LoadImage.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+LoadImage.m"; sourceTree = "<group>"; };
|
E8AC720C26F435F5007D6E91 /* UIImageView+LoadImage.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+LoadImage.m"; sourceTree = "<group>"; };
|
||||||
E8AC720E26F43955007D6E91 /* UIImageConstant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIImageConstant.h; sourceTree = "<group>"; };
|
E8AC720E26F43955007D6E91 /* UIImageConstant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIImageConstant.h; sourceTree = "<group>"; };
|
||||||
@@ -941,6 +956,8 @@
|
|||||||
189DD5A726DFA09700AB55B1 /* Tool */ = {
|
189DD5A726DFA09700AB55B1 /* Tool */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
E89DA66C2700873B008483C1 /* NSObject */,
|
||||||
|
E89DA6612700590A008483C1 /* IAPHelper */,
|
||||||
E8B846B926FD7BE600A777FE /* UploadImage */,
|
E8B846B926FD7BE600A777FE /* UploadImage */,
|
||||||
E8EEB8EA26FC2050007C6EBA /* SDPhotoBrowser */,
|
E8EEB8EA26FC2050007C6EBA /* SDPhotoBrowser */,
|
||||||
E81366E426F0A4820076364C /* NSString */,
|
E81366E426F0A4820076364C /* NSString */,
|
||||||
@@ -1214,6 +1231,26 @@
|
|||||||
path = MineInfo;
|
path = MineInfo;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
E89DA6612700590A008483C1 /* IAPHelper */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
E89DA66227005931008483C1 /* XPIAPHelper.h */,
|
||||||
|
E89DA66327005932008483C1 /* XPIAPHelper.m */,
|
||||||
|
E89DA66527006443008483C1 /* RechargeStorage.h */,
|
||||||
|
E89DA66627006443008483C1 /* RechargeStorage.m */,
|
||||||
|
);
|
||||||
|
path = IAPHelper;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
E89DA66C2700873B008483C1 /* NSObject */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
E89DA67627009F16008483C1 /* NSObject+JSONString.h */,
|
||||||
|
E89DA67727009F16008483C1 /* NSObject+JSONString.m */,
|
||||||
|
);
|
||||||
|
path = NSObject;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
E8AC720A26F435AF007D6E91 /* UIImageView */ = {
|
E8AC720A26F435AF007D6E91 /* UIImageView */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -1257,6 +1294,8 @@
|
|||||||
children = (
|
children = (
|
||||||
E8B846CD26FDD96100A777FE /* XPMineRechageHeadView.h */,
|
E8B846CD26FDD96100A777FE /* XPMineRechageHeadView.h */,
|
||||||
E8B846CE26FDD96100A777FE /* XPMineRechageHeadView.m */,
|
E8B846CE26FDD96100A777FE /* XPMineRechageHeadView.m */,
|
||||||
|
E89DA67327009ACD008483C1 /* XPMineRechargeNavView.h */,
|
||||||
|
E89DA67427009ACD008483C1 /* XPMineRechargeNavView.m */,
|
||||||
);
|
);
|
||||||
path = Recharge;
|
path = Recharge;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1275,6 +1314,8 @@
|
|||||||
children = (
|
children = (
|
||||||
E8B846DA26FDE24300A777FE /* RechargeListModel.h */,
|
E8B846DA26FDE24300A777FE /* RechargeListModel.h */,
|
||||||
E8B846DB26FDE24300A777FE /* RechargeListModel.m */,
|
E8B846DB26FDE24300A777FE /* RechargeListModel.m */,
|
||||||
|
E89DA67027008D59008483C1 /* WalletInfoModel.h */,
|
||||||
|
E89DA67127008D59008483C1 /* WalletInfoModel.m */,
|
||||||
);
|
);
|
||||||
path = Recharge;
|
path = Recharge;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1612,6 +1653,7 @@
|
|||||||
E88B5CBA26FB329C00DA9178 /* XPMineTeenagerPwdProtocol.h in Sources */,
|
E88B5CBA26FB329C00DA9178 /* XPMineTeenagerPwdProtocol.h in Sources */,
|
||||||
E88B5CB226FB1CFF00DA9178 /* XPMineTeenagerProtocol.h in Sources */,
|
E88B5CB226FB1CFF00DA9178 /* XPMineTeenagerProtocol.h in Sources */,
|
||||||
E824546626F5FF6000BE8163 /* XPMineResetPayPasswordProtocol.h in Sources */,
|
E824546626F5FF6000BE8163 /* XPMineResetPayPasswordProtocol.h in Sources */,
|
||||||
|
E89DA66427005932008483C1 /* XPIAPHelper.m in Sources */,
|
||||||
E824545E26F5EF2200BE8163 /* XPMineVerifIdentityProtocol.h in Sources */,
|
E824545E26F5EF2200BE8163 /* XPMineVerifIdentityProtocol.h in Sources */,
|
||||||
E824545326F5CEAD00BE8163 /* XPMineModifPayProtocol.h in Sources */,
|
E824545326F5CEAD00BE8163 /* XPMineModifPayProtocol.h in Sources */,
|
||||||
E824544826F5945300BE8163 /* XPMinePayPwdProtocol.h in Sources */,
|
E824544826F5945300BE8163 /* XPMinePayPwdProtocol.h in Sources */,
|
||||||
@@ -1651,6 +1693,7 @@
|
|||||||
E8AC722F26F49610007D6E91 /* XPMineNotificationItemModel.m in Sources */,
|
E8AC722F26F49610007D6E91 /* XPMineNotificationItemModel.m in Sources */,
|
||||||
E8E70D7A26F2F16600F03460 /* XPMinePresent.m in Sources */,
|
E8E70D7A26F2F16600F03460 /* XPMinePresent.m in Sources */,
|
||||||
E8EEB8F226FC2050007C6EBA /* SDPhotoBrowser.m in Sources */,
|
E8EEB8F226FC2050007C6EBA /* SDPhotoBrowser.m in Sources */,
|
||||||
|
E89DA67827009F16008483C1 /* NSObject+JSONString.m in Sources */,
|
||||||
E81C27AB26EF2D920031E639 /* ThirdUserInfo.m in Sources */,
|
E81C27AB26EF2D920031E639 /* ThirdUserInfo.m in Sources */,
|
||||||
E81C279D26EEEC620031E639 /* XPConstant.m in Sources */,
|
E81C279D26EEEC620031E639 /* XPConstant.m in Sources */,
|
||||||
187EEEFE26E8A82C002833B2 /* NSObject+AutoCoding.m in Sources */,
|
187EEEFE26E8A82C002833B2 /* NSObject+AutoCoding.m in Sources */,
|
||||||
@@ -1729,6 +1772,7 @@
|
|||||||
E88B5CA526FB088600DA9178 /* XPMineTeenagerViewController.m in Sources */,
|
E88B5CA526FB088600DA9178 /* XPMineTeenagerViewController.m in Sources */,
|
||||||
E8EEB90926FC579A007C6EBA /* XPMineUserInfoEditTableViewCell.m in Sources */,
|
E8EEB90926FC579A007C6EBA /* XPMineUserInfoEditTableViewCell.m in Sources */,
|
||||||
18C17A5D26F338F300C48E11 /* XplanFBFlutterViewContainer.m in Sources */,
|
18C17A5D26F338F300C48E11 /* XplanFBFlutterViewContainer.m in Sources */,
|
||||||
|
E89DA67527009ACD008483C1 /* XPMineRechargeNavView.m in Sources */,
|
||||||
186A536926FC6F2E00D67B2C /* XCShareView.m in Sources */,
|
186A536926FC6F2E00D67B2C /* XCShareView.m in Sources */,
|
||||||
186A534C26FC6ED900D67B2C /* TTAlertView.m in Sources */,
|
186A534C26FC6ED900D67B2C /* TTAlertView.m in Sources */,
|
||||||
E8B825BF26E9E57D009E8E9F /* LoginTicketInfo.m in Sources */,
|
E8B825BF26E9E57D009E8E9F /* LoginTicketInfo.m in Sources */,
|
||||||
@@ -1762,9 +1806,11 @@
|
|||||||
E8B846DC26FDE24300A777FE /* RechargeListModel.m in Sources */,
|
E8B846DC26FDE24300A777FE /* RechargeListModel.m in Sources */,
|
||||||
189DD75926E6003C00AB55B1 /* Api.m in Sources */,
|
189DD75926E6003C00AB55B1 /* Api.m in Sources */,
|
||||||
E88B5CB826FB325200DA9178 /* XPMineTeenagerPwdPresenter.m in Sources */,
|
E88B5CB826FB325200DA9178 /* XPMineTeenagerPwdPresenter.m in Sources */,
|
||||||
|
E89DA66727006443008483C1 /* RechargeStorage.m in Sources */,
|
||||||
189DD53F26DE255600AB55B1 /* main.m in Sources */,
|
189DD53F26DE255600AB55B1 /* main.m in Sources */,
|
||||||
E872308D26E89DAA00B90D4F /* LoginInputView.m in Sources */,
|
E872308D26E89DAA00B90D4F /* LoginInputView.m in Sources */,
|
||||||
189DD58F26DF97E700AB55B1 /* LoginPresenter.m in Sources */,
|
189DD58F26DF97E700AB55B1 /* LoginPresenter.m in Sources */,
|
||||||
|
E89DA67227008D59008483C1 /* WalletInfoModel.m in Sources */,
|
||||||
189DD55026DE37F900AB55B1 /* MvpViewController.m in Sources */,
|
189DD55026DE37F900AB55B1 /* MvpViewController.m in Sources */,
|
||||||
E81366F326F0B7C80076364C /* LoginFullInfoViewController.m in Sources */,
|
E81366F326F0B7C80076364C /* LoginFullInfoViewController.m in Sources */,
|
||||||
);
|
);
|
||||||
|
@@ -45,6 +45,18 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
/// @param userInfo 需要更新的用户信息
|
/// @param userInfo 需要更新的用户信息
|
||||||
+ (void)complementInfoWithComplection:(HttpRequestHelperCompletion)complection
|
+ (void)complementInfoWithComplection:(HttpRequestHelperCompletion)complection
|
||||||
userInfo:(NSDictionary *)userInfo;
|
userInfo:(NSDictionary *)userInfo;
|
||||||
|
/// 获取用户钱包余额信息
|
||||||
|
/// @param complection 完成
|
||||||
|
/// @param uid 用户uid
|
||||||
|
/// @param ticket ticketg
|
||||||
|
+ (void)getUserWalletInfoWithComplection:(HttpRequestHelperCompletion)complection
|
||||||
|
uid:(NSString *)uid
|
||||||
|
ticket:(NSString *)ticket;
|
||||||
|
/// 批量验证
|
||||||
|
/// @param complection 完成
|
||||||
|
/// @param transcationIdStr 需要验证的数据
|
||||||
|
+ (void)requestCheckTranscationIdsWithComplection:(HttpRequestHelperCompletion)complection
|
||||||
|
transcationIdStr:(NSString *)transcationIdStr;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
@@ -70,4 +70,20 @@
|
|||||||
[HttpRequestHelper request:@"user/v2/update" method:HttpRequestHelperMethodPOST params:userInfo completion:complection];
|
[HttpRequestHelper request:@"user/v2/update" method:HttpRequestHelperMethodPOST params:userInfo completion:complection];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// 获取用户钱包余额信息
|
||||||
|
/// @param complection 完成
|
||||||
|
/// @param uid 用户uid
|
||||||
|
/// @param ticket ticketg
|
||||||
|
+ (void)getUserWalletInfoWithComplection:(HttpRequestHelperCompletion)complection uid:(NSString *)uid ticket:(NSString *)ticket {
|
||||||
|
[self makeRequest:@"purse/query" method:HttpRequestHelperMethodGET completion:complection, __FUNCTION__, uid, ticket,nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 批量验证
|
||||||
|
/// @param complection 完成
|
||||||
|
/// @param transcationIdStr 需要验证的数据
|
||||||
|
+ (void)requestCheckTranscationIdsWithComplection:(HttpRequestHelperCompletion)complection
|
||||||
|
transcationIdStr:(NSString *)transcationIdStr {
|
||||||
|
[self makeRequest:@"verify/checkIOSChargeRecord" method:HttpRequestHelperMethodPOST completion:complection, __FUNCTION__,transcationIdStr, nil];
|
||||||
|
}
|
||||||
@end
|
@end
|
||||||
|
30
xplan-ios/Base/Tool/IAPHelper/RechargeStorage.h
Normal file
30
xplan-ios/Base/Tool/IAPHelper/RechargeStorage.h
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
//
|
||||||
|
// RechargeStorage.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/26.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface RechargeStorage : NSObject
|
||||||
|
|
||||||
|
/// 根据商品id保存凭证
|
||||||
|
+ (BOOL)saveTranscationId:(NSString *)transcationId
|
||||||
|
recipt:(NSString *)recipt
|
||||||
|
uid:(NSString *)uid;
|
||||||
|
|
||||||
|
/// 获取所有凭证
|
||||||
|
+ (NSArray *)getAllReciptsWithUid:(NSString *)uid;
|
||||||
|
|
||||||
|
/// 根据订单删除凭证
|
||||||
|
+ (BOOL)delegateTranscationId:(NSString *)transcationId
|
||||||
|
uid:(NSString *)uid;
|
||||||
|
|
||||||
|
/// 删除所有凭证
|
||||||
|
+ (void)delegateAllTranscationIdsWithUid:(NSString *)uid;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
61
xplan-ios/Base/Tool/IAPHelper/RechargeStorage.m
Normal file
61
xplan-ios/Base/Tool/IAPHelper/RechargeStorage.m
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
//
|
||||||
|
// RechargeStorage.m
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/26.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "RechargeStorage.h"
|
||||||
|
#import <SSKeychain/SSKeychain.h>
|
||||||
|
|
||||||
|
#define kappStoreKey @"kappStoreKey"
|
||||||
|
|
||||||
|
@implementation RechargeStorage
|
||||||
|
|
||||||
|
/// 根据商品id保存凭证
|
||||||
|
+ (BOOL)saveTranscationId:(NSString *)transcationId
|
||||||
|
recipt:(NSString *)recipt
|
||||||
|
uid:(NSString *)uid {
|
||||||
|
NSString * key = [NSString stringWithFormat:@"%@_%@", kappStoreKey, uid];
|
||||||
|
return [SSKeychain setPassword:recipt forService:key account:transcationId error:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// 获取所有凭证
|
||||||
|
+ (NSArray *)getAllReciptsWithUid:(NSString *)uid {
|
||||||
|
NSArray *transcationIds = [SSKeychain allAccounts];
|
||||||
|
NSMutableArray *temArr = [NSMutableArray array];
|
||||||
|
[transcationIds enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
||||||
|
if ([obj[@"svce"] isKindOfClass:[NSString class]]) {
|
||||||
|
NSString * key = [NSString stringWithFormat:@"%@_%@", kappStoreKey, uid];
|
||||||
|
if ([obj[@"svce"] isEqualToString:key]) {
|
||||||
|
NSString *recipt = [SSKeychain passwordForService:key account:obj[@"acct"] error:nil];
|
||||||
|
NSData *data = [recipt dataUsingEncoding:NSUTF8StringEncoding];
|
||||||
|
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
|
||||||
|
[temArr addObject:json];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
return temArr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 根据订单删除凭证
|
||||||
|
+ (BOOL)delegateTranscationId:(NSString *)transcationId uid:(NSString *)uid {
|
||||||
|
NSString * key = [NSString stringWithFormat:@"%@_%@", kappStoreKey, uid];
|
||||||
|
return [SSKeychain deletePasswordForService:key account:transcationId error:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 删除所有凭证
|
||||||
|
+ (void)delegateAllTranscationIdsWithUid:(NSString *)uid {
|
||||||
|
NSArray *transcationIds = [SSKeychain allAccounts];
|
||||||
|
[transcationIds enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
||||||
|
if ([obj[@"svce"] isKindOfClass:[NSString class]]) {
|
||||||
|
NSString * key = [NSString stringWithFormat:@"%@_%@", kappStoreKey, uid];
|
||||||
|
if ([obj[@"svce"] isEqualToString:key]) {
|
||||||
|
[SSKeychain deletePasswordForService:key account:obj[@"acct"]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
36
xplan-ios/Base/Tool/IAPHelper/XPIAPHelper.h
Normal file
36
xplan-ios/Base/Tool/IAPHelper/XPIAPHelper.h
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
//
|
||||||
|
// XPIAPHelper.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/26.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
typedef NS_ENUM(NSInteger ,PaymentStatus) {
|
||||||
|
PaymentStatus_Purchasing = 1,//付款中
|
||||||
|
PaymentStatus_Purchased, //付款操作已经完成
|
||||||
|
PaymentStatus_Failed, //付款操作失败
|
||||||
|
PaymentStatus_Deferred, //未知状态
|
||||||
|
};
|
||||||
|
|
||||||
|
@protocol XPIAPHelperDelegate <NSObject>
|
||||||
|
|
||||||
|
///当前充值的状态
|
||||||
|
- (void)rechargeProcessStatus:(PaymentStatus)status;
|
||||||
|
|
||||||
|
///充值成功回调id
|
||||||
|
- (void)rechargeSuccess:(NSString *)transactionIdentifier;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface XPIAPHelper : NSObject
|
||||||
|
+ (instancetype)shareHelper;
|
||||||
|
///代理
|
||||||
|
@property (nonatomic,weak) id<XPIAPHelperDelegate> delegate;
|
||||||
|
///购买商品
|
||||||
|
- (void)buyAppProductWithAppProductId:(NSString *)appProductId;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
88
xplan-ios/Base/Tool/IAPHelper/XPIAPHelper.m
Normal file
88
xplan-ios/Base/Tool/IAPHelper/XPIAPHelper.m
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
//
|
||||||
|
// XPIAPHelper.m
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/26.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "XPIAPHelper.h"
|
||||||
|
#import <IAPHelper/IAPHelper.h>
|
||||||
|
#import <IAPShare.h>
|
||||||
|
|
||||||
|
@implementation XPIAPHelper
|
||||||
|
|
||||||
|
+ (instancetype)shareHelper {
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
static XPIAPHelper * helper;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
helper = [[XPIAPHelper alloc] init];
|
||||||
|
});
|
||||||
|
return helper;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (void)buyAppProductWithAppProductId:(NSString *)appProductId {
|
||||||
|
NSSet* dataSet = [[NSSet alloc] initWithObjects:appProductId, nil];
|
||||||
|
[IAPShare sharedHelper].iap = [[IAPHelper alloc] initWithProductIdentifiers:dataSet];
|
||||||
|
[[IAPShare sharedHelper].iap requestProductsWithCompletion:^(SKProductsRequest *request, SKProductsResponse *response) {
|
||||||
|
if (response != nil && response.products.count) {
|
||||||
|
///有这个内购的产品
|
||||||
|
} else if (!response.products.count) {
|
||||||
|
///请求内购产品失败,无产品数量
|
||||||
|
#warning to do 此处埋点一个 没有内购产品
|
||||||
|
return;
|
||||||
|
} else if (!response) {
|
||||||
|
#warning to do 此处埋点一个 请求内购没有响应
|
||||||
|
///请求内购产品失败,内购无响应
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
#warning to do 此处埋点一个 异常 发起付款失败
|
||||||
|
///异常 发起付款失败
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (response.products.firstObject) {
|
||||||
|
[[IAPShare sharedHelper].iap buyProduct:response.products.firstObject onCompletion:^(SKPaymentTransaction *transcation) {
|
||||||
|
NSLog(@"%@",transcation.error.description);
|
||||||
|
switch(transcation.transactionState) {
|
||||||
|
case SKPaymentTransactionStatePurchased: {
|
||||||
|
NSLog(@"付款完成状态, 要做出相关的处理");
|
||||||
|
[[SKPaymentQueue defaultQueue] finishTransaction:transcation];
|
||||||
|
if (self.delegate && [self.delegate respondsToSelector:@selector(rechargeProcessStatus:)]) {
|
||||||
|
[self.delegate rechargeProcessStatus:PaymentStatus_Purchased];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.delegate && [self.delegate respondsToSelector:@selector(rechargeSuccess:)]) {
|
||||||
|
[self.delegate rechargeSuccess:transcation.transactionIdentifier];
|
||||||
|
}
|
||||||
|
//同步返回购买成功后,需要请求服务器二次校验
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SKPaymentTransactionStateFailed: {
|
||||||
|
[[SKPaymentQueue defaultQueue] finishTransaction:transcation];
|
||||||
|
if (self.delegate && [self.delegate respondsToSelector:@selector(rechargeProcessStatus:)]) {
|
||||||
|
[self.delegate rechargeProcessStatus:PaymentStatus_Failed];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SKPaymentTransactionStatePurchasing: {
|
||||||
|
NSLog(@"正在购买中");
|
||||||
|
if (self.delegate && [self.delegate respondsToSelector:@selector(rechargeProcessStatus:)]) {
|
||||||
|
[self.delegate rechargeProcessStatus:PaymentStatus_Purchasing];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default: {
|
||||||
|
[[SKPaymentQueue defaultQueue] finishTransaction:transcation];
|
||||||
|
if (self.delegate && [self.delegate respondsToSelector:@selector(rechargeProcessStatus:)]) {
|
||||||
|
[self.delegate rechargeProcessStatus:PaymentStatus_Deferred];
|
||||||
|
}
|
||||||
|
NSLog(@"其它");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
16
xplan-ios/Base/Tool/NSObject/NSObject+JSONString.h
Normal file
16
xplan-ios/Base/Tool/NSObject/NSObject+JSONString.h
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// NSObject+JSONString.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/26.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface NSObject (JSONString)
|
||||||
|
- (NSString *)objectToJSONString;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
16
xplan-ios/Base/Tool/NSObject/NSObject+JSONString.m
Normal file
16
xplan-ios/Base/Tool/NSObject/NSObject+JSONString.m
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// NSObject+JSONString.m
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/26.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "NSObject+JSONString.h"
|
||||||
|
#import <MJExtension/MJExtension.h>
|
||||||
|
@implementation NSObject (JSONString)
|
||||||
|
|
||||||
|
- (NSString *)objectToJSONString {
|
||||||
|
return [self mj_JSONString];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@@ -19,6 +19,7 @@ typedef NS_ENUM(NSUInteger, URLType) {
|
|||||||
kIdentityURL,///实名认证
|
kIdentityURL,///实名认证
|
||||||
kGameBindAccountURL,
|
kGameBindAccountURL,
|
||||||
kNurseryURL,///护苗计划
|
kNurseryURL,///护苗计划
|
||||||
|
kRechargePrivacyURL////充值协议
|
||||||
};
|
};
|
||||||
|
|
||||||
NSString * const URLWithType(URLType type);
|
NSString * const URLWithType(URLType type);
|
||||||
|
@@ -19,6 +19,7 @@ NSString * const URLWithType(URLType type) {
|
|||||||
@(kIdentityURL):@"modules/identity/new.html",//实人认证
|
@(kIdentityURL):@"modules/identity/new.html",//实人认证
|
||||||
@(kGameBindAccountURL):@"modules/game/bindAccount.html",///绑定账号
|
@(kGameBindAccountURL):@"modules/game/bindAccount.html",///绑定账号
|
||||||
@(kNurseryURL):@"activity/cleanNet/index.html",
|
@(kNurseryURL):@"activity/cleanNet/index.html",
|
||||||
|
@(kRechargePrivacyURL) : @"modules/rule/rechargeAgreement.html",//充值协议
|
||||||
};
|
};
|
||||||
NSString * url = [dic objectForKey:@(type)];
|
NSString * url = [dic objectForKey:@(type)];
|
||||||
|
|
||||||
|
@@ -99,6 +99,38 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
/// @param channelType channel
|
/// @param channelType channel
|
||||||
+ (void)getRechargeListWithComplection:(HttpRequestHelperCompletion)complection
|
+ (void)getRechargeListWithComplection:(HttpRequestHelperCompletion)complection
|
||||||
channelType:(NSString *)channelType;
|
channelType:(NSString *)channelType;
|
||||||
|
|
||||||
|
/// 苹果下单
|
||||||
|
/// @param complection 完成
|
||||||
|
/// @param chargeProdId 充值id
|
||||||
|
/// @param uid 用户的uid
|
||||||
|
/// @param ticket ticket
|
||||||
|
/// @param deviceInfo uuid
|
||||||
|
/// @param clientIp ip地址
|
||||||
|
+ (void)requestIAPRechargeWithComplection:(HttpRequestHelperCompletion)complection
|
||||||
|
chargeProdId:(NSString *)chargeProdId
|
||||||
|
uid:(NSString *)uid
|
||||||
|
ticket:(NSString *)ticket
|
||||||
|
deviceInfo:(NSString *)deviceInfo
|
||||||
|
clientIp:(NSString *)clientIp;
|
||||||
|
|
||||||
|
/// 验证凭据
|
||||||
|
/// @param complection 完成
|
||||||
|
/// @param receipt base 64 recepit
|
||||||
|
/// @param chooseEnv @"true"
|
||||||
|
/// @param chargeRecordId 服务端生成的订单编号
|
||||||
|
/// @param transcationId 内购的唯一标识符
|
||||||
|
/// @param uid 用户uid
|
||||||
|
/// @param ticket ticket
|
||||||
|
+ (void)checkReceiptWithComplection:(HttpRequestHelperCompletion)complection
|
||||||
|
receipt:(NSString *)receipt
|
||||||
|
chooseEnv:(NSString *)chooseEnv
|
||||||
|
chargeRecordId:(NSString *)chargeRecordId
|
||||||
|
transcationId:(NSString *)transcationId
|
||||||
|
uid:(NSString *)uid
|
||||||
|
ticket:(NSString *)ticket;
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
@@ -105,4 +105,30 @@
|
|||||||
+ (void)getRechargeListWithComplection:(HttpRequestHelperCompletion)complection channelType:(NSString *)channelType {
|
+ (void)getRechargeListWithComplection:(HttpRequestHelperCompletion)complection channelType:(NSString *)channelType {
|
||||||
[self makeRequest:@"chargeprod/list" method:HttpRequestHelperMethodGET completion:complection, __FUNCTION__,channelType, nil];
|
[self makeRequest:@"chargeprod/list" method:HttpRequestHelperMethodGET completion:complection, __FUNCTION__,channelType, nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// 苹果下单
|
||||||
|
/// @param complection 完成
|
||||||
|
/// @param chargeProdId 充值id
|
||||||
|
/// @param uid 用户的uid
|
||||||
|
/// @param ticket ticket
|
||||||
|
/// @param deviceInfo uuid
|
||||||
|
/// @param clientIp ip地址
|
||||||
|
+ (void)requestIAPRechargeWithComplection:(HttpRequestHelperCompletion)complection chargeProdId:(NSString *)chargeProdId uid:(NSString *)uid ticket:(NSString *)ticket deviceInfo:(NSString *)deviceInfo clientIp:(NSString *)clientIp {
|
||||||
|
[self makeRequest:@"order/placeV2" method:HttpRequestHelperMethodPOST completion:complection, __FUNCTION__,chargeProdId, uid, ticket, deviceInfo, clientIp, nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// 验证凭据
|
||||||
|
/// @param complection 完成
|
||||||
|
/// @param receipt base 64 recepit
|
||||||
|
/// @param chooseEnv @"true"
|
||||||
|
/// @param chargeRecordId 服务端生成的订单编号
|
||||||
|
/// @param transcationId 内购的唯一标识符
|
||||||
|
/// @param uid 用户uid
|
||||||
|
/// @param ticket ticket
|
||||||
|
+ (void)checkReceiptWithComplection:(HttpRequestHelperCompletion)complection receipt:(NSString *)receipt chooseEnv:(NSString *)chooseEnv chargeRecordId:(NSString *)chargeRecordId transcationId:(NSString *)transcationId uid:(NSString *)uid ticket:(NSString *)ticket {
|
||||||
|
[self makeRequest:@"order/placeV2" method:HttpRequestHelperMethodPOST completion:complection, __FUNCTION__,receipt, chooseEnv, chargeRecordId, transcationId, uid, ticket, nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
31
xplan-ios/Main/Mine/Model/Recharge/WalletInfoModel.h
Normal file
31
xplan-ios/Main/Mine/Model/Recharge/WalletInfoModel.h
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
//
|
||||||
|
// WalletBalanceInfoModel.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/26.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "BaseObject.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface WalletInfoModel : BaseObject
|
||||||
|
/// 用户 uid
|
||||||
|
@property(nonatomic, assign) NSInteger uid;
|
||||||
|
/// 钻石数量
|
||||||
|
@property(nonatomic, copy)NSString *goldNum;
|
||||||
|
//钻石数量(音游)
|
||||||
|
@property(nonatomic, copy)NSString *diamonds;
|
||||||
|
|
||||||
|
@property(nonatomic, copy)NSString *chargeGoldNum;
|
||||||
|
|
||||||
|
@property(nonatomic, assign)NSInteger amount;
|
||||||
|
/// 钻石数量
|
||||||
|
@property(nonatomic, assign) double diamondNum;
|
||||||
|
|
||||||
|
@property(nonatomic, copy)NSString *depositNum;
|
||||||
|
/// 是否有钻石转增功能
|
||||||
|
@property (nonatomic, assign) BOOL sendGold;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
12
xplan-ios/Main/Mine/Model/Recharge/WalletInfoModel.m
Normal file
12
xplan-ios/Main/Mine/Model/Recharge/WalletInfoModel.m
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
//
|
||||||
|
// WalletBalanceInfoModel.m
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/26.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "WalletInfoModel.h"
|
||||||
|
|
||||||
|
@implementation WalletInfoModel
|
||||||
|
|
||||||
|
@end
|
@@ -10,9 +10,26 @@
|
|||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
@interface XPMineRechargePresenter : BaseMvpPresenter
|
@interface XPMineRechargePresenter : BaseMvpPresenter
|
||||||
|
|
||||||
|
/// 获取钱包信息
|
||||||
|
- (void)getUserWalletInfo;
|
||||||
/// 请求内购列表
|
/// 请求内购列表
|
||||||
/// @param channel 目前是8
|
/// @param channel 目前是8
|
||||||
- (void)requestRechargeListWithChannel:(NSString *)channel;
|
- (void)requestRechargeListWithChannel:(NSString *)channel;
|
||||||
|
|
||||||
|
/// 获取充值的订单编号
|
||||||
|
/// @param chargeProdId 苹果服务器的充值 的id
|
||||||
|
- (void)requestIAPRechargeOrderWithChargeProdId:(NSString *)chargeProdId;
|
||||||
|
|
||||||
|
/// 充值成功二次验证
|
||||||
|
/// @param receipt 凭据
|
||||||
|
/// @param orderId 订单编号
|
||||||
|
/// @param transcationId 商品id
|
||||||
|
- (void)checkReceiptWithData:(NSString *)receipt orderId:(NSString *)orderId transcationId:(NSString *)transcationId;
|
||||||
|
|
||||||
|
/// 批量验证内购掉单
|
||||||
|
/// @param transcations 凭据的数组
|
||||||
|
- (void)checkTranscationIds:(NSArray *)transcations;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
@@ -8,14 +8,30 @@
|
|||||||
#import "XPMineRechargePresenter.h"
|
#import "XPMineRechargePresenter.h"
|
||||||
///Api
|
///Api
|
||||||
#import "Api+Mine.h"
|
#import "Api+Mine.h"
|
||||||
|
///Tool
|
||||||
|
#import "AccountInfoStorage.h"
|
||||||
|
#import "YYUtility.h"
|
||||||
|
#import "NSObject+JSONString.h"
|
||||||
///P
|
///P
|
||||||
#import "XPMineRechargeProtocol.h"
|
#import "XPMineRechargeProtocol.h"
|
||||||
///Model
|
///Model
|
||||||
#import "RechargeListModel.h"
|
#import "RechargeListModel.h"
|
||||||
|
#import "WalletInfoModel.h"
|
||||||
|
|
||||||
@implementation XPMineRechargePresenter
|
@implementation XPMineRechargePresenter
|
||||||
|
|
||||||
|
|
||||||
|
/// 获取钱包信息
|
||||||
|
- (void)getUserWalletInfo {
|
||||||
|
NSString * uid = [AccountInfoStorage instance].getUid;
|
||||||
|
NSString * ticket = [AccountInfoStorage instance].getTicket;
|
||||||
|
[Api getUserWalletInfoWithComplection:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||||
|
WalletInfoModel * model = [WalletInfoModel modelWithDictionary:data.data];
|
||||||
|
[[self getView] getUserWalletInfo:model];
|
||||||
|
}] uid:uid ticket:ticket];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// 请求内购列表
|
/// 请求内购列表
|
||||||
/// @param channel 目前是8
|
/// @param channel 目前是8
|
||||||
- (void)requestRechargeListWithChannel:(NSString *)channel {
|
- (void)requestRechargeListWithChannel:(NSString *)channel {
|
||||||
@@ -25,4 +41,40 @@
|
|||||||
}] channelType:channel];
|
}] channelType:channel];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// 获取充值的订单编号
|
||||||
|
/// @param chargeProdId 苹果服务器的充值 的id
|
||||||
|
- (void)requestIAPRechargeOrderWithChargeProdId:(NSString *)chargeProdId {
|
||||||
|
NSString * uid = [AccountInfoStorage instance].getUid;
|
||||||
|
NSString * ticket = [AccountInfoStorage instance].getTicket;
|
||||||
|
NSString * deviceInfo = [YYUtility deviceID];
|
||||||
|
NSString * clientIp= [YYUtility ipAddress];
|
||||||
|
[Api requestIAPRechargeWithComplection:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||||
|
NSString *orderId = (NSString *)data.data[@"recordId"];
|
||||||
|
[[self getView] requestIAPRechargeOrderSuccess:orderId chargeProdId:chargeProdId];
|
||||||
|
} showLoading:YES] chargeProdId:chargeProdId uid:uid ticket:ticket deviceInfo:deviceInfo clientIp:clientIp];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// 充值成功二次验证
|
||||||
|
/// @param receipt 凭据
|
||||||
|
/// @param orderId 订单编号
|
||||||
|
/// @param transcationId 商品id
|
||||||
|
- (void)checkReceiptWithData:(NSString *)receipt orderId:(NSString *)orderId transcationId:(NSString *)transcationId {
|
||||||
|
NSString * uid = [AccountInfoStorage instance].getUid;
|
||||||
|
NSString * ticket = [AccountInfoStorage instance].getTicket;
|
||||||
|
[Api checkReceiptWithComplection:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||||
|
[[self getView] checkReceiptSuccess:transcationId];
|
||||||
|
} showLoading:YES] receipt:receipt chooseEnv:@"true" chargeRecordId:orderId transcationId:transcationId uid:uid ticket:ticket];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// 批量验证内购掉单
|
||||||
|
/// @param transcations 凭据的数组
|
||||||
|
- (void)checkTranscationIds:(NSArray *)transcations {
|
||||||
|
NSString * transcationIdStr = [transcations objectToJSONString];
|
||||||
|
[Api requestCheckTranscationIdsWithComplection:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||||
|
[[self getView] checkTranscationIdsSuccess];
|
||||||
|
}] transcationIdStr:transcationIdStr];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@@ -8,12 +8,18 @@
|
|||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
@class WalletInfoModel;
|
||||||
@protocol XPMineRechargeProtocol <NSObject>
|
@protocol XPMineRechargeProtocol <NSObject>
|
||||||
|
///请求钱包余额信息
|
||||||
|
- (void)getUserWalletInfo:(WalletInfoModel *)balanceInfo;
|
||||||
///请求充值列表成功
|
///请求充值列表成功
|
||||||
- (void)requestRechargeListSucccess:(NSArray *)list;
|
- (void)requestRechargeListSucccess:(NSArray *)list;
|
||||||
|
///请求充值id的状态成功
|
||||||
|
- (void)requestIAPRechargeOrderSuccess:(NSString *)orderId chargeProdId:(NSString *)chargeProdId;
|
||||||
|
///二次校验成功
|
||||||
|
- (void)checkReceiptSuccess:(NSString *)transcationId;
|
||||||
|
///批量验证凭据成功
|
||||||
|
- (void)checkTranscationIdsSuccess;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
@@ -8,10 +8,20 @@
|
|||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
@class RechargeListModel;
|
@class RechargeListModel,XPMineRechargeTableViewCell;
|
||||||
|
|
||||||
|
@protocol XPMineRechargeTableViewCellDelegate <NSObject>
|
||||||
|
|
||||||
|
///点击了某个item
|
||||||
|
- (void)xPMineRechargeTableViewCell:(XPMineRechargeTableViewCell *)cell didSelectItem:(RechargeListModel *)listModel;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
@interface XPMineRechargeTableViewCell : UITableViewCell
|
@interface XPMineRechargeTableViewCell : UITableViewCell
|
||||||
///
|
///数据源
|
||||||
@property (nonatomic,strong) RechargeListModel *listModel;
|
@property (nonatomic,strong) RechargeListModel *listModel;
|
||||||
|
///代理
|
||||||
|
@property (nonatomic,weak) id<XPMineRechargeTableViewCellDelegate> delegate;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
@@ -36,7 +36,9 @@
|
|||||||
}
|
}
|
||||||
#pragma mark - Response
|
#pragma mark - Response
|
||||||
- (void)rechargeButtonAction:(UIButton *)sender {
|
- (void)rechargeButtonAction:(UIButton *)sender {
|
||||||
|
if (self.delegate && [self.delegate respondsToSelector:@selector(xPMineRechargeTableViewCell:didSelectItem:)]) {
|
||||||
|
[self.delegate xPMineRechargeTableViewCell:self didSelectItem:self.listModel];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Private Method
|
#pragma mark - Private Method
|
||||||
|
@@ -8,48 +8,84 @@
|
|||||||
#import "XPMineRechargeViewController.h"
|
#import "XPMineRechargeViewController.h"
|
||||||
///Third
|
///Third
|
||||||
#import <Masonry/Masonry.h>
|
#import <Masonry/Masonry.h>
|
||||||
#import <YYText/YYLabel.h>
|
#import <Base64/MF_Base64Additions.h>
|
||||||
///Tool
|
///Tool
|
||||||
#import "ThemeColor.h"
|
#import "ThemeColor.h"
|
||||||
#import "XPMacro.h"
|
#import "XPMacro.h"
|
||||||
|
#import "XPHtmlUrl.h"
|
||||||
|
#import "XPIAPHelper.h"
|
||||||
|
#import "RechargeStorage.h"
|
||||||
|
#import "AccountInfoStorage.h"
|
||||||
|
#import "NSObject+JSONString.h"
|
||||||
///Model
|
///Model
|
||||||
#import "RechargeListModel.h"
|
#import "RechargeListModel.h"
|
||||||
///View
|
///View
|
||||||
#import "XPMineRechageHeadView.h"
|
#import "XPMineRechageHeadView.h"
|
||||||
#import "XPMineRechargeTableViewCell.h"
|
#import "XPMineRechargeTableViewCell.h"
|
||||||
|
#import "XPMineRechargeNavView.h"
|
||||||
///P
|
///P
|
||||||
#import "XPMineRechargePresenter.h"
|
#import "XPMineRechargePresenter.h"
|
||||||
#import "XPMineRechargeProtocol.h"
|
#import "XPMineRechargeProtocol.h"
|
||||||
|
///VC
|
||||||
|
#import "XPWebViewController.h"
|
||||||
|
|
||||||
@interface XPMineRechargeViewController ()<XPMineRechargeProtocol, UITableViewDelegate, UITableViewDataSource>
|
@interface XPMineRechargeViewController ()<XPMineRechargeProtocol, UITableViewDelegate, UITableViewDataSource, XPMineRechargeTableViewCellDelegate, XPIAPHelperDelegate, XPMineRechargeNavViewDelegate>
|
||||||
///数据源
|
///数据源
|
||||||
@property (nonatomic,strong) NSArray *datasource;
|
@property (nonatomic,strong) NSArray *datasource;
|
||||||
///列表
|
///列表
|
||||||
@property (nonatomic,strong) UITableView *tableView;
|
@property (nonatomic,strong) UITableView *tableView;
|
||||||
///
|
///
|
||||||
@property (nonatomic,strong) XPMineRechageHeadView *headeView;
|
@property (nonatomic,strong) XPMineRechageHeadView *headeView;
|
||||||
|
///订单编号
|
||||||
|
@property (nonatomic,copy) NSString *orderId;
|
||||||
|
///导航栏
|
||||||
|
@property (nonatomic,strong) XPMineRechargeNavView *navView;
|
||||||
|
///
|
||||||
|
@property (nonatomic,strong) UIStackView *stackView;
|
||||||
|
///同意
|
||||||
|
@property (nonatomic,strong) UILabel *agreeLabel;
|
||||||
///充值协议
|
///充值协议
|
||||||
@property (nonatomic,strong) YYLabel *rechargeProtocolLabel;
|
@property (nonatomic,strong) UIButton *protcoloButton;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation XPMineRechargeViewController
|
@implementation XPMineRechargeViewController
|
||||||
|
|
||||||
|
- (void)dealloc {
|
||||||
|
[XPIAPHelper shareHelper].delegate = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)isHiddenNavBar {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
- (XPMineRechargePresenter *)createPresenter {
|
- (XPMineRechargePresenter *)createPresenter {
|
||||||
return [[XPMineRechargePresenter alloc] init];
|
return [[XPMineRechargePresenter alloc] init];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)viewDidLoad {
|
- (void)viewDidLoad {
|
||||||
[super viewDidLoad];
|
[super viewDidLoad];
|
||||||
[self getRechargeList];
|
[self initHttpData];
|
||||||
[self initSubViews];
|
[self initSubViews];
|
||||||
[self initSubViewConstraints];
|
[self initSubViewConstraints];
|
||||||
}
|
}
|
||||||
|
#pragma mark - Response
|
||||||
|
- (void)protcoloButtonAction:(UIButton *)sender {
|
||||||
|
XPWebViewController * webVC= [[XPWebViewController alloc] init];
|
||||||
|
webVC.url = URLWithType(kRechargePrivacyURL);
|
||||||
|
[self.navigationController pushViewController:webVC animated:YES];
|
||||||
|
}
|
||||||
#pragma mark - Private Method
|
#pragma mark - Private Method
|
||||||
- (void)initSubViews {
|
- (void)initSubViews {
|
||||||
[self.view addSubview:self.tableView];
|
[self.view addSubview:self.tableView];
|
||||||
[self.view addSubview:self.rechargeProtocolLabel];
|
[self.view addSubview:self.navView];
|
||||||
|
[self.view addSubview:self.stackView];
|
||||||
|
|
||||||
|
[self.stackView addArrangedSubview:self.agreeLabel];
|
||||||
|
[self.stackView addArrangedSubview:self.protcoloButton];
|
||||||
self.tableView.tableHeaderView = self.headeView;
|
self.tableView.tableHeaderView = self.headeView;
|
||||||
|
|
||||||
|
[XPIAPHelper shareHelper].delegate = self;
|
||||||
|
self.automaticallyAdjustsScrollViewInsets = NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)initSubViewConstraints {
|
- (void)initSubViewConstraints {
|
||||||
@@ -57,16 +93,65 @@
|
|||||||
make.edges.mas_equalTo(self.view);
|
make.edges.mas_equalTo(self.view);
|
||||||
}];
|
}];
|
||||||
|
|
||||||
[self.rechargeProtocolLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
[self.stackView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
make.centerX.mas_equalTo(self.view);
|
make.centerX.mas_equalTo(self.view);
|
||||||
make.bottom.mas_equalTo(self.view).offset(-20 - kSafeAreaBottomHeight);
|
make.bottom.mas_equalTo(self.view).offset(-20 - kSafeAreaBottomHeight);
|
||||||
}];
|
}];
|
||||||
|
|
||||||
|
[self.navView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.right.top.mas_equalTo(self.view);
|
||||||
|
make.height.mas_equalTo(kNavigationHeight);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)initHttpData {
|
||||||
|
[self getRechargeList];
|
||||||
|
[self getUserWalletBalanceInfo];
|
||||||
|
[self checkTranscationIds];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)getRechargeList {
|
- (void)getRechargeList {
|
||||||
[self.presenter requestRechargeListWithChannel:@"8"];
|
[self.presenter requestRechargeListWithChannel:@"8"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)getUserWalletBalanceInfo {
|
||||||
|
[self.presenter getUserWalletInfo];
|
||||||
|
}
|
||||||
|
|
||||||
|
///批量验证
|
||||||
|
- (void)checkTranscationIds {
|
||||||
|
NSString * uid = [AccountInfoStorage instance].getUid;
|
||||||
|
NSArray * array = [RechargeStorage getAllReciptsWithUid:uid];
|
||||||
|
if (array.count > 0) {
|
||||||
|
[self.presenter checkTranscationIds:array];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///充值成功之后保存订单到钥匙串
|
||||||
|
- (void)saveRechageReciptWithTransactionIdentifier:(NSString *)transactionIdentifier {
|
||||||
|
NSData *receipt = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];
|
||||||
|
NSString *encodeStr = [receipt base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
|
||||||
|
NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
|
||||||
|
[dictionary setObject:transactionIdentifier forKey:@"transcationId"];
|
||||||
|
[dictionary setObject:encodeStr forKey:@"recipt"];
|
||||||
|
[dictionary setObject:self.orderId forKey:@"orderId"];
|
||||||
|
NSString *reciptJson = [dictionary objectToJSONString];
|
||||||
|
NSString * uid = [AccountInfoStorage instance].getUid;
|
||||||
|
BOOL saveSuccess = [RechargeStorage saveTranscationId:transactionIdentifier recipt:reciptJson uid:uid];
|
||||||
|
if (!saveSuccess) {
|
||||||
|
#warning to do 保存失败 需要埋点
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///删除本地保存的
|
||||||
|
- (void)deleteRechageReciptWithTransactionIdentifier:(NSString *)transactionIdentifier {
|
||||||
|
NSString * uid = [AccountInfoStorage instance].getUid;
|
||||||
|
BOOL deleteSuccess = [RechargeStorage delegateTranscationId:transactionIdentifier uid:uid];
|
||||||
|
if (deleteSuccess) {
|
||||||
|
#warning to do 保存失败 需要埋点
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - UITableViewDelegate And UITableViewDataSource
|
#pragma mark - UITableViewDelegate And UITableViewDataSource
|
||||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
||||||
return self.datasource.count;
|
return self.datasource.count;
|
||||||
@@ -75,6 +160,7 @@
|
|||||||
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
XPMineRechargeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineRechargeTableViewCell class]) forIndexPath:indexPath];
|
XPMineRechargeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineRechargeTableViewCell class]) forIndexPath:indexPath];
|
||||||
cell.listModel = self.datasource[indexPath.row];
|
cell.listModel = self.datasource[indexPath.row];
|
||||||
|
cell.delegate = self;
|
||||||
return cell;
|
return cell;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,12 +171,74 @@
|
|||||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
|
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
|
||||||
[tableView deselectRowAtIndexPath:indexPath animated:true];
|
[tableView deselectRowAtIndexPath:indexPath animated:true];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - XPMineRechargeTableViewCellDelegate
|
||||||
|
- (void)xPMineRechargeTableViewCell:(XPMineRechargeTableViewCell *)cell didSelectItem:(RechargeListModel *)listModel {
|
||||||
|
if (listModel.chargeProdId) {
|
||||||
|
[self.presenter requestIAPRechargeOrderWithChargeProdId:listModel.chargeProdId];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - XPMineRechargeNavViewDelegate
|
||||||
|
- (void)xPMineRechargeNavView:(XPMineRechargeNavView *)view didClickBackButton:(UIButton *)sender {
|
||||||
|
[self.navigationController popViewControllerAnimated:YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - XPIAPHelperDelegate
|
||||||
|
///当前充值的状态
|
||||||
|
- (void)rechargeProcessStatus:(PaymentStatus)status {
|
||||||
|
[self hideHUD];
|
||||||
|
if (status == PaymentStatus_Purchased) {
|
||||||
|
[self showLoading];
|
||||||
|
} else if (status == PaymentStatus_Purchasing) {
|
||||||
|
[self showLoading];
|
||||||
|
} else if (status == PaymentStatus_Failed) {
|
||||||
|
[self showErrorToast:@"购买失败"];
|
||||||
|
} else if (status == PaymentStatus_Deferred) {
|
||||||
|
[self showErrorToast:@"出现未知错误,请重新尝试"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///充值成功回调id
|
||||||
|
- (void)rechargeSuccess:(NSString *)transactionIdentifier {
|
||||||
|
///保存唯一凭证
|
||||||
|
[self saveRechageReciptWithTransactionIdentifier:transactionIdentifier];
|
||||||
|
NSData *receiptData = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];
|
||||||
|
NSString * receipt = [MF_Base64Codec base64StringFromData:receiptData];
|
||||||
|
///二次验证
|
||||||
|
[self.presenter checkReceiptWithData:receipt orderId:self.orderId transcationId:transactionIdentifier];
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - XPMineRechargeProtocol
|
#pragma mark - XPMineRechargeProtocol
|
||||||
- (void)requestRechargeListSucccess:(NSArray *)list {
|
- (void)requestRechargeListSucccess:(NSArray *)list {
|
||||||
self.datasource = list;
|
self.datasource = list;
|
||||||
[self.tableView reloadData];
|
[self.tableView reloadData];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)requestIAPRechargeOrderSuccess:(NSString *)orderId chargeProdId:(NSString *)chargeProdId {
|
||||||
|
if (orderId.length > 0) {
|
||||||
|
self.orderId = orderId;
|
||||||
|
[[XPIAPHelper shareHelper] buyAppProductWithAppProductId:chargeProdId];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///二次验证成功
|
||||||
|
- (void)checkReceiptSuccess:(NSString *)transcationId {
|
||||||
|
[self deleteRechageReciptWithTransactionIdentifier:transcationId];
|
||||||
|
///刷新一下用户的💎
|
||||||
|
[self getUserWalletBalanceInfo];
|
||||||
|
self.orderId = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)getUserWalletInfo:(WalletInfoModel *)balanceInfo {
|
||||||
|
self.headeView.walletInfo = balanceInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)checkTranscationIdsSuccess {
|
||||||
|
NSString * uid = [AccountInfoStorage instance].getUid;
|
||||||
|
[RechargeStorage delegateAllTranscationIdsWithUid:uid];
|
||||||
|
}
|
||||||
|
#pragma mark - Getters And Setters
|
||||||
- (UITableView *)tableView {
|
- (UITableView *)tableView {
|
||||||
if (!_tableView) {
|
if (!_tableView) {
|
||||||
_tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
|
_tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
|
||||||
@@ -114,21 +262,44 @@
|
|||||||
return _headeView;
|
return _headeView;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (YYLabel *)rechargeProtocolLabel {
|
|
||||||
if (!_rechargeProtocolLabel) {
|
- (UIStackView *)stackView {
|
||||||
_rechargeProtocolLabel = [[YYLabel alloc] init];
|
if (!_stackView) {
|
||||||
_rechargeProtocolLabel.font = [UIFont systemFontOfSize:12];
|
_stackView = [[UIStackView alloc] init];
|
||||||
NSString * name = [NSString stringWithFormat:@"《用户充值协议》"];
|
_stackView.axis = UILayoutConstraintAxisHorizontal;
|
||||||
NSString *str = [NSString stringWithFormat:@"%@%@", @"已阅读并同意", name];
|
_stackView.distribution = UIStackViewDistributionFill;
|
||||||
NSRange range1 = [str rangeOfString:@"已阅读并同意"];
|
_stackView.alignment = UIStackViewAlignmentFill;
|
||||||
NSRange range = [str rangeOfString:name];
|
_stackView.spacing = 2;
|
||||||
NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithString:str];
|
|
||||||
[attStr addAttribute:NSForegroundColorAttributeName value:[ThemeColor appMainColor] range:range];
|
|
||||||
[attStr addAttribute:NSForegroundColorAttributeName value:[ThemeColor textThirdColor] range:range1];
|
|
||||||
_rechargeProtocolLabel.attributedText = attStr;
|
|
||||||
_rechargeProtocolLabel.textAlignment = NSTextAlignmentCenter;
|
|
||||||
}
|
}
|
||||||
return _rechargeProtocolLabel;
|
return _stackView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIButton *)protcoloButton {
|
||||||
|
if (!_protcoloButton) {
|
||||||
|
_protcoloButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||||
|
[_protcoloButton setTitle:@"《用户充值协议》" forState:UIControlStateNormal];
|
||||||
|
[_protcoloButton setTitleColor:[ThemeColor appMainColor] forState:UIControlStateNormal];
|
||||||
|
_protcoloButton.titleLabel.font = [UIFont systemFontOfSize:12];
|
||||||
|
[_protcoloButton addTarget:self action:@selector(protcoloButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||||
|
}
|
||||||
|
return _protcoloButton;
|
||||||
|
}
|
||||||
|
- (UILabel *)agreeLabel {
|
||||||
|
if (!_agreeLabel) {
|
||||||
|
_agreeLabel = [[UILabel alloc] init];
|
||||||
|
_agreeLabel.text = @"已阅读并同意";
|
||||||
|
_agreeLabel.font = [UIFont systemFontOfSize:12];
|
||||||
|
_agreeLabel.textColor = [ThemeColor textThirdColor];
|
||||||
|
}
|
||||||
|
return _agreeLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (XPMineRechargeNavView *)navView {
|
||||||
|
if (!_navView) {
|
||||||
|
_navView = [[XPMineRechargeNavView alloc] init];
|
||||||
|
_navView.delegate = self;
|
||||||
|
}
|
||||||
|
return _navView;
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@@ -8,9 +8,10 @@
|
|||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
@class WalletInfoModel;
|
||||||
@interface XPMineRechageHeadView : UIView
|
@interface XPMineRechageHeadView : UIView
|
||||||
|
///钱包信息
|
||||||
|
@property (nonatomic,strong) WalletInfoModel *walletInfo;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
@@ -11,6 +11,8 @@
|
|||||||
///Tool
|
///Tool
|
||||||
#import "ThemeColor.h"
|
#import "ThemeColor.h"
|
||||||
#import "XPMacro.h"
|
#import "XPMacro.h"
|
||||||
|
///Model
|
||||||
|
#import "WalletInfoModel.h"
|
||||||
|
|
||||||
@interface XPMineRechageHeadView ()
|
@interface XPMineRechageHeadView ()
|
||||||
///大的背景
|
///大的背景
|
||||||
@@ -47,11 +49,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)initContrations {
|
- (void)initContrations {
|
||||||
[self mas_makeConstraints:^(MASConstraintMaker *make) {
|
self.frame = CGRectMake(0, 0, KScreenWidth, 190 + kSafeAreaTopHeight);
|
||||||
make.width.mas_equalTo(KScreenWidth);
|
|
||||||
make.height.mas_equalTo(kSafeAreaTopHeight + 190);
|
|
||||||
}];
|
|
||||||
|
|
||||||
[self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
[self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
make.edges.mas_equalTo(self);
|
make.edges.mas_equalTo(self);
|
||||||
}];
|
}];
|
||||||
@@ -79,12 +77,19 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Getters And Setters
|
#pragma mark - Getters And Setters
|
||||||
|
- (void)setWalletInfo:(WalletInfoModel *)walletInfo {
|
||||||
|
_walletInfo = walletInfo;
|
||||||
|
if (_walletInfo) {
|
||||||
|
self.amountLabel.text = walletInfo.diamonds;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
- (UIImageView *)backImageView {
|
- (UIImageView *)backImageView {
|
||||||
if (!_backImageView) {
|
if (!_backImageView) {
|
||||||
_backImageView = [[UIImageView alloc] init];
|
_backImageView = [[UIImageView alloc] init];
|
||||||
_backImageView.userInteractionEnabled = YES;
|
_backImageView.userInteractionEnabled = YES;
|
||||||
_backImageView.image = [UIImage imageNamed:@"mine_recharge_header_bg"];
|
_backImageView.image = [UIImage imageNamed:@"mine_recharge_header_bg"];
|
||||||
|
_backImageView.layer.masksToBounds = YES;
|
||||||
_backImageView.contentMode = UIViewContentModeScaleAspectFill;
|
_backImageView.contentMode = UIViewContentModeScaleAspectFill;
|
||||||
}
|
}
|
||||||
return _backImageView;
|
return _backImageView;
|
||||||
|
@@ -0,0 +1,21 @@
|
|||||||
|
//
|
||||||
|
// XPMineRechargeNavView.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/26.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
@class XPMineRechargeNavView;
|
||||||
|
@protocol XPMineRechargeNavViewDelegate <NSObject>
|
||||||
|
///点击了返回按钮
|
||||||
|
- (void)xPMineRechargeNavView:(XPMineRechargeNavView *)view didClickBackButton:(UIButton *)sender;
|
||||||
|
@end
|
||||||
|
@interface XPMineRechargeNavView : UIView
|
||||||
|
///代理
|
||||||
|
@property (nonatomic,weak) id<XPMineRechargeNavViewDelegate> delegate;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
@@ -0,0 +1,82 @@
|
|||||||
|
//
|
||||||
|
// XPMineRechargeNavView.m
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/26.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "XPMineRechargeNavView.h"
|
||||||
|
///Third
|
||||||
|
#import <Masonry/Masonry.h>
|
||||||
|
///Tool
|
||||||
|
#import "ThemeColor.h"
|
||||||
|
#import "UIButton+EnlargeTouchArea.h"
|
||||||
|
|
||||||
|
@interface XPMineRechargeNavView ()
|
||||||
|
///返回按钮
|
||||||
|
@property (nonatomic,strong) UIButton *backButton;
|
||||||
|
///显示文本
|
||||||
|
@property (nonatomic,strong) UILabel *titleLabel;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation XPMineRechargeNavView
|
||||||
|
|
||||||
|
- (instancetype)initWithFrame:(CGRect)frame {
|
||||||
|
self = [super initWithFrame:frame];
|
||||||
|
if (self) {
|
||||||
|
[self initSubViews];
|
||||||
|
[self initSubViewConstraints];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
#pragma mark - Response
|
||||||
|
- (void)backButtonAction:(UIButton *)sender {
|
||||||
|
if (self.delegate && [self.delegate respondsToSelector:@selector(xPMineRechargeNavView:didClickBackButton:)]) {
|
||||||
|
[self.delegate xPMineRechargeNavView:self didClickBackButton:sender];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - Private Method
|
||||||
|
- (void)initSubViews {
|
||||||
|
self.backgroundColor = [UIColor clearColor];
|
||||||
|
[self addSubview:self.backButton];
|
||||||
|
[self addSubview:self.titleLabel];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)initSubViewConstraints {
|
||||||
|
[self.backButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.mas_equalTo(15);
|
||||||
|
make.centerY.equalTo(self.mas_bottom).mas_offset(-22);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.centerX.mas_equalTo(self);
|
||||||
|
make.centerY.equalTo(self.mas_bottom).mas_offset(-22);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - Getters And Setters
|
||||||
|
- (UIButton *)backButton {
|
||||||
|
if (!_backButton) {
|
||||||
|
_backButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||||
|
[_backButton setImage:[UIImage imageNamed:@"common_nav_back"] forState:UIControlStateNormal];
|
||||||
|
_backButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
|
||||||
|
[_backButton addTarget:self action:@selector(backButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||||
|
[_backButton setEnlargeEdgeWithTop:10 right:10 bottom:10 left:10];
|
||||||
|
}
|
||||||
|
return _backButton;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (UILabel *)titleLabel {
|
||||||
|
if (!_titleLabel) {
|
||||||
|
_titleLabel = [[UILabel alloc] init];
|
||||||
|
_titleLabel.textAlignment = NSTextAlignmentCenter;
|
||||||
|
_titleLabel.font = [UIFont systemFontOfSize:15];
|
||||||
|
_titleLabel.text = @"账户";
|
||||||
|
_titleLabel.textColor = [ThemeColor mainTextColor];
|
||||||
|
}
|
||||||
|
return _titleLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@@ -12,4 +12,6 @@
|
|||||||
+ (void)requestTicket:(HttpRequestHelperCompletion)completion access_token:(NSString *)accessToken issue_type:(NSString *)issueType {
|
+ (void)requestTicket:(HttpRequestHelperCompletion)completion access_token:(NSString *)accessToken issue_type:(NSString *)issueType {
|
||||||
[self makeRequest:@"oauth/ticket" method:HttpRequestHelperMethodPOST completion:completion, __FUNCTION__, accessToken, issueType, nil];
|
[self makeRequest:@"oauth/ticket" method:HttpRequestHelperMethodPOST completion:completion, __FUNCTION__, accessToken, issueType, nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@@ -13,7 +13,9 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
|
|
||||||
- (void)autoLogin;
|
- (void)autoLogin;
|
||||||
- (void)getUserInfo;
|
- (void)getUserInfo;
|
||||||
|
/// 批量验证内购掉单
|
||||||
|
/// @param transcations 凭据的数组
|
||||||
|
- (void)checkTranscationIds:(NSArray *)transcations;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
#import "AccountModel.h"
|
#import "AccountModel.h"
|
||||||
#import "Api+Main.h"
|
#import "Api+Main.h"
|
||||||
#import "MainProtocol.h"
|
#import "MainProtocol.h"
|
||||||
|
#import "NSObject+JSONString.h"
|
||||||
|
|
||||||
@implementation MainPresenter
|
@implementation MainPresenter
|
||||||
|
|
||||||
@@ -36,4 +37,13 @@
|
|||||||
}] uid:[[AccountInfoStorage instance] getUid]];
|
}] uid:[[AccountInfoStorage instance] getUid]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// 批量验证内购掉单
|
||||||
|
/// @param transcations 凭据的数组
|
||||||
|
- (void)checkTranscationIds:(NSArray *)transcations {
|
||||||
|
NSString * transcationIdStr = [transcations objectToJSONString];
|
||||||
|
[Api requestCheckTranscationIdsWithComplection:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||||
|
[[self getView] checkTranscationIdsSuccess];
|
||||||
|
}] transcationIdStr:transcationIdStr];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@@ -14,7 +14,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
|
|
||||||
- (void)autoLoginSuccess;
|
- (void)autoLoginSuccess;
|
||||||
- (void)getUserInfoSuccess:(UserInfoModel *)userInfo;
|
- (void)getUserInfoSuccess:(UserInfoModel *)userInfo;
|
||||||
|
///批量验证凭据成功
|
||||||
|
- (void)checkTranscationIdsSuccess;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
@@ -12,6 +12,8 @@
|
|||||||
#import "ThemeColor.h"
|
#import "ThemeColor.h"
|
||||||
#import "UIImage+Utils.h"
|
#import "UIImage+Utils.h"
|
||||||
#import "XCHUDTool.h"
|
#import "XCHUDTool.h"
|
||||||
|
#import "RechargeStorage.h"
|
||||||
|
#import "AccountInfoStorage.h"
|
||||||
///VC
|
///VC
|
||||||
#import "TabbarViewController.h"
|
#import "TabbarViewController.h"
|
||||||
#import "BaseViewController.h"
|
#import "BaseViewController.h"
|
||||||
@@ -45,6 +47,7 @@
|
|||||||
[super viewWillAppear:animated];
|
[super viewWillAppear:animated];
|
||||||
[self.navigationController setNavigationBarHidden:YES animated:YES];
|
[self.navigationController setNavigationBarHidden:YES animated:YES];
|
||||||
[self.presenter autoLogin];
|
[self.presenter autoLogin];
|
||||||
|
[self checkTranscationIds];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (MainPresenter *)presenter {
|
- (MainPresenter *)presenter {
|
||||||
@@ -91,6 +94,21 @@
|
|||||||
[self.navigationController presentViewController:nav animated:YES completion:nil];
|
[self.navigationController presentViewController:nav animated:YES completion:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///批量验证内购凭据成功
|
||||||
|
- (void)checkTranscationIdsSuccess {
|
||||||
|
NSString * uid = [AccountInfoStorage instance].getUid;
|
||||||
|
[RechargeStorage delegateAllTranscationIdsWithUid:uid];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 批量验证内购凭据
|
||||||
|
- (void)checkTranscationIds {
|
||||||
|
NSString * uid = [AccountInfoStorage instance].getUid;
|
||||||
|
NSArray * array = [RechargeStorage getAllReciptsWithUid:uid];
|
||||||
|
if (array.count > 0) {
|
||||||
|
[self.presenter checkTranscationIds:array];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - 绑定手机号
|
#pragma mark - 绑定手机号
|
||||||
- (void)bindPhone {
|
- (void)bindPhone {
|
||||||
LoginBindPhoneViewController * bindPhoneVC = [[LoginBindPhoneViewController alloc] init];
|
LoginBindPhoneViewController * bindPhoneVC = [[LoginBindPhoneViewController alloc] init];
|
||||||
|
Reference in New Issue
Block a user