原文出处:
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的文件中,增加头文件引用。
1
2
3
4
|
#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支付
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
,顶部添加头:
1
|
#import <Foundation/Foundation.h>
|
- 配置返回处理代码
在 AppDelegate.m 文件中,增加引用代码:
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)
至此,完成了支付宝iOS客户端的配置
微信支付撰写中。。。。
后记:
有朋友反馈,运行时在 rsa.h
中,会出现:
解决方法:
在在项目文件夹中找到找到和项目同名的文件夹 ,在Header Search Paths中添加路径
一样把文件夹拖进去!