支付宝

第三方支付平台

可以协调客户,商户,银联三者关系的方便平台。

使用支付宝进行一个完整的支付功能,大致有以下步骤:(红色是做一次,绿色每次都做)

1,向支付宝申请,与支付宝签约,获得商户ID(partner) 和帐号ID(seller)

2,下载相应的公钥私钥文件(加密签名用)

3,下载支付宝SDK

4,生成订单信息,签名加密

5,调用支付宝客户端,由支付宝客户端跟支付宝安全服务器打交道

6,支付完毕后,支付宝客户端会自动跳回到原来的应用程序

7,在原来的应用程序中显示支付结果给用户看

 

 

#import "CZViewController.h"

 

/** 支付宝需要的头文件 **/

#import "AlixPayOrder.h"

#import "AlixLibService.h"

#import "PartnerConfig.h"

#import "DataSigner.h"

#import "DataVerifier.h"

#import "AlixPayResult.h"

/** 支付宝需要的头文件 **/

 

@interface CZViewController ()

- (IBAction)buy;

@property (weak, nonatomic) IBOutlet UILabel *amountLabel;

@property (weak, nonatomic) IBOutlet UILabel *nameLabel;

@property (weak, nonatomic) IBOutlet UILabel *descLabel;

 

@end

 

@implementation CZViewController

 

- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

}

 

- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

- (IBAction)buy {

    // 利用支付宝将用户的钱转到商家账号(比如公司账号)

    

    // 1.创建订单模型

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

    order.partner = PartnerID; // 商户ID

    order.seller = SellerID; // 账号ID

    order.tradeNO = @"201414505657357834"; // 订单号 (一般跟时间有关)

    order.amount = self.amountLabel.text; // 金额

    order.productName = self.nameLabel.text; // 商品名称

    order.productDescription = self.descLabel.text; // 商品描述

//    order.notifyURL = @""; // 回调地址

    

    // 2.签名加密

    id<DataSigner> signer = CreateRSADataSigner(PartnerPrivKey);

    // 将订单模型转为字符串, 进行签名加密

    NSString *signedString = [signer signString:order.description];

    

    // 3.进一步生成订单信息字符串

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

                             order.description, signedString, @"RSA"];

    

    // 网页支付

    //    [AlixLibService payOrder:orderString AndScheme:@"shop" seletor:@selector(paymentResult:) target:self];

    // 4.打开支付宝客户端

    [AlixLibService payOrder:orderString AndScheme:@"shop" seletor:nil target:nil];

}

 

//wap回调函数

-(void)paymentResult:(NSString *)resultd

{

    //结果处理

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

    if (result.statusCode == 9000) { // 支付OK

        /*

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

         */

        //交易成功

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

        id<DataVerifier> verifier = CreateRSADataVerifier(key);

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

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

#warning 这里才代表支付成功

            

        }

    } else {

        //交易失败

    }

}

@end

 

posted @ 2015-10-16 15:02  知至  阅读(186)  评论(0编辑  收藏  举报