支付宝快捷登录相关事宜

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(使用前将#替换为@)

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

  • 解决Ubuntu18.04循环登录/卡在开机界面/无法进入图形界面的问题

    原因 xff1a NVIDIA显卡驱动损坏 解决方案 xff1a 重启进入命令行模式卸载原有NVIDIA驱动程序重新安装NVIDIA驱动后重启 xff0c 问题解决 Step1 Ubuntu系统开机进入命令行模式 系统启动后 xff0c 在
  • C++ 遍历注册表项下的所有键和值

    include 34 stdafx h 34 include lt time h gt include lt windows h gt include lt iostream gt include lt stdio h gt include
  • 9月10日美团网2014校招研发笔试哈尔滨站

    1 链表翻转 给出一个链表和一个数k xff0c 比如链表1 2 3 4 5 6 xff0c k 61 2 xff0c 则翻转后2 1 4 3 6 5 xff0c 若k 61 3 翻转后3 2 1 6 5 4 xff0c 若k 61 4 x
  • 2014校园招聘京东软件开发类笔试(完整版)

    时间 xff1a 2013 9 10 2013 10 8 地点 xff1a 四川大学 天津大学 职位 xff1a 软件开发工程师岗 语言 xff1a java 1 A 2 C 3 D 4 B 5 A 二 1 B 三1 D 2 B 3 C 4
  • Win8.1电脑声音可以外放但是插入耳机没有声音

    今天早上正准备学习英语 xff0c 发现耳机插入电脑没有声音 xff0c 于是开始找百度 xff0c 一步一步剥茧抽丝去查找问题来源 问题 xff1a 点击喇叭出现如下图片 xff1a 平常只有右半个图现在却有两个图标了 步骤 xff1a
  • 在线购物系统问题描述&领域词汇表

    在线购物问题描述 v2 0 时间 2017年 4月19日星期三 参与者在线客户能够通过网站完成在线购物 xff0c 顶层用况包括商品信息浏览 购物 咨询 用户注册 xff0c 用户登录 用户反馈 浏览商品用况可以用于客户寻找和浏览想要看的商
  • 在线购物领域类图

  • 在线购物系统用况分析

    一 系统用况图 1 用况图 2 xff08 1 xff09 用况图综述 系统主要是使顾客方便安全地购物 xff0c 已注册顾客可以通过系统查找 浏览 购买商品 xff0c 并且能够进行评价商品 与相应的商家沟通 或者向网站管理人员反馈问题
  • 被做成类似通信图的分析类图

    实验二博客 xff1a http blog csdn net simonruyang article details 70332294 一 注册 1 图形如下 2 文字说明 xff08 1 xff09 类图综述 目的 xff1a 让未注册顾
  • 顺序图实验记录,又懒又差劲,好懒好懒

    实验二博客 xff1a http blog csdn net simonruyang article details 70332294 一 注册 1 图形如下 2 文字说明 xff08 1 xff09 类图综述 目的 xff1a 让未注册顾
  • 承上的状态机图,又是烂图一副

    1 图形文档如下 2 文字说明 此状态机图反映了系统面向顾客从注册到购物完成的整体的状态变迁以及状态内部发生的事件 xff0c 一共有六个状态 xff0c 状态间转移如上图所示 2 1 ViewItems 中的事件 2 2 Register
  • 让Windows秒变Mac主题,还原度高达99%

    小伙伴们注意 xff1a 公众号的推送机制不再按照时间前后推送了 xff0c 微信公众号信息流乱序 君哥建议大家把科技毒瘤君公众号置顶 xff08 设为星标 xff09 xff0c 以便第一时间看到推送 xff0c 非常感谢 xff0c 方
  • 阿里Arthas(阿尔赛斯)-java诊断工具使用入门

    1 下载官方测试程序启动 doda 64 host166 game curl O https arthas aliyun com math game jar doda 64 host166 game java jar math game j
  • LHL 华为开发者大会有感 之 什么是HMS

    华为移动服务 同义词 HMS xff08 Huawei Mobile Services的英文缩写 xff09 一般指华为移动服务 华为移动服务 xff08 HMS xff09 全称为Huawei Mobile Services xff0c
  • EF Core之自动历史记录

    EF Core之自动历史记录 有的场景下需要记录特定表的增删改操作 xff0c 以便追溯 传统的做法是在增删改的方法里同步做记录 xff0c 很繁琐 在这里我们可以配合EF Core的DBContext做一个全局管控 全局管控自然就要有固定
  • SQL Server 2012 导出数据及分离MDF、LDF

    最近在设计数据库时看到自己设计的数据库和师哥师姐给我们的不一样 xff0c 于是就查了一下把数据库导出写了下来 分离数据库步骤 这是师哥师姐给我们的数据库格式 xff0c 如下 xff1a 那么如何生成MDF和LDF格式的数据库呢 xff1
  • kindeditor异步加载时无法显示编辑框

    事情是这样的 xff0c 我在A页面的div通过 jQuery load 方法载入一个页面B时 xff0c B页面带有编辑框 textarea xff0c 现在想让这个 textarea 显示为一个 kindeditor的富文本编辑区域 x
  • VR游戏设计之三大特性

    2016 年 9 月 23 24 日 xff0c 由 CSDN 和创新工场联合主办的 MDCC 2016 移动开发者大会 中国 xff08 Mobile Developer Conference China xff09 将在北京 国家会议中

随机推荐

  • 组合导航系列文章(十二):滤波器基本原理

    我觉得不错的地方 3 滤波器估计原理 组合导航中 xff0c 先验是imu解算的值 xff0c 观测是gps等传感器给出的值 xff0c 融合的目的是找到概率最大的那个值 上面介绍的三种方法都是对先验和观测的融合 xff0c 由于极大似然要
  • Android 未进行依赖管理导致的问题:IDE 报错 “Unresolved reference: registerForActivityResult“但是能正常编译运行

    前言 谷歌前段时间废弃了 startActicityForResult 取而代之的是 ActicityResultApi xff0c 作为一个紧跟谷歌步伐走的菜鸟开发者 xff0c 当然想着的是第一时间学习并替换项目中的相关代码 但是 xf
  • 基于DataBinding的基类(Activity、Fragment、Adapter)

    基于DataBinding的基类 xff08 Activity Fragment Adapter xff09 1 BaseBindActivity public abstract class BaseBindActivity lt DB e
  • STM32 LwIP单网卡绑定多个IP地址

    STM32 LwIP单网卡绑定多个IP地址 芯片 xff1a STM32F107VC 编译器 xff1a KEIL4 作者 xff1a SY 日期 xff1a 2018 6 28 11 02 53 概述 在只有一个物理网卡的情况下 xff0
  • nginx 配置https 并兼容http 或强制http 转为https

    当我们升级http 为https时 xff0c 为了兼顾一些访问者还是通过http访问的方式 xff0c 我们通常采用两种方式 第一种 xff1a http 可以访问 xff0c https也可以访问 第二种 xff1a http 访问时
  • 滤波学习理解----EKF(一)

    最近回到slam方向了 xff0c 所以有时间整理一下最近的收获 最复杂也是最简单的模块 滤波 引入 那么滤波是什么呢 xff1f 滤波就是由于观测observation xff08 OB xff09 天生具备的误差和噪声 当有多个信号源观
  • systemd开机启动和关机回调脚本

    一 开机执行一次的脚本 我们通过可以创建一个 etc rc local文件 xff1a etc rc local文件内容如下 xff1a span class token operator span span class token ope
  • (五)Selenium自动化测试实战—PO模式

    nbsp 上一篇 四 selenium自动化测试之上传本地文件 要开朗的spookypop的博客 CSDN博客 selenium上传本地文件 先看下测试代码运行效果 在做自动化测试时 测试框架设计很重要 测试代码写法也很多种 最简单的莫过于
  • 网络隧道技术

    隧道技术摘要 隧道技术 xff08 Tunneling xff09 是网络基础设置在网络之间传递数据的方式 xff0c 使用隧道技术传递可以是不同协议的数据包 xff0c 隧道协议将这些其他协议的数据包重新封装在新的包头中发送 被封装的数据
  • 数据库的备份和还原

    数据库的备份和还原是一个很重要的问题 xff0c 有时候我们一个误删可能数据库里的数据就都没有了 xff0c 所以一定要做好备份的工作 备份 1 右击 任务 备份 2 选择要备份的数据库 xff0c 和备份的类型 完整 xff0c 添加 3
  • 海信A6/A6L A7Pro/CC A5PRO/A5PRO CC 安装gms google service指南

    用过海信双面屏或者eink手机的朋友都知道 xff0c 海信手机就是死活安装不了谷歌全家桶 xff0c 因为海信的领导说跟谷歌有协议不能安装谷歌框架 xff08 还说后期google审核坚决不给安装 xff0c 人家其他ov mui都可以安
  • Windows Terminal无法加载WSL [process exited with code 4294967295 (0xffffffff)]

    在Windows Terminal中WSL无法打开错误代码是 process exited with code 4294967295 0xffffffff xff0c 但在命令行中 通过 34 C Windows System32 wsl
  • 【经验分享】PC端免费高效的同声翻译

    2022 09 26 谷歌翻译退出中国市场 translate googleapis com 与 谷歌翻译web translate google cn现在无法用了 最新解决方法见 https blog csdn net sinat 240
  • 巧用Prometheus来扩展kubernetes调度器

    Overview 本文将深入讲解 如何扩展 Kubernetes scheduler 中各个扩展点如何使用 xff0c 与扩展scheduler的原理 xff0c 这些是作为扩展 scheduler 的所需的知识点 最后会完成一个实验 xf
  • 【C】目录

    ch0 idech01 变量和数据结构ch02 格式化与流程控制ch03 数组ch04 函数ch05 指针ch06 关于C语言的内存布局ch07 复合结构ch08 文件处理
  • 协议数据单元 帧 包 段 报文之间的区别

    Overview 1 协议数据单元 Protocol Data Unit PDU 是应用于OSI模型中的数据结构 xff0c 在OSI模型中每一层都会被添加一个header xff0c tailer进行封装 xff0c header tai
  • 官方摆烂这就是haproxy所谓的云原生架构

    只支持 systemd 这种方式管理 xff0c 其他方式重启失败 xff0c 搜索关键字 xff0c 17个相关问题并未有良好的解决方法 使用master worker方式管理 xff0c data plane api 重启不能拉起hap
  • 【github开源】Linux iptables 界面化 分布式 管理平台 go vue,底座firewalld

    快速部署 xff1a Uranus 目前最优的firewalld前端 如果你觉得项目符合你的使用场景 劳烦大佬点个 x1f31f x1f31f x1f31f 吧 好人一生平安 Uranus Gateway Uranus使命是将iptable
  • iOS真机调试报错(0xE8008016)相关错误

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

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