简单集成支付宝

和支付宝签约后,支付宝会为每个商户分配一个唯一的parnterseller。(根据parnterseller支付宝网站上拿到公钥,然后根据支付宝加密算法RSA,公钥->得到私钥,好像是这样(记不请了尴尬),详细的参考支付宝官方文档)

公私钥存放在plist,商户可以存放在服务端或本地其他地方。


AppDelegate.m

//支付宝有支付结果后回到本应用

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

{

    [self parseURL:url application:application];

return YES;

}

- (void)parseURL:(NSURL *)url application:(UIApplication *)application {

AlixPay *alixpay = [AlixPay shared];

AlixPayResult *result = [alixpay handleOpenURL:url];

if (result) {

//是否支付成功

if (9000 == result.statusCode) {

/*

*用公钥验证签名

*/

id<DataVerifier> verifier = CreateRSADataVerifier([[NSBundle mainBundle] objectForInfoDictionaryKey:@"RSA public key"]);

if ([verifier verifyString:result.resultString withSign:result.signString]) {

UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"提示"

message:result.statusMessage

delegate:self

  cancelButtonTitle:@"确定"

  otherButtonTitles:nil];

                alertView.tag=201;

[alertView show];

[alertView release];

}//验签错误

else {

UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"提示"

message:@"签名错误"

delegate:self

  cancelButtonTitle:@"确定"

  otherButtonTitles:nil];

                alertView.tag=202;

[alertView show];

[alertView release];

}

}

//如果支付失败,可以通过result.statusCode查询错误码

else {

UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"提示"

message:result.statusMessage

delegate:self

  cancelButtonTitle:@"确定"

  otherButtonTitles:nil];

            alertView.tag=203;

[alertView show];

[alertView release];

}

}

}

生产订单和调用支付

//支付宝支付

-(void)zhifubaoPay

{

    //调用支付宝

    /*

     *商户的唯一的parnterseller

     *demoparnterseller信息存于(AlixPayDemo-Info.plist)中,外部商户可以考虑存于服务端或本地其他地方。

     *签约后,支付宝会为每个商户分配一个唯一的 parnter seller

     */

    //如果partnerseller数据存于其他位置,请改写下面两行代码

    NSString *partner = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"Partner"];

    NSString *seller = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"Seller"];

    

    //partnerseller获取失败,提示

    if ([partner length] == 0 || [seller length] == 0)

    {

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"

                                                        message:@"缺少partner或者seller"

                                                       delegate:self

                                              cancelButtonTitle:@"确定"

                                              otherButtonTitles:nil];

        [alert show];

        [alert release];

        return;

    }

    

    /*

     *生成订单信息及签名

     *由于demo的局限性,本demo中的公私钥存放在AlixPayDemo-Info.plist,外部商户可以存放在服务端或本地其他地方。

     */

    //将商品信息赋予AlixPayOrder的成员变量

    AlixPayOrder *order = [[AlixPayOrder alloc] init];

    order.partner = partner;

    order.seller = seller;

    order.tradeNO = _orderID; //订单ID(由商家自行制定)

    order.productName = @"标题"; //商品标题

    order.productDescription = @"描述"; //商品描述

    order.amount = [NSString stringWithFormat:@"%.2f",_ZFBpayMoney]; //商品价格

    order.notifyURL = [NSString stringWithFormat:@"http://%@/alipay/notifyurl",SERVER_URL]; //回调URL(应该是回调给服务器的,这个作用好像是支付结果返回给服务端的)

    //应用注册scheme,AlixPayDemo-Info.plist定义URL types,用于快捷支付成功后重新唤起商户应用

    //NSString *appScheme = @"AlixPayDemo";

    NSString *appScheme=@"backMyApp";

    //将商品信息拼接成字符串

    NSString *orderSpec = [order description];

    //NSLog(@"orderSpec = %@",orderSpec);

    

    //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode

    id<DataSigner> signer = CreateRSADataSigner([[NSBundle mainBundle] objectForInfoDictionaryKey:@"RSA private key"]);

    NSString *signedString = [signer signString:orderSpec];

    

    //将签名成功字符串格式化为订单字符串,请严格按照该格式

    NSString *orderString = nil;

    if (signedString != nil) {

        orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",

                       orderSpec, signedString, @"RSA"];

        

        //获取快捷支付单例并调用快捷支付接口

        AlixPay * alixpay = [AlixPay shared];

        int ret = [alixpay pay:orderString applicationScheme:appScheme];

        

        if (ret == kSPErrorAlipayClientNotInstalled) {

            UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"提示"

                                                                 message:@"您还没有安装支付宝快捷支付,请先安装。"

                                                                delegate:self

                                                       cancelButtonTitle:@"确定"

                                                       otherButtonTitles:nil];

            [alertView setTag:123];

            [alertView show];

            [alertView release];

        }

        else if (ret == kSPErrorSignError) {

            NSLog(@"签名错误!");

        }

    }

}

//安装插件

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

{

    //进入appstore下载快捷支付软件

    if (alertView.tag == 123) {

NSString * URLString = @"http://itunes.apple.com/cn/app/id535715926?mt=8";

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:URLString]];

}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值