我是靠谱客的博主 冷傲航空,最近开发中收集的这篇文章主要介绍Swift调用微信支付宝SDK(Swift4.0),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

怎么集成SDK自行百度

  1.第一步在程序入口注册微信  (支付宝不需要)

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//向微信终端程序注册第三方应用
WXApi.registerApp(WX_APPID)
}

   2.微信支付管理类客户端只负责调用(支付信息什么的都是服务器完成的)

 

import 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. 支付宝管理类客户端只负责调用(支付信息什么的都是服务器完成的)

//支付宝
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中回调

// 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.微信支付
///从服务器拿到生成好的请求参数 
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.0)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部