关于支付宝集成以及用户未安装支付宝白屏的解决

支付集成 老生常谈了,之前也写过一个,这里再详细说一下支付宝的,首先 ,集成之前最好是先看看官网的集成文档和对应的demo,这个!一定要看一下!其次,开发者账号申请appID和PrivateKey拿到,之后你可以先拿到demo中试一下

ps:如果后台做过支付宝支付,而且告诉你,他已经做好了接口,你就可以直接替换官网demo中的doAPPay方法中最下边:

[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
            NSLog(@"reslut = %@",resultDic);
        }];

此方法中的orderString直接替换成后端给你的返回参数试一下即可

当然 我们在官方demo中发现

72b9771feb6df97147ae9b16cdd71158525.jpg

意思就是不让把这些工作放在前端,这对于我们来说,倒是简单了很多。还有就是前边说的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

335c20fcb851966669a47609d90137cd787.jpg

之后进入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就白屏了。。。。

 

以上就是支付宝支付集成!

转载于:https://my.oschina.net/rainwz/blog/2251663

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值