首先添加支付宝SDK
导入
AlipaySDK.bundle
AlipaySDK.framework
前期准备工作大概就是这些。
//此按钮为点击支付 按钮触发,
- (IBAction)AlipayAction:(id)sender {
/** 核心理解
1. 我们跟自己的服务器索取 商户ID 账号ID 私钥(这是通过商品信息,去后台获取接口)
2. 通过获取到的信息 去给阿里给的 “order“model赋值 , 生成订单信息及签名
3. NSString *orderSpec = [order description];//将商品信息拼接成字符串(可以理解把 阿里给的order 最后转为一个字符串)
4. 获取私钥并将商品信息的字符串签名,得到最终阿里需要的 <签名成功字符>
5. 调用阿里SDK的方法,将字符串放进里面去 ------->完成
*/
/*
*商户的唯一的parnter和seller。
*签约后,支付宝会为每个商户分配一个唯一的 parnter 和 seller。
*/
// 在这里进行第一步;
//然后把三个参数(商户ID 账号ID 私钥) 赋值到下面
NSString *partner = @"服务器提供";
NSString *seller = @"服务器提供";
NSString *privateKey = @"服务器提供";
//partner和seller获取失败,提示
if ([partner length] == 0 ||
[seller length] == 0 ||
[privateKey length] == 0)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
message:@"缺少partner或者seller或者私钥。"
delegate:self
cancelButtonTitle:@"确定"
otherButtonTitles:nil];
[alert show];
return;
}
/*
*生成订单信息及签名
*/
//将商品信息赋予AlixPayOrder的成员变量
Order *order = [[Order alloc] init];
order.partner = partner;
order.seller = seller;
order.tradeNO = @"服务器提供"; //订单ID(由商家自行制定)
order.productName = @"服务器提供"; //商品标题
order.productDescription = @"服务器提供"; //商品描述
order.amount = @"服务器提供"; //商品价格
order.notifyURL = @"服务器提供"; //回调URL
order.service = @"mobile.securitypay.pay";//固定
order.paymentType = @"1";//固定
order.inputCharset = @"utf-8";//固定
order.itBPay = @"30m";//固定
order.showUrl = @"m.alipay.com";//固定
//应用注册scheme,在AlixPayDemo-Info.plist定义URL types 用于快捷支付成功后重新唤起商户应用
NSString *appScheme = @"alisdkdemo";
//将商品信息拼接成字符串
NSString *orderSpec = [order description];
NSLog(@"orderSpec = %@",orderSpec);
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
id<DataSigner> signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderSpec];
//将签名成功字符串格式化为订单字符串,请严格按照该格式
NSString *orderString = nil;
if (signedString != nil) {
orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString, @"RSA"];
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
if ([[resultDic objectForKey:@"resultStatus"] intValue]==9000) {
// 9000 订单支付成功
// 8000 正在处理中
// 4000 订单支付失败
// 6001 用户中途取消
// 6002 网络连接出错
//这里的9000,表示支付成功,我们这里可以调用一个服务器接口,告诉服务器,支付完毕。
}
NSLog(@"reslut = %@",resultDic);
}];
}
}