快速集成支付宝支付步骤及注意事项(原创)

来源:互联网 发布:中国煤炭网软件下载 编辑:程序博客网 时间:2024/04/29 08:54

本文介绍了iOS快速集成支付宝支付的方法,本文中介绍的方法是经过一次封装,因此配置完成之后调用仅需一行代码即可支付宝支付,非常的方便,希望大家喜欢。

我只是根据官方的文档,对支付宝的SDK做了进一步封装,其中密钥的生成很简单,需要看官方的文档,官方的文档我在工程附件目录里也有一份,如果需要马上集成,没工夫研究的话,可以大致看一下密钥的生成即可,其他的配置我会在下面进行讨论j_0003.gif



        要在iOS应用里集成支付宝支付,需要公司和支付宝签约,然后生成相应的密钥。密钥的生成支付宝的开发文档里已经说的非常清楚了,这里就不再讨论j_0012.gif

以上是作者原文。

附上作者自己封装的支付宝支付SDK在git链接点击打开链接


将工程中的IntegratedAlipay文件夹导入工程中,记得选copy



点击项目名称,点击“Build Settings”选项卡,在搜索框中,以关键字“search” 搜索,对“Header Search Paths”增加头文件路径:“$(SRCROOT)/项目名称/IntegratedAlipay/AlipayFiles”(注意:不包括引号,如果不是放到项目根目录下,请在项目名称后面加上相应的目录名)



然后不包括引号是这样的如图(小细节)



导入支付宝依赖的库


附上一段官方文档的话:

步骤2:在需要调用AlipaySDK的文件中,增加头文件引用。

1
#import<AlipaySDK/AlipaySDK.h>

步骤3:如果你的app基于9.0编译,那么为了适配iOS9.0中的App Transport Security(ATS)对http的限制,这里需要对支付宝的请求地址alipay.com、alipayobjects.com做例外,在app对应的info.list中添加如下配置(文中以XML格式描述)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>alipay.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.0</string>
                <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
            <key>alipayobjects.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.0</string>
                <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>
    </dict>

说明:

如果商户配置了如下的配置:

1
2
3
4
<key>NSAppTransportSecurity</key>
    <dict>   
        <key>NSAllowsArbitraryLoads</key><true/>
    </dict>

则上述的NSAppTransportSecurity可以不配置。

对于网络配置。

接下来

导入SDK  导入库之后 command + B 编译一下。 如果没错误最好。 如果有错误参照如下可能出现的问题

1. 

问题详情:

(null): URGENT: all bitcode will be dropped because ‘xxxx’ was built without bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. Note: This will be an error in the future.

问题分析:

从上述的错误中应该可以看出,这是因为一个第三方的库不兼容,我的工程中开启了 ENABLE_BITCODE (应该是升级之后自动转换的),而这个第三方的库在编译的时候没有 enable bitcode,所以导致上诉问题。

解决方法:

应该是有两种吧,一种就是换成 enable bitcode 的第三方库,再有一种就是将工程的 ENABLE_BITCODE 设置为 false 就可以了。

因为我这里不太方便换库,所以,就把工程的设置给改了一下。

具体操作方法如下:

操作方法



2.在openssl中他定义的一些东西。不能与你项目中自己定义的宏有同名的


原来我项目中就有STORE    后来我改成了   STORe


如上图

3. SDK中  Order.m 文件是用MRC内存管理模式写的。 会有release

所以 不愿意手动删的  可以改成ARC

如图



(微信支付同理, 不过是有2个文件要改。支付宝是1个)


其他问题待遇到。运行成功

接下来

找到文件



在AlipayHeader.h中修改你需要的内容 例如

kPartnerID、

kSellerAccount、

kNotifyURL、

kAppScheme等。


对于这个scheme是回调时需要的要在APP中设置

如图




图中圈内内容  要和头文件中一样 

只需在需要跳转支付的地方调用此方法即可


在App delegate中添加回调方法,以下是官方文档内的描述

步骤5:配置支付宝客户端返回url处理方法。

(外部存在支付包钱包,支付宝钱包将处理结果通过url返回。)

如示例AliSDKDemo\APAppDelegate.m文件中,增加引用代码:

1
#import<AlipaySDK/AlipaySDK.h>

在@implementation AppDelegate中增加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
 
    //如果极简开发包不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给开发包
    if([url.host isEqualToString:@"safepay"]) {
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
    //【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
            NSLog(@"result = %@",resultDic);
        }];
    }
    if([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回authCode
  
        [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
            //【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
            NSLog(@"result = %@",resultDic);
        }];
    }
    returnYES;
}

好了之后。

在AlipayRequestConfig.m中。可以看到支付宝返回的内容


以下是官方文档给出的错误码描述




到这里基本就结束了。


之后如果你的秘钥错误 可能会出现如下问题

用模拟器测试可能提示


用真机测试是这样的 




等申请好秘钥填好所有信息之后运行一切正常

最后附上支付宝官方文档链接:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.3AADE5&treeId=59&articleId=104352&docType=1

2 0