文档章节

支付宝支付

 寂寞ls
发布于 2016/07/06 15:39
字数 690
阅读 53
收藏 7

1. 环境配置 

1). 从支付宝官网下载demo,新建文件夹“AliSDK”。把demo中的下列文件(AlipaySDK.bundle AlipaySDK.framework  openssl   Util   Order.h   Order.m   libcrypto.a libssl.a)复制到“AliSDK”文件中。

2). 新建一个工程,把AliSDK 添加到工程内。

3). 新建pch文件并添加如下信息。

4). 添加pch文件路径

5). 添加依赖库

6). 添加openssl路径

到此为止  编译运行  没问题   开始敲代码

二.  编写代码

在ViewController.m中

#import "ViewController.h"
#import "Order.h"
#import <AlipaySDK/AlipaySDK.h>
#import "DataSigner.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    UIButton*button=[UIButton buttonWithType:UIButtonTypeCustom];
    button.frame=CGRectMake(100, 200, 200, 50);
    button.backgroundColor=[UIColor lightGrayColor];
    [button setTitle:@"支付宝支付" forState:UIControlStateNormal];
    [button addTarget:self action:@selector(btClick:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
    

    
    
}
-(void)btClick:(id)sender
{
/*
     *商户的唯一的parnter和seller。
     *签约后,支付宝会为每个商户分配一个唯一的 parnter 和 seller。
     */
    
    /*============================================================================*/
    /*=======================需要填写商户app申请的===================================*/
    /*============================================================================*/

    NSString*partner=@"000000000000";//合作商户ID
    NSString*seller=@"";//支付宝账户
     NSString*privateKey=@"";//PKCS8格式的私钥
    
    /*============================================================================*/
    /*============================================================================*/
    /*============================================================================*/


    //partner和seller获取失败,提示
    if (partner.length==0||seller.length==0||privateKey.length==0) {
        UIAlertController*alertController=[UIAlertController alertControllerWithTitle:@"提示" message:@"缺少partner或者seller或者私钥" preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction*sureAction=[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil];
        [alertController addAction:sureAction];
        [self presentViewController:alertController animated:NO completion:nil];
    
    }

    /*
     *生成订单信息及签名
     */
    //将商品信息赋予AlixPayOrder的成员变量
    Order*order=[[Order alloc]init];
    order.partner=partner;
    order.sellerID=seller;
    order.outTradeNO=[self generateTradeNO];//订单ID(由商家自定义)
    order.subject=@"支付宝测试支付";//商品标题
    order.body=@"支付宝测试支付数据";//商品描述
    order.totalFee=@"0.01";//商品价格
    
//    order.notifyURL =  @"http://www.baidu.com"; //回调URL
    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=@"paypast";
    //将商品信息拼接成字符串
    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) {
            NSLog(@"*reslut = %@\n",resultDic);
        }];
    }

}

#pragma mark -
#pragma mark   ==============产生随机订单号==============

- (NSString *)generateTradeNO
{
    static int kNumber = 15;
    
    NSString *sourceStr = @"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    NSMutableString *resultStr = [[NSMutableString alloc] init];
    srand((unsigned)time(0));
    for (int i = 0; i < kNumber; i++)
    {
        unsigned index = rand() % [sourceStr length];
        NSString *oneStr = [sourceStr substringWithRange:NSMakeRange(index, 1)];
        [resultStr appendString:oneStr];
    }
    return resultStr;
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

4. 设置回调

 

5. 回调在AppDelegate.m中

 

// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
    if ([url.host isEqualToString:@"safepay"]) {
        //跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"*result = *%@",resultDic);
        }];
    }
    return YES;
}

 

© 著作权归作者所有

粉丝 0
博文 35
码字总数 11408
作品 0
石家庄
程序员
私信 提问

暂无文章

JS--function

一、声明提前(hoist) 在js程序开始执行前,引擎会查找所有var声明的变量和function声明的函数,集中到当前作用域顶部集中创建,赋值留在原地 二、三种创建函数的方式 1、声明方式创建函数-...

wytao1995
今天
4
0
微服务之间调用控制器注解类型的差异

今天在一个业务服务通过Feign调用文件服务上传文件时遇到了几个问题: 1. 提示http请求头过大的问题; 此时需要修改bootstrap.yml,加入 server: max-http-header-size: 10000000 用以放大...

不再熬夜
今天
5
0
用 4G 工作是什么体验

七月开始,因为工作原因,在公司附近租了个住处,方便工作。离公司近了,感觉就是不一样,之前每天 5:30 就要起床赶地铁,现在可以睡到自然醒,一看才 7 点,悠闲的起床洗漱,踱步到公司,都...

zzxworld
今天
6
0
sonar报错volatile

问题发生 原先代码如下: //认证授权码private static volatile String AUTHORIZATION_CODE = "init"; git push 之后,sonar认为这是个bug检测报告截图如下: 分析排查 解释说明: Markin...

开源小菜鸟2333
今天
5
0
《Java实践指南》--读后

闲读《Java实践指南》... 1.lvy 某些项目中能够看到ivy.xml。早期使用ant的项目中,常常用ivy.xml来下载项目依赖。 2.ant 作为java程序员,应该都知道ant,虽然可能用过的人不多。为什么ant...

RippleChan
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部