支付宝的url schemesurlschemes可以随意写吗

6683人阅读
日常开发(76)
前段时间有人问过我支付宝中的回调怎么用,所以这里简单说明下。在集成支付宝支付的时候,会有两个回调,一个在AppDelegate中,一个在支付代码中,都是支付成功的回调,区别是,在AppDelegate中的回调是调用客户端支付成功后的回调(成功和失败),在支付处的回调是通过web支付成功的回调。代码如下:
- (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) {
if ([[resultDic objectForKey:@"resultStatus"] isEqualToString:@"9000"]) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"paySucceed" object:nil];
if ([url.host isEqualToString:@"platformapi"]){
[[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
return YES;
id&DataSigner& signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderSpec];
NSString *orderString = nil;
if (signedString != nil) {
orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString, @"RSA"];
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
if ([[resultDic objectForKey:@"resultStatus"] isEqualToString:@"9000"]) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"paySucceed" object:nil];
PaySuccessViewController *paySuccessVC=[[PaySuccessViewController alloc]init];
[self.navigationController pushViewController:paySuccessVC animated:YES];
PayErrorViewController *payErrorVC=[[PayErrorViewController alloc]init];
[self.navigationController pushViewController:payErrorVC animated:YES];
这就是存在于支付宝中的两处回调。
还需要注意的是,支付成功怎么返回到自己的应用中,这里需要设置一个东西:
NSString *appScheme = @"XXXXXXX";
同事需要设置应用中另一个地方,在工程中选中target
写上appScheme的值,确保代码和此处的是一摸一样的,才能成功回到应用中。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:248797次
积分:4386
积分:4386
排名:第7122名
原创:192篇
评论:59条
(2)(1)(3)(3)(5)(6)(4)(7)(13)(6)(6)(14)(12)(36)(22)(13)(3)(25)(12)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'通过URLSchemes建立应用间通信机制(例:支付宝) - IOS - 伯乐在线
& 通过URLSchemes建立应用间通信机制(例:支付宝)
大家都知道,应用间无法直接通信,所以即使是同公司的应用也无法直接在设备端直接通信和共享数据。
但是通过URLSchemes可以调起其它应用,他的官方格式为”标识符://”,这个标识符就是你给应用定义的URLSchemes,在”//”后面,可以通过类似于http链接的参数传递方式来在应用间传递少量数据进行交互,话不多说,撸代码。
1.建立两个应用并互相调用
1.1 首先建立应用bradley和johnson,bradley是我们的被调用应用,johnson则是我们的主动调用应用。
1.2 在bradley应用中找到TARGETS-Info-URL Types,新增一项,将其URL Schemes填写为bradley,同理也在johnson应用中找到TARGETS-Info-URL Types,新增一项,将其URL Schemes填写为johnson。
bradley应用
johnson应用
1.3 在bradley的AppDelegate.m中添加如下方法及语句:
调起App回调方法
1.4 在johnson的主界面我们添加一个按钮,并执行跳转代码,但是为了严谨(参照微信支付),我们必须判断当前设备是否安装目标App,所以我们需要在info.plist文件中添加URL Schemes白名单:
URL Schemes白名单
只需将绿色框框内的信息加入即可。
跳转代码如下:
1.5 运行调试,我们先运行bradley应用,再运行johnson应用,在johnson应用中点击按钮调起bradley应用,查看log信息:
很明显我们成功的在johnson中调起了bradley应用,并打印出了日志,可以看到我们通过打开一个”bradley://”的url即可调起bradley应用。
那么我们可以在safari中调起bradley么?
答案是可以的:
输入braley://
所以在某种程度上,我们并不能阻止别人打开我们的应用,只能尽量避免自己应用URL Schemes的泄露,并在回调方法中做出一些判断取舍。
2.应用间的信息传递
2.1 大家都上过网,都知道上网需要网址,如:
在这里,”https://” 就类似于我们的标识符”bradley://”,我们通过在”//”后面加键值对来传递我们的参数,以达到应用间信息传递的目的。
下面我们来尝试传递一下几个参数:
可见我们成功的将参数传递了过来,通过一些简单字符串处理我们就能组装成完整的参数字典。那么问题又来了,这个参数字符串能够经受的最大长度是多少呢?
起码1K的length是经得起的:
1000字符串传递
1000字符串传递成功
而且即使到1W也是OK的,所以大家可以放心使用。
3.应用间的信息传递处理完成后并跳转回来
3.1 信息传递是为了处理,处理完成后总有个结果,并需要把结果回传回来,这就是支付宝和微信支付的处理逻辑。
如何回调回来呢?
答:被调起的应用并不知道调起它的应用的URL Schemes,所以我们需要把自身应用的URL Schemes也传递过去,由被调起应用处理完成,重新调回来并将处理结果作为参数回传回来。
johnson点击传递参数
bradley模拟处理后并回调
bradley打印log
johnson打印log
4.模拟支付宝案例(仅思路及简易代码)
关于作者:
可能感兴趣的话题
运行环境: Xcode8 +10.11.6
运行报错:canOpenURL: failed for URL: “bradley://” – error: “This app is not allowed to query for scheme bradley”
楼主知道这个是什么原因吗? 检查了一下代码没有错误,
o 102 回复
关于iOS频道
iOS频道分享iOS和Swift开发,应用设计和推广,iOS相关的行业动态。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2017 伯乐在线我想知道QQ扫一扫和支付宝转账的URL schemes是神马? - 知乎4被浏览1141分享邀请回答0添加评论分享收藏感谢收起0添加评论分享收藏感谢收起当前位置 & &
& 警惕iOS漏洞: URL Scheme可劫持支付密码
警惕iOS漏洞: URL Scheme可劫持支付密码
18:14:00&&出处:&&
编辑:快科技 &&)
让小伙伴们也看看:
阅读更多:
好文共享:
文章观点支持
当前平均分:0(0 次打分)
登录驱动之家
没有帐号?
用合作网站帐户直接登录}

我要回帖

更多关于 支付宝url schemes 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信