许久未写博客,趁着这段时间项目比较轻松来写写。最近的项目的遇到了第三方支付,有支付宝支付、微信支付,这里我先写一下支付宝支付的集成和使用,可以给小白们一些帮助。具体的集成流程在官方文档中都有,可以前去参考。
第一步集成
支付宝的集成比较简单,首先进入蚂蚁金服开放平台,注册好开发者账号,然后创建应用
选择自用型应用
在创建应用后会进行完善应用信息,如果要使用支付功能必须要进行签约,签约的话会审核商家也就是应用内支付的收款方的相关信息,只有用过了审核才能使用支付功能。关于签约我们就不细说了,直接先说集成。
步骤1:启动IDE(如Xcode),把iOS包中的压缩文件中以下文件拷贝到项目文件夹下,并导入到项目工程中。
AlipaySDK.bundleAlipaySDK.framework
在Build Phases选项卡的Link Binary With Libraries中,增加以下依赖:
在导入依赖库后集成就基本完成了。
作为移动端在支付上做的事其实很少,具体的如公钥密钥的配置,商品信息的配置还有价格计算等等都是放在商户服务端完成,从安全的角度来说在移动端代码中是不允许进行商品加密的。所以这交给后台人员就好了,他们处理后我们直接调用支付接口获取组装和签名后的请求串orderString,将获取到的orderString直接传入调用启动支付宝的的SDK中。
第二步使用
首先在Appdelegate中写下以下方法
- (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) {
NSLog(@"result = %@",resultDic);
}];
}
return YES;
}
// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
if ([url.host isEqualToString:@"safepay"]) {
//跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
}
return YES;
}
在使用支付宝支付前,先写一个支付单列,方便在各个地方调用支付,当然也有其他方式,我这里使用的是单列。
1.首先创建支付单列
在.m文件中
/**
* 支付单例管理类
*/
+(id)sharePayManager
{
static SYPayManager *asAlixPay = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
asAlixPay = [[SYPayManager alloc] init];
});
支付宝支付方法
/**
* 支付宝支付
*/
-(void)handleOrderPayWithParams:(NSDictionary *)aParam
{
NSLog(@"aParm = %@",aParam);
NSString *appScheme = @"alisdkofshuyinHotel";
NSString *orderString = aParam[@"payInfo"];
// NOTE: 调用支付结果开始支付
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
int statusCode = [resultDic[@"resultStatus"] intValue];
if (statusCode == 9000)
{
//订单支付
[MBProgressHUD showText:@"支付成功"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"paySuccess" object:nil];
}
else
{
//交易失败
// [[NSNotificationCenter defaultCenter] postNotificationName:@"PAY_STATUS" object:@"0"];
[MBProgressHUD showText:@"支付异常"];
}
}];
}
在.h文件里面
//生成支付宝单例类
+(id)sharePayManager;
//支付宝支付
//aParam 后端返回支付信息
-(void)handleOrderPayWithParams:(NSDictionary *)aParam;
记得先引用头文件
#import <AlipaySDK/AlipaySDK.h>
单列写好后,在需要支付的地方调用单列就可以了。我这里采用的是字典,在用的地方将从服务端请求下来支付商品信息orderString装入字典,appScheme是在开发平台中得到的。得到这两个后传入调用支付宝的方法中。
NSString *appScheme = @"alisdkofshuyinHotel";
NSString *orderString = aParam[@"payInfo"];
调用支付宝
// NOTE: 调用支付结果开始支付
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
int statusCode = [resultDic[@"resultStatus"] intValue];
if (statusCode == 9000)
{
//订单支付
[MBProgressHUD showText:@"支付成功"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"paySuccess" object:nil];
}
else
{
//交易失败
// [[NSNotificationCenter defaultCenter] postNotificationName:@"PAY_STATUS" object:@"0"];
[MBProgressHUD showText:@"支付异常"];
}
}];
在使用单列的地方如下写
[[SYPayManager sharePayManager]handleOrderPayWithParams:responseObject[@"data"]];
以上基本就是移动端所需要做的事了。麻烦的事情都交给服务端去做了,我们简单调用接口就好了,所以支付还是比较简单的。微信支付其实也差不多,有空再写微信支付。
网友评论