支付宝

#import "ViewController.h"

#import "PartnerConfig.h"

#import "AlixPayOrder.h"

#import "DataSigner.h"

#import "AlixLibService.h"

#import "AlixPayResult.h"

#import "DataVerifier.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    button.frame = CGRectMake(100, 100, 100, 40);

    [button setTitle:@"支付" forState:UIControlStateNormal];

    [button addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:button];

}

//获取15位随机数

-(NSString *)generateTradeNO

{

    const int N =15;

    NSString * sourceString=@"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    NSMutableString *re=[[NSMutableString alloc]init];

    srand((int)time(0));

    for (int i=0; i<N; i++) {

        unsigned index=rand()%[sourceString length];

        NSString * s=[sourceString substringWithRange:NSMakeRange(index, 1)];

        [re appendString:s];

    }

    return re;

}

//rsa签名

-(NSString *)doRsa:(NSString *)orderInfo

{

    id<DataSigner>signer;

    signer=CreateRSADataSigner(PartnerPrivKey);

    NSString * signedString=[signer signString:orderInfo];

    return signedString;

}

- (void)buttonClick{

    //创建订单

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

    order.partner = PartnerID;

    order.seller = SellerID;

    //订单id

    order.tradeNO = [self generateTradeNO];

    //商品标题

    order.productName = @"苹果手机";

    //商品描述

    order.productDescription = @"山寨国产红苹果手机 Hiphone I9 JAVA QQ后台 飞信 炒股 UC";

    //商品价格

    order.amount = @"0.01";

    //回调URL

    order.notifyURL =  @"http%3A%2F%2Fwwww.xxx.com";

    //得到订单信息

    NSString* orderInfo = order.description;

    //获取签名

    NSString* signedStr = [self doRsa:orderInfo];

    //支付

    NSString*orderString=[NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",orderInfo,signedStr,@"RSA"];

    [AlixLibService payOrder:orderString AndScheme:@"Practice" seletor:@selector(payResult:) target:self];

}

//回调函数

-(void)payResult:(NSString *)resultd

{

    //结果处理

    AlixPayResult* result = [[AlixPayResult alloc] initWithString:resultd];

    if (result)

    {

         if (result.statusCode == 9000)

        {

            /*

             *用公钥验证签名 严格验证请使用result.resultString与result.signString验签

             */

            //交易成功

            NSString* key = AlipayPubKey;//签约帐户后获取到的支付宝公钥

            id<DataVerifier> verifier;

            verifier = CreateRSADataVerifier(key);

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

            {

                //验证签名成功,交易结果无篡改

            }

        }

        else

        {

            //交易失败

        }

    }

    else

    {

        //失败

    }

}

@end

 

posted @ 2015-04-23 10:01  飞天至虹  阅读(262)  评论(0编辑  收藏  举报