必赢亚洲手机app下载


iOS学习笔记40

IOS开发支付宝集成766net必赢亚洲手机版

IOS开发支付宝集成

开发准备


1.先是新建项目,然后去官网下载最新的开发包:
http://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103563&docType=1,
理所当然也得以用CocoaPods来下载不过用这几个下载的话只会下载到单纯的客户端与网络服务请求的SDK不包罗加密的那3个代码,而有个别商行是要把加密做到本地的之所以采用哪个种类方法看开发者的习惯于集团需要.
2.下载后打开点击开发包可以打开更新日志来比对当前版本不要去部分非官网的地点下载SDK有只怕不是前卫版本会冒出BUG
3.开拓客户端开发包找到IOS对应的包文件解压得到开发包,包蕴二个framework文本3个bundle文件多个Demo文件夹

相似情形下支付功用的竞相流程


例如我们去有个别APP去付出一个出品,流程为:
1.用户点击支付->
2.客户端请求服务器用户支出->
3.服务器收到请求生成金额订单等要给第三方支付的所有消息,并扭转回调参数传给客户端->
4.客户端接收音讯(一般会再让用户确认支付只怕大约购买后是生成订单,然后才是付款)并将服务器给的消息分别传入SDK要求的参数中,调用SDK的费用格局->
5.由SDK向SDK本身的服务器发出支付请求,SDK自身的服务器收到支付请求处理成功后,给客户端自身与公司的后台都发送一条支付成功的音讯,客户端与后台依据那条音讯再做处理.

本着开发环境的有的装置


支付又分为2种情状当地签名,和服务器签名,我动用正好都以商行必要本地签,服务器的本人就多少说1点.

服务器签名:
/**
 *  支付接口
 *
 *  @param orderStr       订单信息
 *  @param schemeStr      调用支付的app注册在info.plist中的scheme
 *  @param compltionBlock 支付结果回调Block
 */
- (void)payOrder:(NSString *)orderStr
      fromScheme:(NSString *)schemeStr
        callback:(CompletionBlock)completionBlock;

服务器签名注意的是在callback:回调中要举办验签,就是把服务器给的订单签名消息在用公钥解密,比对订单细节,检查是或不是被别人篡改,并且只假若wap支付,不会反回在appDelegateapplication:openURL方法.

地面签名:

先拖入落成加密的文书与模型:

766net必赢亚洲手机版 1

加密的文件.png

那儿候会报错(补充有个别:
有些朋友找不到NSString可能局地数据类型报错都以因为缺乏Foundation头文件,大概自个儿写的不老子@楚,有个别朋友依旧不太懂)半数以上荒唐都是因为有的文本中在支付宝的Demo的Pch文本中联合添加的#import <Foundation/Foundation.h>,假诺大家的项目中绝非这一步,那么如故也建立pch如故单独添加上.

这时还会有3个错误:

766net必赢亚洲手机版 2

路线找不到.png

小心那里的Header Search Paths 路径为空:

766net必赢亚洲手机版 3

途径为空.png

打开统计机那个文件的所在地
双击Header Search Paths将电脑的文本拖入Header Search Paths会生成二个途径:

766net必赢亚洲手机版 4

变迁的路径.png

导入一来框架:
这几个最好接着Demo二个一个往里增加,也不要光看网上资料首要照旧看Demo:

766net必赢亚洲手机版 5

导入框架.png

添加SDK和静态库:

766net必赢亚洲手机版 6

SDK静态库.png

报错:那个张冠李戴与此外一种说SDK不资助6肆位相比较广泛,都以把静态库或许SDK都删了重新导入就行了

766net必赢亚洲手机版 7

谬误消息.png

到这里应该已经可以运行程序了.
如果还是出现了编译错误等问题,导入框架不全与SDK静态库的路径错误比例比较大.
建议等能够运行程序后在进行开发.

专业开发

率先大家介绍一段代码:

  NSString *orderSpec = [order description];

将货品的新闻丰硕为字符串order是二个对象,而description]是将以此目的的习性进行拼接再次回到3个字符串.

在介绍3个属性:

//合作商户ID。用签约支付宝账号登录ms.alipay.com后,在账户信息页面获取。
NSString *partner = @"";
//账户ID。用签约支付宝账号登录ms.alipay.com后,在账户信息页面获取。
NSString *seller = @"";
//商户私钥,自助生成
NSString *privateKey = @"";

那三个属性必须是私家或商店申请后才能取得的..作者用的商号的就不写上了请自行填写.

//将商品信息赋予AlixPayOrder的成员变量
    Order *order = [[Order alloc] init];
    order.partner = partner;
    order.seller = seller;
    order.tradeNO = @"G111111111111"; //订单ID(由商家自行制定)
    order.productName = @"我的测试"; //商品标题
    order.productDescription = @"我的商品描述"; //商品描述
    order.amount = @"0.01"; //商品价格
    order.notifyURL =  @"http://www.xxx.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 = @"alisdkdemo";

    //将商品信息拼接成字符串
    NSString *orderSpec = [order description];
    NSLog(@"orderSpec = %@",orderSpec);

    //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
    id<DataSigner> signer = CreateRSADataSigner(privateKey);
    NSString *signedString = [signer signString:orderSpec];


    NSString *orderString = nil;

浮动加密后的字符串 注意的是

NSString *appScheme = @"alisdkdemo";

其一值是从支付宝的生意人地址中填入的,请保持一致.

最终处理结果:

if (signedString != nil) {
        orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
                       orderSpec, signedString, @"RSA"];

        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {

            //结果处理,其实就是取字典里面的内容,这个取字符串然后变个模型就好了 或者直接取不便模型,方法很多.
            NSLog(@"开始确认支付状态 %@",resultDic[@"resultStatus"]);
            AlixPayResult* resultModel = [AlixPayResult itemWithDictory:resultDic];
            if (resultModel)
            {
                //状态返回9000为成功
                if (resultModel.statusCode == 9000)
                {
                    /*
                     *用公钥验证签名 严格验证请使用result.resultString与result.signString验签
                     */
                    NSLog(@"支付宝交易成功");

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

                    //交易成功
                    NSString* key = AlipayPubKey;//签约帐户后获取到的支付宝公钥
                    id<DataVerifier> verifier;
                    verifier = CreateRSADataVerifier(key);

                    // 验证签名
                    if ([verifier verifyString:resultModel.resultString withSign:resultModel.signString])
                    {
                        //验证签名成功,交易结果无篡改
                        NSLog(@"验证成功");
                    }
                }
            }
            else if([resultDic[@"resultStatus"]isEqualToString:@"6001"])
            {
                               //用户取消
                NSLog(@"用户主动取消支付");
            }else
            {

            }
        }];
}

此处注意:if([resultDic[@"resultStatus"]isEqualToString:@"6001"])支出宝有BUG
那个6001
不要信,可以和商号协议下,是加个确认接口依然自然时间内检查后台,同理可得很有或者用户付钱成功,SDK公告你用户手动撤消,那个BUG是在弱网状态下相比多.

然后记得在 AppDelegate中间添加如下代码:

//只要是调用手机上的支付宝客户端,在支付宝客户端操作完成返回自己的app时,都会调用这个方法,
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
    //跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给SDK(这个是将支付宝客户端的支付结果传回给SDK)
    if ([url.host isEqualToString:@"safepay"]) {
        [[AlipaySDK defaultService]
         processOrderWithPaymentResult:url
         standbyCallback:^(NSDictionary *resultDic)
         {
             NSLog(@" ------result = %@",resultDic);//返回的支付结果
         }];
    }
    return YES;
}

766net必赢亚洲手机版, 

最终记得把那边写了:

766net必赢亚洲手机版 8

URL.Types.png

NSString *appScheme = @"alisdkdemo"代码 网页上申请的
图片上那里填写的维持一致.


补充: 假设要用swift来调用支付宝SDK
最好把开发的与回调的逻辑单独建立工具类传递数据便好,从流水线上自身无太大分别稍微注意的是在swift
AlipaySDK.h有或然因为语言环境难点应运而生缺失引入类的情事,少什么补什么就好,其他也一样.

文/曾迦(简书小编)
初稿链接:http://www.jianshu.com/p/2b9bbfcb7ec4
作品权归小编所有,转发请联系小编获得授权,并标注“简书小编”。

相关文章

No Comments, Be The First!
近期评论
    功能
    网站地图xml地图