本文基于支付宝老版移动支付,不适用于新版App支付
本文未使用服务端签名,建议签名由服务端实现
导入AlipaySdk
本demo使用CocoaPods导入支付宝SDK,创建Brdging-Header.h文件(点击查看参考)
CocoaPods导入AlipaySdk
platform :ios, '10.0'
target 'AlipayDemo-mobile' do
source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
pod 'AlipaySDK-iOS'
end
导入图中所示文件(移除两个 .a 后缀的库)
导入上面移除的两个库文件
把alipay路径加入Header Search Paths
添加URL Types
调用支付宝
var ALIPAY_NOTIFY_URL = "http://ape.ren/notify.html" //商户后台回调地址
var PARTNER = "2088xxxxxxx" //商户号
var SELLER = "xxxx@xxxx.com" //商户账号
var RSA_PRIVATE = "私匙"
func aliPay(){
let orderId = "test43241123"
let price = 0.01
let body = "body43241123"
let subject = "subject43241123"
let aliOrder = AlipayOrder(partner: PARTNER, seller: SELLER, tradeNO: orderId, productName: subject, productDescription: body, amount: price, notifyURL: ALIPAY_NOTIFY_URL, service: "mobile.securitypay.pay", paymentType: "1", inputCharset: "utf-8", itBPay: "3d", showUrl: "m.alipay.com", rsaDate: nil, appID: nil)
let orderSpec = aliOrder.description
let signer = RSADataSigner(privateKey: RSA_PRIVATE)
let signedString = signer?.sign(orderSpec)
let orderString = "\(orderSpec)&sign=\"\(signedString!)\"&sign_type=\"RSA\""
AlipaySDK.defaultService().payOrder(orderString, fromScheme: "alipay-test", callback: nil)
//alipay-test替换为自己设置的URL Types
}
AppDelegate中添加回调状态监听
internal func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
//支付宝支付回调
if String(url.host!) == "safepay" {
AlipaySDK.defaultService().processOrder(withPaymentResult: url,standbyCallback: {
(value) in
let code = value!
let resultStatus = code["resultStatus"] as!String
var content = ""
switch resultStatus {
case "9000":
content = "支付成功"
case "8000":
content = "订单正在处理中"
case "4000":
content = "支付失败"
case "5000":
content = "重复请求"
case "6001":
content = "中途取消"
case "6002":
content = "网络连接出错"
case "6004":
content = "支付结果未知"
default:
content = "支付失败"
break
}
print(content)
})
}
return true
}
Demo下载