支付宝支付
1、SDK下载
2、SDK导入
注意事项:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.LXsfaW&treeId=59&articleId=103677&docType=1
3、SDK配置
-
新建.pch文件
#import <AlipaySDK/AlipaySDK.h>
-
添加依赖库文件
-
报错解决办法
报错是因为openssl的头文件没有引入工程,所以要引入
-
注意iOS9.0以上要修改info.plist文件中的网络配置
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
4、运行
5、AliPay提供的方法接口
-
支付接口
/**
* 支付接口
*
* @param orderStr 订单信息
* @param schemeStr 调用支付的app注册在info.plist中的scheme
* @param compltionBlock 支付结果回调Block
*/
- (void)payOrder:(NSString *)orderStr
fromScheme:(NSString *)schemeStr
callback:(CompletionBlock)completionBlock;
6、搭建程序
-
新建plist文件模拟商户的基本信息
参数 | 含义 |
---|---|
partner | 合作身份者ID,以2088开头由16位纯数字组成的字符串。请参考查看PID |
seller | 支付宝收款账号,手机号码或邮箱格式。 |
private_key | 商户方的私钥,pkcs8格式。请参考RSA私钥及公钥生成 |
注意:这些参数配置是为客户端签名功能服务的,仅作为示例使用。商户在接入支付宝产品时,请把这些信息通过商户项目自己的服务端传递。
-
封装AliPay类来管理支付功能
.h文件
#import <Foundation/Foundation.h>
//声明block,把当前支付结果返回到调用支付的控制器中
typedef void(^alipayBlock)(void);
@interface Alipay : NSObject
/**
* Alipay对外提供的方法接口
*
* @param orderDic 订单信息
* @param success 支付成功结果回调
* @param isPaying 正在支付结果回调
* @param error 支付错误结果回调
*/
+ (void)payWithOrderDic:(NSDictionary *)orderDic Success:(alipayBlock)success IsPaying:(alipayBlock)isPaying Error:(alipayBlock)error;
.m文件
//重写初始化类,获取商户信息
-(instancetype)init{
self = [super init];
if (self) {
//从plist文件中获取当前账号信息
NSDictionary *alipayDic = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Alipay" ofType:@"plist"]];
//商户ID
_partner = alipayDic[@"partner"];
//商户账号
_seller = alipayDic[@"seller"];
//商户私钥
_privateKey = alipayDic[@"privateKey"];
}
return self;
}
-(void)payWithOrderDic:(NSDictionary *)orderDic Success:(alipayBlock)success IsPaying:(alipayBlock)isPaying Error:(alipayBlock)error{
//判断商户ID 账号 私钥 是否能够获取到
if ([_partner length] == 0 || [_seller length] == 0 || [_privateKey length] == 0) {
NSLog(@"缺少ID、账号、私钥,请在Alipay.plist文件当中填写");
return;
}
//生成订单信息以及签名
Order *order = [[Order alloc]init];
order.partner = _partner;
order.seller = _seller;
//订单ID(商户自行制定)
order.tradeNO = orderDic[@"orderID"];
order.productName = orderDic[@"productName"];
order.productDescription = orderDic[@"productDescription"];
order.amount = [NSString stringWithFormat:@"%@",orderDic[@"amount"]];
//支付宝的服务器参数
order.service = @"mobile.securitypay.pay";
//付款类型
order.paymentType = @"1";
order.inputCharset = @"utf-8";
order.itBPay = @"30m";
//支付宝的scheme 标示
order.showUrl = @"m.alipay.com";
//App的scheme,在Info.plist定义URL types
NSString *appScheme = @"AlipayTestApp";
//将商品信息拼接成字符串
NSString *orderStr = [order description];
NSLog(@"orderStr = %@",orderStr);
//获取私钥并将商户信息签名,外部商户可以根据情况存放于私钥和签名,需遵循RSA签名规范,并将签名字符串base64编号和UrlEncode
id<DataSigner> singer = CreateRSADataSigner(_privateKey);
NSString *signedString = [singer signString:orderStr];
//将签名成功的字符串格式化为订单字符串
NSString *orderString = nil;
if (signedString != nil) {
orderString = [NSString stringWithFormat:@"%@&sign = \"%@\"&sign_type = \"%@\"",orderStr,signedString,@"RSA"];
//支付后的状态处理
[[AlipaySDK defaultService]payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"%@",resultDic);
if ([[resultDic objectForKey:@"resultStatus"] intValue] == 9000) {
//支付成功
success();
}
else if([[resultDic objectForKey:@"resultStatus"] intValue] == 8000){
//正在处理
isPaying();
}
else
{
//支付错误
error();
}
}];
}
}
+ (void)payWithOrderDic:(NSDictionary *)orderDic Success:(alipayBlock)success IsPaying:(alipayBlock)isPaying Error:(alipayBlock)error{
Alipay *pay = [[Alipay alloc]init];
[pay payWithOrderDic:orderDic Success:success IsPaying:isPaying Error:error];
}
Apply Pay
ApplePay的相关分享资料
博客地址:http://www.coderqi.com/2016/02/25/AppPay/
视频地址:http://v.youku.com/v_show/id_XMTQ4Njk0NTE2MA==.html
微信支付
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_1
银联支付
https://open.unionpay.com/upload/download/Development_kit85427986.rar