怎么集成SDK自行百度
1.第一步在程序入口注册微信 (支付宝不需要)
复制代码
1
2
3
4func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { //向微信终端程序注册第三方应用 WXApi.registerApp(WX_APPID) }
2.微信支付管理类客户端只负责调用(支付信息什么的都是服务器完成的)
复制代码
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
102import UIKit //微信appid let WX_APPID="" //AppSecret let SECRET="" //微信 class WXApiManager:NSObject,WXApiDelegate { static let shared = WXApiManager() // 用于弹出警报视图,显示成功或失败的信息() private weak var sender:BaseViewController! //(UIViewController) // 支付成功的闭包 private var paySuccessClosure: (() -> Void)? // 支付失败的闭包 private var payFailClosure: (() -> Void)? //登录成功 private var loginSuccessClosure:((_ code:String) -> Void)? //登录失败 private var loginFailClosure:(() -> Void)? // 外部用这个方法调起微信支付 func payAlertController(_ sender:BaseViewController, request:PayReq, paySuccess: @escaping () -> Void, payFail:@escaping () -> Void) { // sender 是调用这个方法的控制器, // 用于提示用户微信支付结果,可以根据自己需求是否要此参数。 self.sender = sender self.paySuccessClosure = paySuccess self.payFailClosure = payFail if checkWXInstallAndSupport(){//检查用户是否安装微信 WXApi.send(request) } } //外部用这个方法调起微信登录 func login(_ sender:BaseViewController,loginSuccess: @escaping ( _ code:String) -> Void, loginFail:@escaping () -> Void){ // sender 是调用这个方法的控制器, // 用于提示用户微信支付结果,可以根据自己需求是否要此参数。 self.sender = sender self.loginSuccessClosure = loginSuccess self.loginFailClosure = loginFail if checkWXInstallAndSupport(){ let req=SendAuthReq() req.scope="snsapi_userinfo" req.state="app" WXApi.send(req) } } } extension WXApiManager { func onResp(_ resp: BaseResp!) { if resp is PayResp {//支付 if resp.errCode == 0 { self.paySuccessClosure?() }else{ self.payFailClosure?() } }else if resp is SendAuthResp{//登录结果 let authResp = resp as! SendAuthResp var strMsg: String if authResp.errCode == 0{ strMsg="微信授权成功" }else{ switch authResp.errCode{ case -4: strMsg="您拒绝使用微信登录" break case -2: strMsg="您取消了微信登录" break default: strMsg="微信登录失败" break } } UIAlertController.showAlertYes(sender, title: "授权结果", message: strMsg, okButtonTitle:"确定", okHandler: { (alert) in if authResp.errCode == 0 { self.loginSuccessClosure?(authResp.code) }else{ self.loginFailClosure?() } }) } } } extension WXApiManager { // 检查用户是否已经安装微信并且有支付功能 private func checkWXInstallAndSupport() -> Bool { if !WXApi.isWXAppInstalled() { ///这里的弹窗是我写的扩展方法 UIAlertController.showAlertYes(sender,title:"", message: "微信未安装", okButtonTitle:"确定") return false } if !WXApi.isWXAppSupport() { ///这里的弹窗是我写的扩展方法 UIAlertController.showAlertYes(sender,title:"", message: "当前微信版本不支持支付", okButtonTitle:"确定") return false } return true } }
3. 支付宝管理类客户端只负责调用(支付信息什么的都是服务器完成的)
复制代码
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//支付宝 class AliPayManager:NSObject{ static let shared = AliPayManager() // 用于弹出警报视图,显示成功或失败的信息 fileprivate weak var sender: UIViewController! // 支付成功的闭包 fileprivate var paySuccessClosure: (() -> Void)? // 支付失败的闭包 fileprivate var payFailClosure: (() -> Void)? ///登录成功的闭包 fileprivate var loginSuccessClosure:((_ auth_code:String) -> Void)? ///登录失败的闭包 fileprivate var loginFailClosure:(() -> Void)? // 外部用这个方法调起支付支付 func payAlertController(_ sender: UIViewController, request:String, paySuccess: @escaping () -> Void, payFail:@escaping () -> Void) { // sender 是调用这个方法的控制器, self.sender = sender //用于提示用户支付宝支付结果,可以根据自己需求是否要此参数。 self.paySuccessClosure = paySuccess self.payFailClosure = payFail AlipaySDK.defaultService().payOrder(request, fromScheme:"这里是URL Types配置的URLShcemes",callback:nil) } //外部用这个方法调起支付宝登录 func login(_ sender:BaseViewController,withInfo:String,loginSuccess: @escaping (_ str:String) -> Void,loginFail:@escaping () -> Void){ // sender 是调用这个方法的控制器, // 用于提示用户微信支付结果,可以根据自己需求是否要此参数。 self.sender = sender self.loginSuccessClosure = loginSuccess self.loginFailClosure = loginFail AlipaySDK.defaultService().auth_V2(withInfo:withInfo, fromScheme:"这里是URL Types配置的URLSchemes", callback:nil) } ///授权回调 func showAuth_V2Result(result:NSDictionary){ // 9000 请求处理成功 // 4000 系统异常 // 6001 用户中途取消 // 6002 网络连接出错 let returnCode:String = result["resultStatus"] as! String var returnMsg:String = "" switch returnCode{ case "6001": returnMsg = "用户中途取消" break case "6002": returnMsg = "网络连接出错" break case "4000": returnMsg = "系统异常" break case "9000": returnMsg = "授权成功" break default: returnMsg = "系统异常" break } UIAlertController.showAlertYes(sender, title: "授权结果", message: returnMsg, okButtonTitle:"确定", okHandler: { (alert) in if returnCode == "9000" { let r=result["result"] as! String self.loginSuccessClosure?(r) }else{ self.loginFailClosure?() } }) } //传入回调参数 func showResult(result:NSDictionary){ // 9000 订单支付成功 // 8000 正在处理中 // 4000 订单支付失败 // 6001 用户中途取消 // 6002 网络连接出错 let returnCode:String = result["resultStatus"] as! String // var returnMsg:String = "" // switch returnCode{ // case "6001": // returnMsg = "用户中途取消" // break // case "6002": // returnMsg = "网络连接出错" // break // case "8000": // returnMsg = "正在处理中" // break // case "4000": // returnMsg = "订单支付失败" // break // case "9000": // returnMsg = "支付成功" // break // default: // returnMsg = "订单支付失败" // break // } // UIAlertController.showAlertYes(sender, title: "支付结果", message: returnMsg, okButtonTitle:"确定", okHandler: { (alert) in // if returnCode == "9000" { // self.paySuccessClosure?() // // }else{ // self.payFailClosure?() // } // }) if returnCode == "9000" { self.paySuccessClosure?() }else{ self.payFailClosure?() } } }
4.在AppDelegate中回调
复制代码
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// MARK: - 支付回调 extension AppDelegate{ // iOS 8 及以下请用这个 func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { if url.host == "safepay"{//支付宝 //支付回调 AlipaySDK.defaultService().processOrder(withPaymentResult: url, standbyCallback:{ (resultDic) in if resultDic != nil{ AliPayManager.shared.showResult(result:resultDic! as NSDictionary) } }) //授权回调 AlipaySDK.defaultService().processAuth_V2Result(url, standbyCallback: { (resultDic) in if resultDic != nil{ AliPayManager.shared.showAuth_V2Result(result:resultDic! as NSDictionary) } }) return true }else{//微信 return WXApi.handleOpen(url, delegate:WXApiManager.shared) } } // iOS 9 以上请用这个 func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool { if url.host == "safepay"{//支付宝 //支付回调 AlipaySDK.defaultService().processOrder(withPaymentResult: url, standbyCallback:{ (resultDic) in if resultDic != nil{ AliPayManager.shared.showResult(result:resultDic! as NSDictionary) } }) //授权回调 AlipaySDK.defaultService().processAuth_V2Result(url, standbyCallback: { (resultDic) in if resultDic != nil{ AliPayManager.shared.showAuth_V2Result(result:resultDic! as NSDictionary) } }) return true }else{//微信 return WXApi.handleOpen(url,delegate:WXApiManager.shared) } } }
5.支付调用 这里拿数据是用SwiftyJSON
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
231.微信支付 ///从服务器拿到生成好的请求参数 let charge=json["charge"] let req=PayReq() req.timeStamp=charge["timestamp"].uInt32Value req.partnerId=charge["partnerid"].stringValue req.package=charge["package"].stringValue req.nonceStr=charge["noncestr"].stringValue req.sign=charge["sign"].stringValue req.prepayId=charge["prepayid"].stringValue WXApiManager.shared.payAlertController(self, request: req, paySuccess: { print("支付成功") }, payFail: { print("支付失败") }) 2.支付宝支付 ///从服务器拿到生成好的请求参数 let orderString=json["charge"]["orderString"].stringValue AliPayManager.shared.payAlertController(self, request:orderString, paySuccess: { print("支付成功") }, payFail: { print("支付失败") })
主要是做个记录
转载于:https://www.cnblogs.com/phbk/p/8508881.html
最后
以上就是冷傲航空最近收集整理的关于Swift调用微信支付宝SDK(Swift4.0)的全部内容,更多相关Swift调用微信支付宝SDK(Swift4内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复