必赢亚洲手机app下载


IOS开发支付宝集成

花花草草

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

开发准备


1.首先新建项目,然后去官网下载最新的开发包:
http://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103563&docType=1,
理所当然也可以用CocoaPods来下载不过用那个下载的话只会下载到单纯的客户端与网络服务请求的SDK不包蕴加密的那多少个代码,而略带公司是要把加密做到本地的之所以选拔哪个种类艺术看开发者的习惯于企业需要.
2.下载后打开点击开发包能够打开更新日志来比对当前版本不要去部分非官网的地点下载SDK有大概不是流行版本会现出BUG
3.打开客户端开发包找到IOS对应的包文件解压得到开发包,包含一个framework文件一个bundle文件二个Demo文件夹

貌似情况下开发成效的互相流程


比如说大家去某个APP去付出一个成品,流程为:
1.用户点击支付->
2.客户端请求服务器用户支出->
3.服务器收到请求生成金额订单等要给第三方支付的漫天新闻,并扭转回调参数传给客户端->
4.客户端接收音讯(一般会再让用户确认支付大概索性购买后是生成订单,然后才是给付)并将服务器给的音讯分级传入SDK须要的参数中,调用SDK的付出办法->
5.由SDK向SDK自个儿的服务器发出支付请求,SDK本人的服务器收到支付请求处理成功后,给客户端自己与商店的后台都发送一条支付成功的音信,客户端与后台依照那条音讯再做处理.

本着开发条件的部分设置


付出又分为2种情景当地签名,和服务器签名,作者动用正好都以集团要求本地签,服务器的本身就有点说1点.

766net必赢亚洲手机版,服务器签名:
/**
 *  支付接口
 *
 *  @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照旧单独添加上.

此时还会有贰个荒唐:

766net必赢亚洲手机版 2

途径找不到.png

只顾那里的Header Search Paths 路径为空:

766net必赢亚洲手机版 3

途径为空.png

开拓总计机那个文件的所在地
双击Header Search Paths将统计机的文本拖入Header Search Paths会生成3个门路:

766net必赢亚洲手机版 4

转变的路径.png

导入一来框架:
那个最好接着Demo3个二个往里增进,也休想光看网上资料紧要如故看Demo:

766net必赢亚洲手机版 5

导入框架.png

添加SDK和静态库:

766net必赢亚洲手机版 6

SDK静态库.png

报错:这一个荒唐与此外一种说SDK不扶助6二位相比广泛,都是把静态库可能SDK都删了重新导入就行了

766net必赢亚洲手机版 7

漏洞相当多音讯.png

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

正规开发

第一大家介绍一段代码:

  NSString *orderSpec = [order description];

将商品的新闻丰盛为字符串order是多个对象,而description]是将这几个目的的属性举行拼接再次回到一个字符串.

在介绍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必赢亚洲手机版 8

URL.Types.png

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


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

文/曾迦(简书小编)
原文链接:http://www.jianshu.com/p/2b9bbfcb7ec4
小说权归小编所有,转发请联系小编拿到授权,并标明“简书小编”。

相关文章

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