iOS - 关于支付宝的集成

本文章不再赘述其他的知识点。相信大家已经有了支付宝集成的基础。官方文档已经非常详细,下面开始讲述我的集成史(谨记)。。。

步骤分为以下几步:

1.引入SDK,拖入工程;

AlipaySDK.bundle     ,    AlipaySDK.framework     ,    libcrypto.a     ,     libssl.a     ,      openssl(文件夹)  ,   Util(文件夹)    ,order.h,   order.m .  如图:


2.引入必要的依赖库;


3.在工程的TARGETS---Info  ,找到 URL Types ,添加 URL Schemes  .假设为:@"ZJJAPP"  。  创建一个pch,在里面写上:


#ifdef __OBJC__

#import <UIKit/UIKit.h>

#import <Foundation/Foundation.h>

#endif


4. otherlinkerflags,pch,bitcode,Header Search Paths等等...这样的配置就不在此细说,如果配置的过程中有什么问题,相信你可以解决的。

5.代码部分

在APPDelegate.m:引入头文件

#import <AlipaySDK/AlipaySDK.h>

#pragma mark - 支付宝的配置

- (BOOL)application:(UIApplication *)application

            openURL:(NSURL *)url

  sourceApplication:(NSString *)sourceApplication

         annotation:(id)annotation

{

    if ([url.hostisEqualToString:@"safepay"]) {

        // 支付跳转支付宝钱包进行支付,处理支付结果

        [[AlipaySDKdefaultService]processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary *resultDic) {

            NSLog(@"result = %@",resultDic);

        }];

        

        // 授权跳转支付宝钱包进行支付,处理支付结果

        [[AlipaySDKdefaultService]processAuth_V2Result:urlstandbyCallback:^(NSDictionary *resultDic) {

            NSLog(@"result = %@",resultDic);

            // 解析 auth code

            NSString *result = resultDic[@"result"];

            NSString *authCode =nil;

            if (result.length>0) {

                NSArray *resultArr = [resultcomponentsSeparatedByString:@"&"];

                for (NSString *subResultin resultArr) {

                    if (subResult.length >10 && [subResulthasPrefix:@"auth_code="]) {

                        authCode = [subResult substringFromIndex:10];

                        break;

                    }

                }

            }

            NSLog(@"授权结果 authCode = %@", authCode?:@"");

        }];

    }

    returnYES;

}


// NOTE: 9.0以后使用新API接口

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*,id> *)options

{

    if ([url.hostisEqualToString:@"safepay"]) {

        // 支付跳转支付宝钱包进行支付,处理支付结果

        [[AlipaySDKdefaultService]processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary *resultDic) {

            NSLog(@"result = %@",resultDic);

        }];

        

        // 授权跳转支付宝钱包进行支付,处理支付结果

        [[AlipaySDKdefaultService]processAuth_V2Result:urlstandbyCallback:^(NSDictionary *resultDic) {

            NSLog(@"result = %@",resultDic);

            // 解析 auth code

            NSString *result = resultDic[@"result"];

            NSString *authCode =nil;

            if (result.length>0) {

                NSArray *resultArr = [resultcomponentsSeparatedByString:@"&"];

                for (NSString *subResultin resultArr) {

                    if (subResult.length >10 && [subResulthasPrefix:@"auth_code="]) {

                        authCode = [subResult substringFromIndex:10];

                        break;

                    }

                }

            }

            NSLog(@"授权结果 authCode = %@", authCode?:@"");

        }];

    }

    returnYES;

}


在支付的触发事件里面加上如下代码:

 

- (void)beginToPay {

    

    // 配置 appid还有私钥

    NSString *appID =@"支付宝分配给开发者的应用ID";

    NSString *privateKey =@"私钥";

    

    //将商品信息赋予AlixPayOrder的成员变量

    Order* order = [Ordernew];

    

    // NOTE: app_id设置

    order.app_id = appID;

    

    // NOTE: 支付接口名称

    order.method =@"alipay.trade.app.pay";

    

    // NOTE: 参数编码格式

    order.charset =@"utf-8";

    

    // NOTE: 当前时间点

    NSDateFormatter* formatter = [NSDateFormatternew];

    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    order.timestamp = [formatterstringFromDate:[NSDatedate]];

    

    // NOTE: 支付版本

    order.version =@"1.0";

    

    // NOTE: sign_type设置

    order.sign_type =@"RSA";

    

    // NOTE: 商品数据

    order.biz_content = [BizContentnew];

    // order.biz_content.body = resultProductNameStr;//非必填,在此。。。我注掉

    order.biz_content.subject =@"1";   //商品数量

    order.biz_content.out_trade_no = [selfgenerateTradeNO];//订单ID(由商家自行制定)

    order.biz_content.timeout_express =@"30m";//超时时间设置

    order.biz_content.total_amount =@"0.01";//商品价格

    

    //将商品信息拼接成字符串

    NSString *orderInfo = [orderorderInfoEncoded:NO];

    NSString *orderInfoEncoded = [orderorderInfoEncoded:YES];

    //NSLog(@"orderSpec = %@",orderInfo);

    

    // NOTE: 获取私钥并将商户信息签名,外部商户的加签过程请务必放在服务端,防止公私钥数据泄露;

    //       需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode

    

    id<DataSigner> signer =CreateRSADataSigner(privateKey);

    

    NSString *signedString = [signersignString:orderInfo];

    

    // NOTE: 如果加签成功,则继续执行支付

    if (signedString !=nil) {

        //应用注册scheme,AliSDKDemo-Info.plist定义URL types

        NSString *appScheme =@"ZJJAPP";

        

        // NOTE: 将签名成功字符串格式化为订单字符串,请严格按照该格式

        NSString *orderString = [NSStringstringWithFormat:@"%@&sign=%@",

                                 orderInfoEncoded, signedString];

        

        

        // NOTE: 调用支付结果开始支付

        [[AlipaySDKdefaultService]payOrder:orderStringfromScheme:appSchemecallback:^(NSDictionary *resultDic) {

            NSLog(@"reslut = %@",resultDic);

        }];

    }

    

}


最后,支付宝配置就结束了。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值