标签:stand notify mount 字符串 seq 最新 leo option ack
集成支付宝和微信的时候 很多人都会遇到坑 我的建议是 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
标签:stand notify mount 字符串 seq 最新 leo option ack
原文地址:http://www.cnblogs.com/lxgblog/p/6208944.html