参考:http://www.bubuko.com/infodetail-650291.html
1.
//调支付宝
func Alipay() {
/*
*商户的唯一的parnter和seller。
*签约后,支付宝会为每个商户分配一个唯一的 parnter 和 seller。
*/
/*============================================================================*/
/*=======================需要填写商户app申请的===================================*/
/*============================================================================*/
let partner = ""
let seller = ""
let privateKey = ""
/*============================================================================*/
/*============================================================================*/
/*============================================================================*/
//partner和seller获取失败,提示
if (count(partner) == 0 || count(seller) == 0 || count(privateKey) == 0)
{
var alert = UIAlertView(title: "提示", message: "缺少partner或者seller或者私钥。", delegate: self, cancelButtonTitle: "确定")
alert.show()
return
}
//配置请求信息。
let generateTradeNO = ""
let product = Product()
product.subject = "订单标题(号)"
product.body = "订单描述(商品串-地址)"
product.price = 12.123
var order:Order = Order()
order.partner = partner
order.seller = seller
//订单ID(由商家□自□行制定)
order.tradeNO = generateTradeNO
//商品标题
order.productName = product.subject
//商品描述
order.productDescription = product.body
//商品价格
order.amount = String(format: "%.2f", product.price)
//回调URL
order.notifyURL = "http://www.xxx.com"
order.service = "mobile.securitypay.pay"
order.paymentType = "1"
order.inputCharset = "utf-8"
order.itBPay = "30m"
//应用注册scheme,在AlixPayDemo-Info.plist定义URL types
var appScheme = "alisdkdemo"
//将商品信息拼接成字符串
var orderSpec = order.description
println("orderSpec = \(orderSpec)")
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循 RSA 签名规范, 并将签名字符串 base64 编码和 UrlEncode
var signer = CreateRSADataSigner(privateKey)
var signedString = signer.signString(orderSpec)
//将签名成功字符串格式化为订单字符串,请严格按照该格式 NSString *orderString = nil;
if (signedString != nil) {
var orderString = "\(orderSpec)&sign=\"\(signedString)\"&sign_type=\"RSA\""
// orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
// orderSpec, signedString, @"RSA"];
AlipaySDK.defaultService().payOrder(orderString, fromScheme: appScheme, callback: { (resultDic) -> Void in
println("reslut = \(resultDic)")
})
}
}
3. 报错: rsa_private read error : private key is NULL
原因:私钥没有转成PKCS8
1)在RSADataSigner.m文件中 搜索代码 [result appendString:@"-----BEGIN PRIVATE KEY-----\n"]; 将其改成 [result appendString:@"-----BEG
IN RSA PRIVATE KEY-----\n"];
2)在RSADataSigner.m文件中 搜索代码 [result appendString:@"\n-----END PRIVATE KEY-----"]; 将其改成 [result appendString:@"\n-----END RSA PRIVATE KEY-----"];