支付宝支付
进行支付宝的集成如果导入的 SDK 是带 Demo 的版本,那么在后续 SDK 更新的时候,去下载 SDK 进行导入一旦报错,解决方案就是重新下载带 Demo 的包文件去导入 SDK。
进行支付宝支付的时候需要传入 Scheme
,我们需要提前去 info
中注册一个 URL Schemes
, 不然的话不能进行支付过后的回调。
调起支付的方法如下
let order = AlipaySDK()
//s.requestArgument = [] 服务器返回来的参数
sessionManager.executeRequest(withSession: s) { [weak self](S) in
if S.isSucess {
let orderStr = (S.responseObject["RETURN_DATA"] as! Dictionary)["orderStr"] ?? ""
order.payOrder(orderStr, fromScheme: AliPayscheme, callback: { (result) in
})
}
}
在支付完成过后需要在 AppDelegate
中进行支付结果的回调,在这里加入一个扩展类,然后再对应的位置去做响应的处理。
class AliSdkManager: NSObject {
public static var aliSdkManager:AliSdkManager!
public static func sharedManager () -> AliSdkManager{
AliSdkManager.aliSdkManager = AliSdkManager.init()
return AliSdkManager.aliSdkManager
}
internal func showResult(result:NSDictionary){
// 9000 订单支付成功
// 8000 正在处理中
// 4000 订单支付失败
// 6001 用户中途取消
// 6002 网络连接出错
let returnCode:String = result["resultStatus"] as! String
switch returnCode{
case "6001":
break
case "8000":
break
case "4000":
break
case "9000":
break
default:
break
}
}
}
使用这个扩展类要先在 AppDelegate
中注册
_ = AliSdkManager.sharedManager()
然后进行支付回调
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
if url.host == "safepay" {
AlipaySDK.defaultService().processOrder(withPaymentResult: url as URL!, standbyCallback: {
(resultDic) -> Void in
//调起支付结果处理
AliSdkManager.aliSdkManager.showResult(result: resultDic! as NSDictionary);
})
}
// return true;
return WXApi.handleOpen(url, delegate: self)
}
微信支付
导入 SDK
pod 'WechatOpenSDK'
我们需要去 info
中注册一个 URL Schemes
,内容就填写在微信开放平台注册的 AppID,不然不能在支付成功以后回到程序完成回调
注册 SDK
WXApi.registerApp(wxAppKey, enableMTA: true) //wxAppKey 在微信开放平台注册的 AppID
调用微信支付的方法
let s = getMYSession(self)
s.requestId = "" // 自己服务器的接口
s.requestArgument = [] // 接口的参数
sessionManager.executeRequest(withSession: s) { [weak self](S) in
if S.isSucess {
let request = PayReq.init()
request.prepayId = (S.responseObject["RETURN_DATA"] as! Dictionary)["prepay_id"]
request.partnerId = (S.responseObject["RETURN_DATA"] as! Dictionary)["partnerid"]
request.package = (S.responseObject["RETURN_DATA"] as! Dictionary)["package"]
request.nonceStr = (S.responseObject["RETURN_DATA"] as! Dictionary)["nonstr"]
let time = (S.responseObject["RETURN_DATA"] as! Dictionary)["timestamp"] //as! Int
// let timeInt = Int(time!)
let timestamp : UInt32 = UInt32.init(exactly: Double(Int(time!)!))!
request.timeStamp = timestamp
request.sign = (S.responseObject["RETURN_DATA"] as! Dictionary)["paysign"]
// WXBackShowMessage = "支付"
WXApi.send(request)
}
}
进行支付回调
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
if url.host == "safepay" {
AlipaySDK.defaultService().processOrder(withPaymentResult: url as URL!, standbyCallback: {
(resultDic) -> Void in
//调起支付结果处理
AliSdkManager.aliSdkManager.showResult(result: resultDic! as NSDictionary);
})
}
// return true;
return WXApi.handleOpen(url, delegate: self)
}
func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
return WXApi.handleOpen(url, delegate: self)
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return WXApi.handleOpen(url, delegate: self)
}
func onResp(_ resp: BaseResp!) {
if resp .isKind(of: PayResp.self) {
switch resp.errCode {
case 0:
print("成功")
default:
print("失败")
break
}
}
}
微信授权 https://www.jianshu.com/p/098088242f45