首先,贴上支付宝官方开放平台地址和部分开发文档:

蚂蚁金服开放平台

开发者中心-第三方应用

APP支付宝登录快速接入

Android集成流程详解

主要流程如下:

  1. 申请开发者,身份选择系统服务商ISV,创建应用并获取APPID。秘钥生成链接:生成密钥:快速生成RSA私钥公钥
  2. 配置应用,集成并配置SDK。参考APP支付宝登录快速接入
  3. 调用接口

注意:

(1)这里是APP支付宝第三方登录,不是第三方应用授权,开发文档不要参考错了

(2)不要在沙箱环境下做调试,直接在第一步将创建的应用上线然后再调试即可(APPID用创建的应用ID,不要用沙箱的

(3)关于PID参数,不太好找,贴出来位置合作伙伴身份(PID)

下面是代码

/***  APP支付宝登录**  这里只是为了方便,直接向加签过程直接放在客户端完成;*  真实App里,privateKey等数据严禁放在客户端,加签过程务必要放在服务端完成;*  防止商户私密数据泄露,造成不必要的资金损失,及面临各种安全风险;*/
public class ALiLoginUtils {public Activity activity;/** 支付宝支付业务:入参app_id */public static final String APPID = "你创建的应用APPID";/** 支付宝账户登录授权业务:入参pid值 */public static final String PID = "合作伙伴身份PID";/** 支付宝账户登录授权业务:入参target_id值 可自定义,保证唯一性即可*/public static final String TARGET_ID = "保证唯一性即可";/** 商户私钥,pkcs8格式 *//** 如下私钥,RSA2_PRIVATE 或者 RSA_PRIVATE 只需要填入一个 *//** 如果商户两个都设置了,优先使用 RSA2_PRIVATE *//** RSA2_PRIVATE 可以保证商户交易在更加安全的环境下进行,建议使用 RSA2_PRIVATE *//** 获取 RSA2_PRIVATE,建议使用支付宝提供的公私钥生成工具生成, *//** 工具地址:https://doc.open.alipay.com/docs/doc.htm?treeId=291&articleId=106097&docType=1 */public static final String RSA2_PRIVATE = "填你自己的应用私钥,要和配置应用时的应用公钥对应";public static final String RSA_PRIVATE = "";private static final int SDK_AUTH_FLAG = 2;public ALiLoginUtils(Activity activity){this.activity = activity;}@SuppressLint("HandlerLeak")private Handler mHandler = new Handler() {@SuppressWarnings("unused")public void handleMessage(Message msg) {switch (msg.what) {case SDK_AUTH_FLAG: {@SuppressWarnings("unchecked")AuthResult authResult = new AuthResult((Map<String, String>) msg.obj, true);String resultStatus = authResult.getResultStatus();String resultCode = authResult.getResultCode();Log.e("ALiLoginActivity", "=====resultStatus=====" + resultStatus);Log.e("ALiLoginActivity", "=====resultCode=====" + resultCode);// 判断resultStatus 为“9000”且result_code// 为“200”则代表授权成功,具体状态码代表含义可参考授权接口文档if (TextUtils.equals(resultStatus, "9000") && TextUtils.equals(authResult.getResultCode(), "200")) {// 获取alipay_open_id,调支付时作为参数extern_token 的value// 传入,则支付账户为该授权账户Log.e("ALiLoginActivity", "授权成功\n" + String.format("authCode:%s", authResult.getAuthCode()));
//                        Toast.makeText(activity,"授权成功\n" + String.format("authCode:%s", authResult.getAuthCode()), Toast.LENGTH_SHORT).show();} else {// 其他状态值则为授权失败Log.e("ALiLoginActivity", "授权失败\n" + String.format("authCode:%s", authResult.getAuthCode()));
//                        Toast.makeText(activity,"授权失败" + String.format("authCode:%s", authResult.getAuthCode()), Toast.LENGTH_SHORT).show();}break;}default:break;}};};/*** 支付宝账户授权业务*/public void authV2() {if (TextUtils.isEmpty(PID) || TextUtils.isEmpty(APPID)|| (TextUtils.isEmpty(RSA2_PRIVATE) && TextUtils.isEmpty(RSA_PRIVATE))|| TextUtils.isEmpty(TARGET_ID)) {new AlertDialog.Builder(activity).setTitle("警告").setMessage("需要配置PARTNER |APP_ID| RSA_PRIVATE| TARGET_ID").setPositiveButton("确定", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialoginterface, int i) {}}).show();return;}/*** 这里只是为了方便直接向商户展示支付宝的整个支付流程;所以Demo中加签过程直接放在客户端完成;* 真实App里,privateKey等数据严禁放在客户端,加签过程务必要放在服务端完成;* 防止商户私密数据泄露,造成不必要的资金损失,及面临各种安全风险;** authInfo的获取必须来自服务端;*/boolean rsa2 = (RSA2_PRIVATE.length() > 0);Map<String, String> authInfoMap = OrderInfoUtil2_0.buildAuthInfoMap(PID, APPID, TARGET_ID, rsa2);String info = OrderInfoUtil2_0.buildOrderParam(authInfoMap);String privateKey = rsa2 ? RSA2_PRIVATE : RSA_PRIVATE;String sign = OrderInfoUtil2_0.getSign(authInfoMap, privateKey, rsa2);final String authInfo = info + "&" + sign;Log.e("ALiLoginActivity", "=====authInfo=====" + authInfo);Runnable authRunnable = new Runnable() {@Overridepublic void run() {// 构造AuthTask 对象AuthTask authTask = new AuthTask(activity);// 调用授权接口,获取授权结果Map<String, String> result = authTask.authV2(authInfo, true);Message msg = new Message();msg.what = SDK_AUTH_FLAG;msg.obj = result;mHandler.sendMessage(msg);}};// 必须异步调用Thread authThread = new Thread(authRunnable);authThread.start();}}

然后在Activity中直接调用工具类,如下:

/** 支付宝授权登录 */
case R.id.iv_alipay:ALiLoginUtils aLiLogin = new ALiLoginUtils(LoginActivity.this);aLiLogin.authV2();break;

这里,直接把privateKey等数据放在客户端,实际加签过程务必要放在服务端完成;防止商户私密数据泄露,造成不必要的资金损失,及面临各种安全风险;authInfo(这里拼接了要向支付宝发送的所有数据信息,尤为重要)的获取必须来自服务端;

最后,代码只贴出了主要的流程,并不完整,其余的可以参考 App支付客户端DEMO&SDK

有兴趣或者需要的朋友,这里还有 Android 第三方登录之新浪微博授权登录

Android 第三方登录之支付宝登录相关推荐

  1. 第三方登录之支付宝登录

    title: 第三方登录之支付宝登录 date: 2017-08-06 21:02:00 tags: Android开发 categories: Android开发 公司一个需求让做一个支付宝的第三方 ...

  2. Android第三方app 微信授权登录

    首先呢,说到第三方,大家应该首先想到的是: 1.appid (第三方给的) 2.密钥 (第三方给的) 3.签名文件 4.包名 这4样,往往决定着的是第三方好用不好用!!! 所以呢- 1.申请你的App ...

  3. android 第三方支付之支付宝使用详解

    介绍 参考安卓Dialog源码,他的builder设计模式实现方式是,使用内部类来实现功能,外部类的作用是通过build()函数,来对内部类进行参数设置,例如setter方法. Buidler设计模式 ...

  4. 【Gulimall+】第三方服务:对象存储OSS、短信验证、社交登录、支付宝支付

    文章目录 对象存储OSS 基本配置 java实现 短信认证 前端验证码倒计时 整合短信验证码 密码存储 社交登录:微博 基本流程 java实现 支付宝支付 基本配置 java实现 对象存储OSS 一谈 ...

  5. Android第三方登录详解2

    接着Android第三方登录详解1讲 1.找到友盟  文档中心 2.找到 3.将 UMSocialService mController = UMServiceFactory.getUMSocialS ...

  6. Django项目中使用第三方登录——支付宝登录

    1. 首先在支付宝开放平台(https://open.alipay.com/platform/home.htm)扫码注册信息 选择开发者中心选择研发服务 配置沙盒应用密钥 使用密钥生成工具生成公钥与私 ...

  7. Android平台以WebView方式集成H5+SDK和支付宝登录授权插件开发思路总结

    首先附上Demo地址,大家可以去GitHub上面下载https://github.com/GitLGH/AlipayDemo 一:思路总结 蚂蚁金融开发平台上面对于支付宝登录授权部分使用的原生andr ...

  8. 第三方接入支付宝授权登录(支付宝新建应用没有公钥和私钥)问题

    由于最近有个需求,需要做第三方的接入支付宝授权登录功能,特此记录下.          百度上很多的接入代码,在此的代码其实和他们差不多,差别在于支付宝官方吧原来的秘钥方式换了,有些同学可能找不到或者 ...

  9. Facebook android 第三方登录

    Facebook android 第三方登录 android平台使用Facebook账号登录自己的app - 前期准备 - 注册Facebook开发者账号,添加自己的应用,按照官方文档的指引完成需要的 ...

  10. Android第三方登录

    项目中不泛使用第三方登录 常用的有QQ.新浪微博.微信等 原理基本都是一样的,就是客户端通过按钮去点击 吊起第三方应用AIDL等用第三方账号密码授权 确认授权后返回token/code等唯一标识(证明 ...

最新文章

  1. solrj 使用记录 - 添加文档
  2. JS 进制转换的理解
  3. Kettle使用_5 结合js的数据处理与SetVariable设置动态表输入
  4. 怎么开发一个npm包
  5. Java语法糖之foreach
  6. linux怎样自制库_如何制作自己的LINUX系统?
  7. mingw + msys 上编译 ffmpeg
  8. Ubuntu 查看 Cuda 及 版本
  9. android动态注册服务器,Android 6.0动态权限申请教程
  10. matlab R2021b 激活错误
  11. 思科防火墙配置命令(详细命令总结归纳)
  12. swfupload 无法加载_解决SWFUpload上传控件在非IE浏览器下不好用的问题
  13. VsCode切换语言
  14. Word默认打开方式不对,图标空白的修复方法
  15. Shapefile属性操作之删
  16. 从秋招看名堂,哪些大厂值得程序员去?
  17. 10个可以实现高效工作与在线赚钱的 AI 工具网站
  18. 倒闭潮不断,众筹的生机在何处?
  19. BIOS工程师需要掌握的知识
  20. Windows主机间批量操作的基本配置

热门文章

  1. 浏览器上不去网络。需要进入ie点开Internet选项,网络中,局域网(LAN)设置,可以勾选上自动检测设置
  2. 80004005错误代码_0x80004005,小编教你解决0x80004005错误代码的方法
  3. 计算机网卡接口类型,一文带你全方位了解网卡
  4. 树莓派4B系统搭建(超详细版)
  5. 前馈神经网络求解XOR问题
  6. 求学信计算机专业英语,英语求学信模板
  7. el-descriptions的入门学习
  8. b站会员转正自动答题
  9. 计算机里面CPU是什么意思,cpu是什么 cpu是什么意思详细介绍
  10. excel简繁切换_Excel2010如何找回繁转简繁简转换功能