支付集成 老生常谈了,之前也写过一个,这里再详细说一下支付宝的,首先 ,集成之前最好是先看看官网的集成文档和对应的demo,这个!一定要看一下!其次,开发者账号申请appID和PrivateKey拿到,之后你可以先拿到demo中试一下
ps:如果后台做过支付宝支付,而且告诉你,他已经做好了接口,你就可以直接替换官网demo中的doAPPay方法中最下边:
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
}];
此方法中的orderString直接替换成后端给你的返回参数试一下即可
当然 我们在官方demo中发现
意思就是不让把这些工作放在前端,这对于我们来说,倒是简单了很多。还有就是前边说的id和PrivateKey这些都不用!真正支付的时候 我们只需:
1、请求后台发起支付
2、调起支付宝
3、接受回调
即可!
------分割线
如果你在demo中测试的没问题,那么我们可以开工了
首先我相当推荐使用pod导入!!!不推荐直接把sdk拖进项目中,要添加一堆东西,麻烦,直接
pod 'AliPay'
简单明了!(据说支付宝的客服不推荐使用pod...emmmm说容易出乱七八糟的问题)
之后运行项目会报错,这一步具体我忘了,反正就是改了个Xocde的什么设置,可以搜一下,之后设置一下白名单和url schemes
!!!注意
!!!不设置白名单无法调起支付宝!
!!!不设置url schemes无法返回你的app
所以首先info.plist中
<string>alipay</string>
<string>alipayshare</string>
然后Xcode-Info-URL Types中添加一下,这里最好结合你的项目去设置url schemes
之后进入appdelegate中导入头文件
#import <AlipaySDK/AlipaySDK.h>
之后添加iOS的回调处理函数,注意看你们项目支持从iOS几开始,iOS9之前之后是不一样的 ISO9之后:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options NS_AVAILABLE_IOS(9_0); // no equiv. notification. return NO if the application can't open for some reason
说起来这都iOS12了,,,真快啊
方法中添加:
if ([url.host isEqualToString:@"safepay"]) {
// 支付跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
//发出支付结果通知
[[NSNotificationCenter defaultCenter] postNotificationName:NotificationKeyAliPayResult object:resultDic];
}];
}
这之后,在你需要支付的地方,直接继续引入头文件
#import <AlipaySDK/AlipaySDK.h>
然后参考官方demo调起支付
/**
* 支付接口
*
* @param orderStr 订单信息
* @param schemeStr 调用支付的app注册在info。plist中的scheme
* @param compltionBlock 支付结果回调Block
*/
- (void)payOrder:(NSString *)orderStr
fromScheme:(NSString *)schemeStr
callback:(CompletionBlock)completionBlock;
需要注意的是!!!一般我们要考虑用户没装支付宝的情况,官方demo中可以看到,没装的话,就是网页版,但是比较坑的是,官方demo是直接在首页,而我们一般项目中的话,是末端界面,所以应该是:
if (![[UIApplication sharedApplication] canOpenURL: [NSURL URLWithString:@"alipay:"]]) {
NSArray *array = [[UIApplication sharedApplication] windows];
UIWindow* win=[array objectAtIndex:0];
[win setHidden:NO];
}
//支付
[[AlipaySDK defaultService] payOrder:orderString fromScheme:@"alisdk" callback:^(NSDictionary *resultDic) {
//网页版回调
NSArray *array = [[UIApplication sharedApplication] windows];
UIWindow* win=[array objectAtIndex:0];
[win setHidden:YES];
[[NSNotificationCenter defaultCenter] postNotificationName:NotificationKeyAliPayResult object:resultDic];
}];
这样子即可!
如果不这么写,在项目中用户没下载支付宝,掉不起来网页版,而下边支付宝回调本来我认为,在APPdelegate中写了这边就不用管了,但是,发现存在的意义就是网页版的回调!在这里!所以这边也要处理一下,否则返回来APP就白屏了。。。。
以上就是支付宝支付集成!