首页 > 代码库 > ios 支付宝
ios 支付宝
集成支付宝和微信的时候 很多人都会遇到坑 我的建议是 show in finder 在工程内部建一个文件夹 然后把支付宝相关的文件导进去 add到工程中 后面的支付什么的 so简单
特别说明 我用的版本是 2.0 最新好像是2.1吧 写支付宝sdk那群王八蛋 天天改参数名字 显示自己很牛逼 要调起支付宝手机端 需要配置白名单
直接代码了 参数 说明
NSString *partner = @"商户号";
NSString *seller = @"收款账号";
NSString *privateKey = @"私钥";//自己生成
if ([partner length] == 0 || [seller length] == 0){
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"缺少partner或者seller。" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
[alert show];
return;
}
Order *order = [[Order alloc] init];//订单类 去下载支付宝demo 有Order类 导进来就能用
order.partner = partner;
order.seller = seller;
order.tradeNO = @"订单号";//一般后台生成 如果要自己生成 支付
order.productName= @"商品名字";
order.productDescription = @"商品的描述";
order.amount = @"价钱";
order.notifyURL = @"后台回调地址";//
//常量类型
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];
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循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) {
NSString * resultStatus = [resultDic objectForKey:@"resultStatus"];
if ([resultStatus intValue] == 9000) {//表示成功
[KAlertView showType:KAlertTypeCheck text:@"打赏成功" for:2.0 animated:YES];
}
else if ([resultStatus intValue] == 4000) {//失败
[KAlertView showType:KAlertTypeError text:@"打赏失败" for:2.0 animated:YES];
}
else if ([resultStatus intValue] == 6002) {//网络出错
[KAlertView showType:KAlertTypeError text:@"网络连接出错" for:2.0 animated:YES];
} else if ([resultStatus intValue] == 6001) {//取消
[KAlertView showType:KAlertTypeNone text:@"打赏已取消!" for:1.0 animated:YES];
}
}];
}
这是发起的时候的返回状态 当我们进入支付宝 操作付款或者 点击取消付款 我们需要在本app里获取到这个状态 我们需要在appdelegate里面 调用方法 发送一个通知
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options {
// 微信支付处理
if ([url.description rangeOfString:WEIXIN_APP_ID].length > 0) {
return [WXApi handleOpenURL:url delegate:self];
}
//跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给SDK
if ([url.host isEqualToString:@"safepay"]) {
[[AlipaySDK defaultService]
processOrderWithPaymentResult:url
standbyCallback:^(NSDictionary *resultDic) {
//发送消息通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"AlipayResultNotification" object:resultDic];
}];
}
return YES;
}
// 注册支付宝支付结果通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receivedAlipayNotify:) name:@"AlipayResultNotification" object:nil];
/ 支付宝通过客户端支付回调的通知
-(void)receivedAlipayNotify:(NSNotification*)sender {
NSDictionary *resultDic = sender.object;
NSString* resultStatus = resultDic[@"resultStatus"];
if ([resultStatus intValue] == 9000) {
[KAlertView showType:KAlertTypeCheck text:@"打赏成功" for:2.0 animated:YES];
}
else if ([resultStatus intValue] == 4000) {
[KAlertView showType:KAlertTypeError text:@"打赏失败" for:2.0 animated:YES];
}
else if ([resultStatus intValue] == 6002) {
[KAlertView showType:KAlertTypeCheck text:@"网络连接出错" for:2.0 animated:YES];
} else if ([resultStatus intValue] == 6001) {
[KAlertView showType:KAlertTypeNone text:@"打赏已取消!" for:1.0 animated:YES];
}
}
这就是支付宝的完整回调过程 只要配好sdk 支付就完成百分之70
ios 支付宝