您的位置:首页 > 移动开发 > IOS开发

iOS 快速集成支付宝

2016-06-21 11:41 429 查看
原文出处: TianBai


前期准备

接入前期准备工作包括商户签约和密钥配置,已完成商户可略过。
下载支付宝SDK支付宝SDK下载地址


SDK集成流程

将支付宝SDK中以下文件拷贝到项目文件夹下,并导入开发环境中。
AlipaySDK.bundle


AlipaySDK.framework


libcrypto.a


libssl.a


AliSDKDemo\Util 及下面所有文件


AliSDKDemo\openssl 及下面所有文件


Order.h
Order.m

导入系统依赖库在link Binary With Libraries 里面添加

CoreMotion.framework


CFNetwork.framework


SystemConfiguration.framework


QuartzCore.framework


CoreText.framework


CoreTelephony.framework


CoreGraphics.framework


libc++.tbd


libz.tbd
加上之前导入的3个
AlipaySDK.framework


libcrypto.a


libssl.a
共计12个
在需要使用SDK的文件中,增加头文件引用。

Objective-C

1234#import <AlipaySDK/AlipaySDK.h> #import "Order.h"#import "DataSigner.h"#import <AliPaySDK/AlipaySDK.h>
但是会出现错误:


这是为什么呢,原因是项目没有找到之前导入的
AliSDKDemo\Util 及下面所有文件
AliSDKDemo\openssl 及下面所有文件
头文件,解决方法 在项目文件夹中找到
Util
openssl
文件夹 ,在Header Search Paths中添加路径

到这一步,SDK集成已经完毕

配置代码

配置alipay支付
Objective-C

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

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

#pragma mark ==============配置alipay支付==============

-
(void)payAction

{

/*

*生成订单信息及签名

*/

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

Order
*order
=
[[Order
alloc]
init];

order.partner
=
@"";//商户在支付宝签约时,支付宝为商户分配的唯一标识号(以2088开头的16位纯数字)。

order.sellerID
=
@"";////卖家支付宝账号对应的支付宝唯一用户号(以2088开头的16位纯数字),订单支付金额将打入该账户,一个partner可以对应多个seller_id。

order.outTradeNO
=
[self
generateTradeNO];
//订单ID(由商家自行制定)

order.subject
=
@"测试商品";
//商品的标题/交易标题/订单标题/订单关键字等。

order.body
=
@"runbey商品描述";
//对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。

order.totalFee
=
@"0.01";
//该笔订单的资金总额,单位为RMB(Yuan)。取值范围为[0.01,100000000.00],精确到小数点后两位。

order.notifyURL
= @"http://*****";
//支付宝服务器主动通知商户网站里指定的页面http路径。

//实际项目开发中
订单信息应该由服务器返回

order.service
=
@"mobile.securitypay.pay";

order.paymentType
=
@"1";

order.inputCharset
=
@"utf-8";

order.itBPay
=
@"30m";

order.showURL
=
@"m.alipay.com";

//应用注册scheme
便于支付结束后重新打开客户端

NSString
*appScheme
=
@"";

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

NSString
*orderSpec
=
[order
description];

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

//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode

NSString
*
privateKey
=
@"";//商户私钥

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"];

NSLog(@"签名字符串:%@",orderString);

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

NSLog(@"支付结果reslut
= %@",resultDic);

}];

}

}

#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;

}

此时运行,这2个文件:

base64.h
openssl_wrapper.h


会出现:

Cannot find interface declaration for ‘NSObject’, superclass of ‘Base64’

那么需要打开的文件
base64.h
openssl_wrapper.h
,顶部添加头:

Objective-C

1#import <Foundation/Foundation.h>
配置返回处理代码
在 AppDelegate.m 文件中,增加引用代码:
Objective-C

1

2

3

4

5

6

7

8

9

10

-
(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;

}

添加URL Schemes

点击项目名称,点击“Info”选项卡,在“URL Types”选项中,点击“+”, 在“URL Schemes”中输入项目的bundleid。“bundleid”来自于 NSString *appScheme = @”****”(一般为项目的bundleid)





c1000

至此,完成了支付宝iOS客户端的配置

微信支付撰写中。。。。


后记:

有朋友反馈,运行时在
rsa.h
中,会出现:





解决方法:

在在项目文件夹中找到找到和项目同名的文件夹 ,在Header Search Paths中添加路径

一样把文件夹拖进去!



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: