美文网首页iOS Developer
基于URL路由层实现第三方支付效果

基于URL路由层实现第三方支付效果

作者: 别舔我丶 | 来源:发表于2017-03-29 20:36 被阅读0次

第一次写简书的文章,写的不好,请大家多多指教.这几天看了一下关于URL Scheme相关的知识.通过使用这个知识点来实现类似第三方微信支付的效果.我们先来看一下效果图.是用自己的工程去调用一个类似微信的工程.


支付成功

  我们先来了解一个关于类似微信这样的app,提供给别的app调起它的支付,那么他是怎么实现的呢.其实就是通过URL Scheme来调起微信app,同时通过传过来的URL进行定位,跳转到对应的支付页面.在微信工程(工程名:payTestDemo,以下称微信工程,原工程为用户建的工程)的Target中设置Info的URL Types,这个URL Types就是别的App调起我们微信工程的统一的入口.

URL Types

  app在启动的时候都会注册自己的URL Types,我们可以利用浏览器来测试URL Types是否有效.在地址栏上面输入我们的URL链接.例如:payDemo:// ,浏览器可以帮我们调起微信工程,通过URLTypes来唤起app的时候,我们又是怎么才能够定位到相应的界面呢.下面我们就来聊聊URL Scheme.

我们在app启动的时候,会先初始化app,我在MainTabController这个类中.创建导航的时候监听了"payDemo"这个命名空间.

[[LLPayRoute llPayRoute] monitorRouteWithNameSpace:@"payDemo" routeType:@"viewController&paycount&shopID" handler:^(NSDictionary*params) {

if ([params[@"viewController"] isEqualToString:@"PaymentViewController"]) {

Class class = NSClassFromString(params[@"viewController"]);

PaymentViewController *vc = [[class alloc]init];

vc.payCount = params[@"paycount"]; //获取支付金额

vc.shopID = params[@"shopID"]; //获取对应的商家ID 类似微信开放平台上的商家ID 作为支付成功之后的返回路径.

[nav pushViewController:vc animated:YES];

}];

通过注册"payDemo"这个命名,在收到一条对应payDemo://的请求的时候.就会执行handler中的Block方法,需要注意的是routeType参数需要和请求参数一一对应.routType是一个请求模板,请求的链接需要满足这个模板才能执行回调的Block.

app在获取到一条请求链接的时候,会在AppDelegate中调用一个方法,

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options {

        NSString *str = url.absoluteString; //获取当前链接

        NSArray *urlArray = [str componentsSeparatedByString:@"://"]; //获取参数和命名空间

        if (urlArray.count > 1) {

        [[LLPayRoute routeWihtNameSpace:urlArray[0]] sendRouteURLString:urlArray[1]]; //发送路由请求

         }

         return YES;

}

在这个方法中是可以获取到当前请求的链接,LLPayRoute是一个处理路由请求的类.小伙伴导出我的项目的时候可以自己看看,有时间的话,我也会写一下关于我的路由处理的思路.通过分割链接,例如请求的链接是:payDemo://PaymentViewController&500&payShopID777,分割链接.得到一个是payDemo的命名空间以及一串参数.通过sendRoutURL这个方法.发送事件.之后调起仿的微信支付. 

微信支付

支付完成之后,通过调用openURL回到你自己工程,同时返回的对应成功或失败的状态码进行处理.原工程在调起微信工程的时候,有把对应的原工程的URL Types作为参数传到微信工程.取的微信工程的URL Types作为返回链接的协议首部,例如:payShopID777.

[[UIApplication sharedApplication]openURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@://200",self.shopID]]]; // 200支付成功 500失败.

同时在原工程也需要获得微信工程返回的状态码进行回调.在原工程的APPDelegate类中,实现

openURL这个方法.于微信工程中类似,此处就不进行封装了.

[[LLPayRoute llPayRoute]monitorRouteWithNameSpace:@"payShopID777" routeType:@"status" handler:^(NSDictionary*params) {

if ([params[@"status"] isEqualToString:@"500"]) {

//用户取消

}else if ([params[@"status"] isEqualToString:@"200"]) {

//支付成功

}

}];

以下附上微信工程地址欢迎大家下载:

仿微信支付工程:

github.com/DifficultyToCreatName/ThirdPayDemo

自建工程:

github.com/DifficultyToCreatName/YourSelfProject

希望朋友们点个星星,

相关文章

  • 基于URL路由层实现第三方支付效果

    第一次写简书的文章,写的不好,请大家多多指教.这几天看了一下关于URL Scheme相关的知识.通过使用这个知识点...

  • 简单调用支付宝付款功能

    支付宝 Url scheme 具体代码如下: 实现效果如下:

  • iOS JLRoutes使用

    iOS路由组件使用说明 该路由基于第三方框架JLRoutes,其中运行机制为:保存一个全局的map,key是url...

  • houyi平台-配置指南-网关配置

    网关基本配置说明 TODO:配置URL 配置微服务 基于Nacos实现动态路由 参考文档https://blog....

  • iOS路由设计与实现(HACRouter)

    最近做了一个iOS路由层--HACRouter,通过URL对访问需求的注册,绑定handler,实现跨模块、跨应用...

  • 12.Vue嵌套路由(三层)

    Vue嵌套路由:实现效果(路由三层嵌套,点击一级tab显示二级tab效果,二级tab点击切换对应内容,不在tab区...

  • 模拟面试问题总结

    AngularJS路由实现原理 Angular路由 允许我们通过不同的URL访问不同的内容,并且Angular路由...

  • 模拟面试问题总结

    AngularJS路由实现原理 Angular路由 允许我们通过不同的URL访问不同的内容,并且Angular路由...

  • Web服务器的负载均衡

    一、七层负载均衡的实现 基于url等应用层信息的负载均衡nginx的proxy是一个很强大的功能,实现了七层负载均...

  • 前端路由实现

    前端路由 前端路由实现原理,就是根据不同的 url ,在页面上显示相应的内容。 hash 浏览器 url 变化时,...

网友评论

    本文标题:基于URL路由层实现第三方支付效果

    本文链接:https://www.haomeiwen.com/subject/lvfyottx.html