支付宝快捷登录相关事宜

2023-05-16

接近年关,公司产品提出新需求,和支付宝合作,需要开发快捷登录--》“无线账户授权”,手机端装有支付宝钱包,直接唤起支付宝钱包,若没有支付宝钱包就直接走HTML5页面操作,该操作也是内嵌在Alipay SDK 中,首先说无线账户授权。

支付宝提供的文档里有涉及客户端:iOS/ Android /服务端( JAVA PHP C#),对于只用其中一部分内容的伙伴来说比较杂乱,于是把其中涉及iOS+c#部分提取出来,这样看清晰一些。

流程:

1、商户客户端根据支付宝授权定义的参数规范组装请求信息,调用支付宝SDK授权接口;

2、支付宝SDK唤起支付宝钱包(8.3及以上版本才支持)或者H5页面,进行授权登录;

3、支付宝SDK请求支付宝服务端,获取授权结果;

4、支付宝SDK将获取到的授权结果同步返回给商户客户端;


其中要区分清楚角色:手机用户、商户客户端(IOS App)、 商户服务端(c#)、 支付宝SDK  、支付宝服务端

流程图如下:


一、接入前期准备:

1、下载包

WS_MOBILE_PAY_SDK_BASEandLogin.zip 

WS_MOBILE_PAY_SDK.zip 

2、下载接口

https://openhome.alipay.com/doc/docIndex.htm?url=https://openhome.alipay.com/doc/toSdk.htm 

3、打开XCODE ,把压缩包中的 AlipaySDK.bundle、 AlipaySDK.framework 导入到项目文件(need copy)

4、在需要用到支付宝SDK地方导入头文件:

#import <AlipaySDK/AlipaySDK.h> 

配置pidappidprivateKey


NSString *partner = @"";(合作者身份以2088开头的纯15位数字)
NSString *appID = @"";   (商户签约的 appid)
NSString *privateKey = @""; (商户端生成的私钥PKCS8格式)
  

调用 AlipaySDK API授权 ,授权demo参考如下

签名:支付宝提供的demo中有签名以及验签机制(DataSigner、DataVerfiry等):RSA 、 MD5签名,貌似只需关心RSA签名, 安全起见将支付宝中涉及到 商户私钥privatekey  、支付宝公钥(固定不变的)保存在服务端(c#),服务端用私钥将authStr(授权认证字符串)进行签名,返回给客户端(ios app),然后客户端将authStr(未签名)、signString(authStr对应的RSA签名格式)、签名类型RSA 三个合并起来,调用快捷登录API 
所以
这个客户端不用处理直接从服务端拿过来就ok
5、若手机端装有 “支付宝钱包app” ,API接口调用成功之后会返回url,

6、AppDelegate的 

- (BOOL)application:(UIApplication )applicationopenURL:(NSURL )url sourceApplication:(NSString *)sourceApplicationannotation:(id)annotation 

调用回传方法如下: 


7、使用上面获取到的 authCode(授权码),调用授权令牌接口(alipay.system.oauth.token)换取access_token,access_token有效期为180天。 


二、授权令牌接口:由于我们自己服务端是ASP.NET(C#)

授权令牌接口:AlipaySystemOauthTokenRequestAlipaySystemOauthTokenResponse

用户信息共享接口:AlipayUserUserinfoShareRequestAlipayUserUserinfoShareResponse 

1、授权令牌接口(alipay.system.oauth.token)SDK集成 

          ASP.NET(C#)配置流程

  1. 步骤1:  导入类包

    解压“alipay-sdk-NEXXX.zip”,除了AopSdk.csprojAopSdk.sln外其他所有类文件原封不动地放置到商户的项目中。

  2. 步骤2:  调用类包


    请求示例

    
    商户服务端请求支付宝系统,请求示例如下:  
    
    using Aop.Api;//支付宝网关地址  
    
    string serverUrl = "https://openapi.alipay.com/gateway.do";//应用ID  
    
             
             

    string appId = "2014******14150";

    //客户端返回的auth_code string auth_code = "4b6f9f6d560345398c9b3cae18b96C09";

    //返回结果格式:xmljson; string format = "json"; //商户私钥 string privateKey = "商户私钥文件路径";//字符集格式

    string charset = " utf-8";
    
    AlipaySystemOauthTokenRequest
    AlipaySystemOauthTokenRequest();
    

    req = new

    req.Code = auth_code;
    req.GrantType = "authorization_code";
    IAopClient client = new DefaultAopClient(serverUrl, appId, privateKey,

    format, charset);
    AlipaySystemOauthTokenResponse res = client.Execute(req);Response.Write("code:"+res.Code()+" ");Response.Write("msg:"+res.Msg());


返回值在返回结果对象res内,自行解析。


三: 用户信息共享接口(alipay.user.userinfo.share)SDK集成 

          ASP.NET(C#)配置流程

  1. 步骤1:  导入类包

    解压“alipay-sdk-NEXXX.zip”,除了AopSdk.csprojAopSdk.sln外其他所有类文件原封不动地放置到商户的项目中。

  2. 步骤2:  调用类包

    请求示例商户系统请求支付宝系统,请求示例如下。

    using Aop.Api;//支付宝网关地址

    
             
             

    string serverUrl = "https://openapi.alipay.com/gateway.do";//应用ID string appId = "2014******14150";

    // alipay.system.oauth.token返回的access_token string access_token = "kuaijieB0b15a0d0c3ff4510a21e5556d5a8cX09";

    //默认值 String prodCode ="WAP_FAST_LOGIN";//返回结果格式:xmljson; string format = "json"; //商户私钥 string privateKey = "商户私钥文件路径";//字符集格式 string charset = " utf-8";AlipayUserUserinfoShareRequest

    req = new

    AlipayUserUserinfoShareRequest(); req. SetProdCode(prodCode); IAopClient client = new DefaultAopClient(serverUrl, appId, privateKey,

    format, charset); AlipayUserUserinfoShareResponse res = client.Execute(req,

    access_token);
    Response.Write("code:"+res.Code()+" ");
    Response.Write("msg:"+res.Msg());
    返回值在返回结果对象res 内,自行解析。 
    
    
服务端(c#)获取到用户信息之后,返回给iOS客户端,客户端再进行相应逻辑处理。

四、如何获得PIDAPPID与密钥 

步骤1: 使用签约支付宝账号登录支付宝网站,点击“签约管理”栏目下的“签约订单”。 


步骤2: 在跳转后的页面中点击“查看PID | KEY”,在新打开的页面中(https://b.alipay.com/order/pidAndKey.htm),可查看到签约支付宝账号、合作者身份ID(PID)。 


步骤3: 输入支付密码,查询key、支付宝公钥。 


开放平台密钥管理内的 Appid即商户调用接口需要用到的APPID。 



五、RSA密钥生成与使用 

生成商户密钥 

1. 打开openssl密钥生成软件
打开 openssl文件夹下的bin文件夹,执行openssl.exe文件,如下图: 


2. 生成RSA私钥

输入“genrsa -out rsa_private_key.pem 1024”命令,回车后,在当前bin文件目录中会新增一个rsa_private_key.pem文件,其文件为原始的商户私钥,以下为命令正确执行截图: 


3. 生成RSA公钥

输入“rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem”命令回车后,在当前bin文件目录中会新增一个rsa_public_key.pem文件,其文件为原始的商户公钥,以下为命令正确执行截图:(RSA公钥需要上传到支付宝平台,去掉空格,换行,做一行上传)


4. 生成PKCS8编码的私钥

输入命令“pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM-nocrypt”并回车,当前界面中会直接显示出生成结果: 


右键点击 openssl窗口上边边缘,选择“编辑→标记”,之后选中要复制的文字: 


此时继续右键点击 openssl窗口上边边缘,选择“编辑→复制”,把复制的内容粘贴进一个新的记事本中,可随意命名,只要知道这个是PKCS8格式的私钥即可(请妥善保存该文件)。 

六、RSA密钥使用逻辑 

商户在使用 RSA签名方式的支付宝接口时,真正会用到的密钥是商户私钥支付宝公钥。商户上传生成的商户公钥给支付宝,支付宝把支付宝公钥给商户,是公钥互换的操作。这就使得商户使用自己的私钥做签名时,支付宝端会根据商户上传的公钥做验证签名商户使用支付宝公钥做验证签名时,同理,也是因为支付宝用支付宝私钥做了签名。 

(C#)开发语言使用密钥对方法 

商户的私钥

刚刚用命令行生成的PKCS8格式私钥

必须保证只有一行文字,即:没有回车、换行、空格等;需对刚生成的(原始的)私钥做pkcs8编码;

编码完成后,复制该段私钥,并去掉该段里面的回车、换行、空格、 -----BEGIN RSA PRIVATE KEY-----”、 -----END RSA PRIVATE KEY-----”。

支付宝RSA公钥固定值

-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnxj/9qwVfgoUh/y2W89L6BkRAFljhNhgPdyPuBV64bfQNN1PjbCzkIM6qRdKBoLPXmKKMiFYnkd6rAoprih3/PrQEB/VsW8OoM8fxn67UDYuyBTqA23MML9q1+ilIZwBC2AQ2UBVOrFXfFl75p6/B5KsiNG9zpgmLCUYuLkxpLQIDAQAB
-----END PUBLIC KEY----- 


去掉这串字符串中的回车、换行、空格,必须保证只有一行文字。
  


接下来介绍接口使用中注意事项:

1、拼接authStr(认证授权信息)需用 key=”value”&key=”value” 格式,之后将authStr进行RSA签名(c#端处理),最终拼接为

“authStr(未签名字符串&sign=”已签字符串”&sign_type=”RSA”最后作为参数传入SDK的授权方法 ,方法原型

-(void) auth_V2WithInfo:(NSString*)infoStr fromScheme(NSString*)schemeStr callback:(CompletionBlock)completionBlock;//通过参数调用登录授权接口。

参数:
infoStr就是上面一---》4、demo中的signStr  

shemeStr:与商户appinfo.plist中的URL Schemes保持一致,保证跳转支付宝客户端授权后能正确唤起商户app。 例如


completionBlock 授权结果回调:

resultStatus:9000——认证成功  4000——认证失败  6001——用户取消 

-(void)processAuth_V2Result:(NSURL*)resultUrl standbyCallback:(CompletionBlock)completionBlock; //授权结束后在appdelegate中需处理的方法

当设备安装了支付宝客户端,会优先跳转支付宝客户端进入授权,返回的url传入该方法处理完成后统一输出结果。 

参数:

resultUrl  //支付宝客户端授权完成或者取消,传回给商户appurl

completionBlock //授权结果回调,当支付宝客户端操作过程中,如果商户app进程在后台被结束拿不到之前的block,就会通过这个block输出结果。

备注:

该方法在AppDelegate中的- (BOOL)application:(UIApplication *)applicationopenURL:(NSURL *)url sourceApplication:(NSString *)sourceApplicationannotation:(id)annotation进行调用.

客户端授权登录规则

手机上安装了支付宝钱包
用户在手机上安装支付宝钱包
8.3或者以上版本时,登录授权SDK将会跳转到支付宝钱包中完成登录授权。

手机上没有安装支付宝钱包

用户在手机上没有安装支付宝钱包8.3或者以上版本时,登录授权SDK将打开H5页面提供登录授权服务。 

登录授权参数列表含义说明:

同步返回参数说明 

含义

支付宝服务端对提供的请求数据进行处理后,返回给客户端结果数据,商户从支付宝登录授权SDK中获取结果数据后,根据这些数据进一步处理。

 列表


样例

resultStatus={9000};memo={处理成功};result={apiname="com.alipay.account.auth"&app_id="2013081700024223"&app_name="mc"&auth_type="AUTHACCOUNT"&biz_type="openservice"&pid="2088102123816631"&product_id="WAP_FAST_LOGIN"&scope="kuaijie"&target_id="kkkkk091125"&sign_date="2015-01-1323:36:06"&success="true"&alipay_open_id="n5GOjNEVJ6SHdIUdIYhUpOZ8ytQ+iRYtNBJE6dziGb-Ift5cVHir3t8oMoWz7njq01"&auth_code="d9d1b5acc26e461dbfcb6974c8ff5E64"&result_code="200"&sign_type="RSA"&sign="MCwCFByGPh3kQK5KuT7ljiugGpTe0Jc4AhQr+YMaHGxGEIhCQiDMjGayRk2xag=="} 



附录

resultStatus状态代码 


result_code状态代码


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

支付宝快捷登录相关事宜 的相关文章

  • available()方法的使用总结

    先看看API的说明 xff1a public int available throws IOException 返回此输入流下一个方法调用可以不受阻塞地从此输入流读取 xff08 或跳过 xff09 的估计字节数 下一个调用可能是同一个线程
  • simpleBGC32-软件代码开源

    simpleBGC32官方只提供了硬件开源 xff0c 导致市场上有大量的v1 3版的硬件电路板用于飞机云台 xff0c 通过烧录官方给的hex文件实现基本功能 但是由于针对simpleBGC32的软件代码没有开源 xff0c 所以很多需要
  • Gazebo环境下VIO SLAM系统实现

    Gazebo环境下VIO SLAM系统实现 Gazebo环境下VIO SLAM系统实现简介0 准备工作1 搭建gazebo环境1 1 相机1 2 IMU 2 VINS MONO2 1 安装及make2 2 参数修改2 3 外参标定2 3 1
  • 滤波学习理解----EKF(一)

    最近回到slam方向了 xff0c 所以有时间整理一下最近的收获 最复杂也是最简单的模块 滤波 引入 那么滤波是什么呢 xff1f 滤波就是由于观测observation xff08 OB xff09 天生具备的误差和噪声 当有多个信号源观
  • 在VMware里装Kali Linux选graphical install后黑屏解决方案

    我用的是VMware 16 xff0c 装Kali Linux 2020 xff0c 选graphical install后黑屏 其实不管选哪个都黑屏 一开始按照网上的netsh winsock reset xff0c 虚拟打印机 xff0
  • USB移动存储设备上安装Kali Linux(独立系统 非Live 非虚拟机)Standalone Kali Linux + grub2 + luks加密

    前言 本文分享的是在USB移动设备上安装Kali Linux独立系统 非Live版 xff01 非虚拟机版 xff01 非Live版 xff01 非虚拟机版 xff01 非Live版 xff01 非虚拟机版 xff01 这里的USB设备包括
  • 简单git多人协同

    git网上的资料非常多 xff0c 本文只希望能提供一个简单直观的使用教程 xff0c 可能不严谨 如果本文有任何问题 xff0c 请及时指正 git简介 本章介绍git的基本概念 xff0c 了解git就可以跳过 什么是git xff1f
  • Arch 安装 Visual Studio Code(支持Wayland)

    文章目录 安装vscode在Wayland下模糊的解决方法在Wayland下无法使用输入法的解决方法 安装vscode 虽然官网下载一般是首先 xff0c 但是比较复杂 xff0c 所以推荐使用AUR xff1a yay S visual
  • 安装并使用NoMachine

    1 进入NoMachine官网下载NoMachine安装包 2 安装NoMachine xff0c 一路到底 xff0c 不需更改其他设置 xff08 安装目录随意 xff09 3 下载IP扫描工具 xff1a Advanced IP Sc
  • Wayland环境下通过xwayland支持docker图形界面

    写在前面 在之前的文章里已经讲解了怎么直接在docker中使用wayland支持图形界面 xff08 docker内外都使用wayland xff09 xff0c 文章链接 xff1a 使用Docker安装ROS2 ros humble 并
  • ZigBee生产测试项说明

  • C#窗体缩放时窗体上控件同缩放比例变化

    1 定义2个全局float 变量X Y xff0c 用来记录窗体默认窗口时的宽度和高度 float X 默认窗口的宽度 float Y 默认窗口的高度 2 窗体Load的时候将窗体的宽度 高度赋值给X Y private void Form
  • C# winform存储配置文件之App.config文件读写

    有时候一些用户的配置需要写入在本地 xff0c 不能每次程序启动都让用户重新设置一下吧 下面先说基本用法 xff1a 1 创建winform项目之后自动会生成App config文件 xff0c 如果默认没有 就对项目右键 新建项 APP配
  • C# 解决串口接收数据不完整处理方法

    使用缓存机制完成 首先通过定义一个成员变量List lt byte gt buffer 61 new List lt byte gt 4096 用来存放所有的数据 xff0c 在接收函数里 xff0c 通过buffer AddRange 方
  • ble-mesh笔记整理(1) ble-mesh通信理解

    最近有时间将之前整理的 xff0c 关于蓝牙mesh开发学习过程的一些笔记 xff0c 以及一些对mesh协议文档理解的翻译文档 xff0c 发布出来给大家一起学习和参考 xff0c 主要是一个学习的过程参考 蓝牙Mesh通过网状网的组网结
  • ble-mesh 学习笔记(2)-如何给mesh-node配网

    1 配网方式选择 基于手机设备为provisioner进行进行PB GATT 配网 如果一个蓝牙4 0的手机需要用作Provisioner xff0c 并完成对其他节点的配网过程 则需要使用Mesh Provisioning Service
  • ble mesh学习笔记(3)mesh节点设备广播类型

    蓝牙Mesh网络一共有3种广播包 xff0c 如下图所示 1 PB ADV的包是用在Provisioning过程的 xff0c Provisioning是一个设备加入Mesh网络的过程 2 Mesh Message xff0c 这个是在设备
  • ble mesh学习笔记(4)元素model的理解

    说明 xff1a 涉及代码模块为Telink mesh sdk 一 Composition Data 结构定义 mesh节点Composition Data 数据定义元素个数以及元素下model个数与model id数据结构如下 xff1a

随机推荐

  • ble mesh学习笔记(5) mesh数据PDU封包理解

    mesh 网络数据协议格式 xff1a access payload 协议格式 xff1a Upper transport layer协议格式 xff1a 消息分为 xff1a control message friendship cont
  • 交换机SNMP V3版本配置

    SNMPV3版本安全性和远端配置强化 xff0c 目前公司已经禁止SNMPV3以下版本 xff08 H3C交换机 xff09 xff0c 配置步骤如下 1 开启SNMP协议 snmp agent 2 设置使用的SNMP版本 snmp age
  • ble mesh 学习笔记(6) 如何对接天猫精灵蓝牙mesh

    MESH设备接入天猫精灵的步骤 1 设备在天猫精灵mesh 网络中所具有的怎么样功能 xff1f 1 1 目前根据mesh协议能实现如下功能节点 xff08 1 xff09 Node xff1a 网络边缘的节点 xff0c 没有relay功
  • ble mesh 学习笔记(7)理解mesh协议proxy代理

    1 Proxy 简介 Proxy 协议能够让节点收发Network PDUs mesh beacons proxy configuration Provisioning PDUs通过面向连接的承载层 Proxy protocol 定义了两个
  • ble mesh学习笔记(10)mesh网络各种key的应用

    一 网络密钥 xff08 Network Key xff09 应使用符合核心规范要求的随机数生成器生成 网络密钥层次结构的图示如图所示 1 用NID EncryptionKey PrivacyKey 来对mesh网络数据加密 2 Netwo
  • 通用LED闪烁代码模块(也可实现软件PWM)

    仅提供参考文件 xff1a 1 需要修改gpio引脚 2 需要根据平台实现软件定时器接口 xff0c 启动 xff0c 停止 xff0c 回调 xff0c 三个API 3 根据平台优化相关错误即可 pwm drv c Created on
  • ble-mesh学习笔记(11)小米平台ble-mesh概述

    小米平台ble mesh开发 1 方案选择 2 支持特性说明 xff1a 必须用小米的模组 xff0c 才能接入小米的ble mesh平台 目前模块只支持手机gatt升级 xff0c 网关ota升级方案在Q3上线 目前模块只支持relay功
  • 基于ESP32的Bluedroid蓝牙协议栈架构分析(1) --- HCI线程分析

    目录 ESP32蓝 架构 BLUEDROID主机架构 BLUEDROID协议栈下HCI线程的数据处理流程 ESP32蓝 架构 在 ESP32 的系统上 xff0c 选择 BLUEDROID 为蓝 牙主机 xff0c 并通过 VHCI xff
  • 基于ESP32的Bluedroid蓝牙协议栈架构分析(2)--- ADV广播流程分析

    为了分析ESP32的蓝牙接口 xff0c 是如何在协议栈上运行的 xff0c 现在以最简单的启动广播为例 xff0c 分析Bluedroid蓝牙协议栈整体流程 具体数据发生过程如下 xff1a esp ble gap start adver
  • 基于ESP32的nimble-host蓝牙协议栈移植分析

    ESP32蓝牙协议栈NIMBLE HOST协议移植分析 目录 ESP32蓝牙协议栈NIMBLE HOST协议移植分析 一 nimble 蓝牙协议栈介绍 二 关于esp32移植的内容分析 2 1 关于 porting 目录移植 2 2 nim
  • 基于BK蓝牙RW-BLE协议栈调度逻辑梳理

  • A2DP协议总结

  • iOS代码混淆原理初探

    我们在手游平台SDK的iOS版本中 xff0c 除了AppStore官方支付之外还集成了第三方支付 xff08 微信支付H5和支付宝支付H5版本 xff09 如果用于企业签 xff0c 不需要做处理 xff0c 直接使用即可 但是如果需要上
  • (五)Selenium自动化测试实战—PO模式

    nbsp 上一篇 四 selenium自动化测试之上传本地文件 要开朗的spookypop的博客 CSDN博客 selenium上传本地文件 先看下测试代码运行效果 在做自动化测试时 测试框架设计很重要 测试代码写法也很多种 最简单的莫过于
  • git clone 指定某个分支

    原文 xff1a https blog csdn net qq 28903377 article details 82978583 最近在搭建Gitblit内网仓库时发现一个问题 xff0c git clone 只能clone整个仓库 xf
  • B站Unity官方教程合集(不定期更新)

    Unity官方有好多教程 xff0c 可以帮助我们快速掌握这款引擎的使用 xff0c 但官网上的视频都是油管的 xff0c 故这里为大家整合了一些在B站上的搬运视频 xff0c 很多还是有翻译字幕的 xff0c 比搭梯子方便多了 xff08
  • STM32连接HT1621段码屏驱动

    HT1621 128个位元LCD控制器 xff0c 内部RAM直接对应LCD显示单元 对于HT1621 操作之前应发送标志码 xff0c 表明要求工作在哪种状态 xff0c 标志定义如下 xff1a 操作状态标志码读数据110写数据101读
  • RTK与PPK

    1 通讯方式不同 RTK技术需要无线电台或网络来传输差分数据 PPK技术不需要通信技术的支持 xff0c 并且可以记录静态数据 2 定位方法不同 RTK所使用的实时定位技术使您可以随时在流动站上查看测量点的坐标和精度 xff1b PPK定位
  • iOS真机调试报错(0xE8008016)相关错误

    经常真机运行时候会报错 xff0c 原因之一是之前对项目进行过打包进行如下设置 将Edit Scheme gt Run gt Build Configuration 设置为Release 将其勾选为 Debug状态 xff0c 接下来继续运
  • 支付宝快捷登录相关事宜

    接近年关 xff0c 公司产品提出新需求 xff0c 和支付宝合作 xff0c 需要开发快捷登录 无线账户授权 xff0c 手机端装有支付宝钱包 xff0c 直接唤起支付宝钱包 xff0c 若没有支付宝钱包就直接走HTML5页面操作 xff