支付宝快捷登录相关事宜
接近年关,公司产品提出新需求,和支付宝合作,需要开发快捷登录--》“无线账户授权”,手机端装有支付宝钱包,直接唤起支付宝钱包,若没有支付宝钱包就直接走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>
配置pid、appid和privateKey。
NSString *partner = @"";(合作者身份以2088开头的纯15位数字) NSString *appID = @""; (商户签约的 appid) NSString *privateKey = @""; (商户端生成的私钥PKCS8格式)
调用 AlipaySDK API授权 ,授权demo参考如下
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: 导入类包
解压“alipay-sdk-NEXXX.zip”,除了AopSdk.csproj、AopSdk.sln外其他所有类文件原封不动地放置到商户的项目中。
步骤2: 调用类包
请求示例
商户服务端请求支付宝系统,请求示例如下:
using Aop.Api;//支付宝网关地址
string serverUrl = "https://openapi.alipay.com/gateway.do";//应用ID
string appId = "2014******14150";
//客户端返回的auth_code string auth_code = "4b6f9f6d560345398c9b3cae18b96C09";
//返回结果格式:xml、json; 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: 导入类包
解压“alipay-sdk-NEXXX.zip”,除了AopSdk.csproj、AopSdk.sln外其他所有类文件原封不动地放置到商户的项目中。
步骤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";//返回结果格式:xml、json; 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客户端,客户端再进行相应逻辑处理。
四、如何获得PID、APPID与密钥
步骤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;//通过参数调用登录授权接口。
shemeStr:与商户app在info.plist中的URL Schemes保持一致,保证跳转支付宝客户端授权后能正确唤起商户app。 例如
completionBlock 授权结果回调:
resultStatus:9000——认证成功 4000——认证失败 6001——用户取消
-(void)processAuth_V2Result:(NSURL*)resultUrl standbyCallback:(CompletionBlock)completionBlock; //授权结束后在appdelegate中需处理的方法
当设备安装了支付宝客户端,会优先跳转支付宝客户端进入授权,返回的url传入该方法处理完成后统一输出结果。
参数:
resultUrl //支付宝客户端授权完成或者取消,传回给商户app的url。
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状态代码
支付宝快捷登录相关事宜相关推荐
- shopnc 支持 支付宝快捷登陆 shopnc权限验证原理说明
为目前使用的是shopnc商场二次开发,shopnc本身做了qq互联和微博快捷登陆的api,做成了集成通用的接口 首先说下基本的这种类型的api访问方式,首先,的有个配置文件,配置你申请的id和key ...
- 第2次作业:支付宝快捷支付模块分析
有关支付宝快捷支付的分析 1.介绍产品相关信息 1.1我选择的产品是支付宝[1]. 1.2选择支付宝作为产品来分析主要有以下三个原因: 1.2.1 相对于其他的产品,支付宝在我生活中使用的频率会相对 ...
- 支付宝快捷支付 快就不安全了吗?
为什么80%的码农都做不了架构师?>>> 工行关闭四个快捷支付接口 之前四大行下调支付宝快捷支付额度,另外四大行均回应称,设置转账及交易支付限额的出发点和落脚点都是为了客户资金 ...
- H5网页使用支付宝授权登录获取用户信息详解
用户信息授权 用户信息授权主要是为了获取支付宝用户ID(USER_ID).授权令牌(access_token),便于开发者处理自身业务逻辑的时候使用,例如:获取支付宝用户信息.发会员卡.快捷登录等.授 ...
- Android Studio 开发app 实现支付宝授权登录,获取支付宝账号头像昵称等信息
效果展示: 点击支付宝授权Demo 接下来我们开始动手写项目 首先需要在支付宝开放平台,注册账号,创建应用,配置应用,需要审核时间大约为1-2天. 网页/移动应用文档指 ...
- 国际化常见快捷登录总结:使用 Google、Facebook 等三方平台实现快速登录
目录 背景 概览 Google 步骤 1:申请 App 步骤 2:前端获取 idToken 通过 Firebase 接入 为什么是 idToken 步骤 3:服务端校验 idToken Faceboo ...
- osta计算机考试题型,计算机基础—OSTA考试相关事宜
1,,OSTA考试,全国计算机及信息高新技术考试,2,,授课教师:塔卫刚部门:教育科学学院教育信息技术系E-mail:[email protected]:15999183100,3,一.考试相关事宜, ...
- 个人网站如何集成QQ快捷登录功能?
目录 一.网站集成QQ快捷登录的好处 二.网站接入QQ快捷登录具体步骤 (1)登录到QQ互联官网 (2)进行个人开发者认证 (3)创建网站应用 (4)填写网站资料 三.如何在本地开发环境下进行测试? ...
- win10一直正在检查更新_IT之家安卓/iOS版 7.15 更新:手机短信快捷登录/海外用户支持...
IT之家 安卓和 iOS 版 7.15 更新! 这个版本是比较重大的版本,7.x 版本非常重视最底层.最基础的体验和功能,我们在陆续进行视觉方面(阅读细节.字体等)的调整后,开始对基础服务动刀,包括最 ...
最新文章
- 北大计算机博士生先于OpenAI发表预训练语言模型求解数学题论文,曾被顶会拒绝...
- 伍哥原创之安装nginx,mysql,php-fpm,redis
- Quartus11中新建工程
- mysql数据库解除外键
- 自网站服务器,教你如何配置自的网站服务器.doc
- 大一python编程题_请教python编程问题(作业就剩这几道题了)
- Jenkins加上linux slave出现[SSH] Connection closed.问题
- 简单总结PPPoE设置
- docker 离线安装_企业级Docker私库Harbor安装详解
- SSH项目搭建-03-DAO层,Controller层创建及代码抽取
- Asp.net页面生命周期详解任我行(1)-小试牛刀,编写页面代码
- “一天搞懂深度学习”笔记
- java 时间轮_惊艳的时间轮定时器
- 多个pdf怎么合并成一个pdf?如何将几个pdf文件合并成一个pdf?
- Fast-paced Multiplayer
- linux手机版模拟电脑,在你的PC上体验Firefox OS 1.3 模拟器
- 【转载】8B/10B Encode/Decode详解
- java poi 将公文套红 并 电子签章
- 数据库集合运算与关系代数
- xilinx fpga学习笔记5:Xst综合属性