码迷,mamicode.com
首页 > 移动开发 > 详细

ios 支付宝

时间:2016-12-21 21:34:44      阅读:227      评论:0      收藏:0      [点我收藏+]

标签: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  

ios 支付宝

标签:stand   notify   mount   字符串   seq   最新   leo   option   ack   

原文地址:http://www.cnblogs.com/lxgblog/p/6208944.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!