原文地址: Android 通过scheme跳转支付宝实现支付 - Stars-One的杂货小窝

需求的来源是支付功能,由于支付宝不允许个人开通具有webhook的支付服务,所以是对接了一个支付系统(应该算作四方支付)。创建订单后,系统会返回一个h5链接。

对于PC版的软件,将此链接转为二维码,然后提示用户使用支付宝扫码就能够触发付款操作;

而对于Android软件来说,这样的流程可不合适

实际上,扫码之后就是通过支付宝内置浏览器打开了h5,如果我能有个方法,可以触发让支付宝去打开支付的h5链接,那么就是相当于实现了唤起APP支付的功能了

于是就轮到了今天所说的scheme实现了功能

步骤

1.知道对应的scheme

首先,我们要知道对应的scheme,这个是重点,但好在酷安人均大佬,已经有人找到了,就是下面的这个,需要在后面拼接下网址即可

alipays://platformapi/startapp?appId=20000067&url=

2.触发scheme

关于触发scheme,这里就涉及到Android里的Intent相关的知识了,这里不详细说明了,直接上代码

val payUrl =""//支付的h5地址
val scheme = "alipays://platformapi/startapp?appId=20000067&url=${payUrl}"
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(scheme))
ActivityUtils.startActivity(intent)

PS: ActivityUtils是个AndroidUtilCode库里的一个工具类,各位也可以直接用activity对象的startActivity方法

当然,这里我们还得加上个判断,来判断用户是否安装了支付宝应用

//判断是否安装支付宝
if (AppUtils.isAppInstalled("com.eg.android.AlipayGphone")) {
val scheme = "alipays://platformapi/startapp?appId=20000067&url=${payUrl}"
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(scheme))
ActivityUtils.startActivity(intent)
} else {
ToastUtils.showShort("抱歉,当前手机未安装支付宝APP...")
}

【开源库推荐】#2 AndroidUtilCode Android常用工具类大全(附API使用说明) - Stars-One的杂货小窝

不过这里遇到了个问题了,由用户反馈说支付不了

排查一下,发现是我项目里的target SDK变更为了30,而API 30,无法获取包名,详情可见此文声明软件包可见性需求  |  Android 开发者  |  Android Developers

不过由于我用的是工具库,所以把AndroidUtilCode库更新到最新版本就解决了此问题

PS: 实际上实现效果与官方支付宝的APP支付有些不同,上述的实现效果就是,会先触发支付宝打开一个网页,然后再弹出一个付款的对话框;

而官方支付宝的APP支付的话,就是会直接弹出付款的对话,没有打开网页的这一步操作,不过也是还能接受

最后我碎碎念下,微信这个APP就是垃圾,限制太多了,对开发者极度不友好,不同于支付宝,它是直接限制了scheme,除非你是它白名单里,否则不允许你用它里面浏览器打开页面

所以估计我以后不会对接微信支付!!

补充 scheme收集

下面是我从上面文章里抽取一些可能开发会用的scheme:

应用 说明 scheme
QQ 指定QQ号聊天页跳转 mqqwpa://im/chat?chat_type=wpa&uin=qq号
QQ QQ群聊天页 mqqwpa://im/chat?chat_type=group&uin=群号
QQ 指定群资料页 mqqapi://card/show_pslcard?src_type=internal&version=1&uin=群号&card_type=group
QQ 指定QQ号资料页 mqqapi://card/show_pslcard?src_type=internal&version=1&uin=QQ号
QQ 空间跳转 mqqapi://qzone/activefeed
微信 付款 android-app://com.tencent.mm/#Intent;action=com.tencent.mm.action.BIZSHORTCUT;launchFlags=0x4000000;S.LauncherUI.Shortcut.LaunchType=launch_type_offline_wallet;end
微信 扫一扫 #Intent;action=com.tencent.mm.action.BIZSHORTCUT;launchFlags=0x4000000;B.LauncherUI.From.Scaner.Shortcut=true;end
微信 联系人/群聊/公众号跳转 android-app://com.tencent.mm/#Intent;action=com.tencent.mm.action.BIZSHORTCUT;B.LauncherUI.From.Biz.Shortcut=true;S.LauncherUI.Shortcut.Username=ID;end
微信 跳转微信收藏
微信

上面微信的联系人跳转,需要个ID,关于如何获取,可见下图

补充 - 跳转网易云音乐打开链接

val intent = Intent(Intent.ACTION_VIEW)
intent.data = Uri.parse("https://www.cnblogs.com/stars-one")
intent.setPackage("com.netease.cloudmusic")
ActivityUtils.startActivity(intent)

Android 通过scheme跳转支付宝实现支付的更多相关文章

  1. android通过webview调起支付宝app支付

    webview在加载网页的时候会默认调起手机自带的浏览器加载网页,用户体验不好.但当用户设置浏览器客户端(setWebViewClient)设置这样的监听事件之后,当请求url的时候就不会打开手机自带 ...

  2. android 通过webview调起支付宝app支付

    网站学习:http://blog.csdn.net/zhuyu19911016520/article/details/71763900

  3. 支付宝移动支付之IOSApp调用支付宝钱包

    近期客户提出要开发一个IOS上的app作为訪问他们站点的途径之中的一个.为什么说之中的一个呢.因为眼下PC和Mobile这两个站眼下都已经上线了. 所以问题就简单了,我们仅仅须要把mobile站UI改 ...

  4. ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开

    ASP.NET MVC Filters 4种默认过滤器的使用[附示例]   过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响 ...

  5. Android版-支付宝APP支付

    此项目已开源 赶快来围观 Start支持下吧 [客户端开源地址-JPay][服务端端开源地址-在com.javen.alipay 包名下] 上一篇详细介绍了微信APP支付 点击这里 此篇文章来详细介绍 ...

  6. android支付宝app支付(原生态)-包括android前端与java后台

    本文讲解了 android开发的原生态app集成了支付宝支付, 还提供了java后台服务器处理支付宝支付的加密代码, app前端与java后台服务器使用json数据格式交互信息,java后台服务主要用 ...

  7. android 集成支付宝app支付(原生态)-包括android前端与java后台

    本文讲解了 android开发的原生态app集成了支付宝支付, 还提供了java后台服务器处理支付宝支付的加密代码, app前端与java后台服务器使用json数据格式交互信息,java后台服务主要用 ...

  8. 支付宝Wap支付你了解多少?

    上几篇文章详细介绍了支付宝APP支付.微信APP支付 此文章来介绍下支付宝Wap支付(也叫作手机网站支付) 目录 1.创建应用并获取APPID 2.配置应用环境 3.配置沙箱环境 4.服务端实现(Ma ...

  9. 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付

    前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...

  10. 支付宝web支付

    过程 1. 用户下单 2. 商户后台产生订单 3. 请求支付宝web支付页面(将订单信息返回给用户---放在form里面---隐藏起来-----并通过脚本自动提交此form到支付宝web支付页) 4. ...

随机推荐

  1. antd动态tree 自定义样式

    import React, { useEffect, useState } from 'react';import { Tree } from 'antd';import './index.less' ...

  2. spacy词向量

    spaCy能够比较两个对象,并预测它们的相似程度. 预测相似性对于构建推荐系统或标记重复项很有用. 例如,您可以建议与当前正在查看的用户内容相似的用户内容,或者将支持凭单标记为与现有内容非常相似的副本 ...

  3. Eclipse's Patching Codes Automatically

    如何把等号左边的赋值等式补齐? 想把queryRunner.query(conn, sql,new BeanListHandler<>(type), params); 的等号左边代码(返回 ...

  4. golang学习路线

    一.golang基础 李文周的博客:https://www.liwenzhou.com/ 视频教程:https://link.juejin.cn/?target=https%3A%2F%2Fwww.b ...

  5. 使用scrollIntoView 使某元素滚动到指定位置

    var el = document.getElementById('A'); el.scrollIntoView('true'); 知识: element.scrollIntoView(); // 使 ...

  6. c语言中%d %f %c %s等的区别

    %d整型输出(%ld长整型输出)%f以小数形式输出,默认情况下保留小数点6位 这里是引用%f和%lf分别是float类型和double类型用于格式化输入输出时对应的格式符号.其中:float,单精度浮 ...

  7. Unity中的3D数学

    3D数学(2022.11.25) 三角函数 Unity中会运用到角度制(Deg)和弧度制(Rad)的转换,弧度制是用圆的弧长来衡量角度的大小,π对应180度.这种转换在Unity中对应有两个方法: 角 ...

  8. 2.面向对象基础-03Java数组

    一.数组的创建和初始化 (一)创建数组: import java.util.*; import java.io.*; public class Main { public static void ma ...

  9. linux 打包各种后缀的命令

    01-.tar格式解包:[*******]$ tar xvf FileName.tar打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是压缩! ...

  10. NDVI最大值合成

    这里有NDVI250m分辨率的数据,目标:合成年最大值数据 [Spatial Analyst工具]|[局部分析]|[像元统计数据]