接近年关,公司产品提出新需求,和支付宝合作,需要开发快捷登录--》“无线账户授权”,手机端装有支付宝钱包,直接唤起支付宝钱包,若没有支付宝钱包就直接走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参考如下

签名:支付宝提供的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.csproj、AopSdk.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";

    //返回结果格式: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. 步骤1:  导入类包

    解压“alipay-sdk-NEXXX.zip”,除了AopSdk.csproj、AopSdk.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";//返回结果格式: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;//通过参数调用登录授权接口。

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

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状态代码

支付宝快捷登录相关事宜相关推荐

  1. shopnc 支持 支付宝快捷登陆 shopnc权限验证原理说明

    为目前使用的是shopnc商场二次开发,shopnc本身做了qq互联和微博快捷登陆的api,做成了集成通用的接口 首先说下基本的这种类型的api访问方式,首先,的有个配置文件,配置你申请的id和key ...

  2. 第2次作业:支付宝快捷支付模块分析

    有关支付宝快捷支付的分析 1.介绍产品相关信息 1.1我选择的产品是支付宝[1]. 1.2选择支付宝作为产品来分析主要有以下三个原因: 1.2.1  相对于其他的产品,支付宝在我生活中使用的频率会相对 ...

  3. 支付宝快捷支付 快就不安全了吗?

    为什么80%的码农都做不了架构师?>>>    工行关闭四个快捷支付接口 之前四大行下调支付宝快捷支付额度,另外四大行均回应称,设置转账及交易支付限额的出发点和落脚点都是为了客户资金 ...

  4. H5网页使用支付宝授权登录获取用户信息详解

    用户信息授权 用户信息授权主要是为了获取支付宝用户ID(USER_ID).授权令牌(access_token),便于开发者处理自身业务逻辑的时候使用,例如:获取支付宝用户信息.发会员卡.快捷登录等.授 ...

  5. Android Studio 开发app 实现支付宝授权登录,获取支付宝账号头像昵称等信息

    效果展示: 点击支付宝授权Demo                 接下来我们开始动手写项目 首先需要在支付宝开放平台,注册账号,创建应用,配置应用,需要审核时间大约为1-2天. 网页/移动应用文档指 ...

  6. 国际化常见快捷登录总结:使用 Google、Facebook 等三方平台实现快速登录

    目录 背景 概览 Google 步骤 1:申请 App 步骤 2:前端获取 idToken 通过 Firebase 接入 为什么是 idToken 步骤 3:服务端校验 idToken Faceboo ...

  7. osta计算机考试题型,计算机基础—OSTA考试相关事宜

    1,,OSTA考试,全国计算机及信息高新技术考试,2,,授课教师:塔卫刚部门:教育科学学院教育信息技术系E-mail:[email protected]:15999183100,3,一.考试相关事宜, ...

  8. 个人网站如何集成QQ快捷登录功能?

    目录 一.网站集成QQ快捷登录的好处 二.网站接入QQ快捷登录具体步骤 (1)登录到QQ互联官网 (2)进行个人开发者认证 (3)创建网站应用 (4)填写网站资料 三.如何在本地开发环境下进行测试? ...

  9. win10一直正在检查更新_IT之家安卓/iOS版 7.15 更新:手机短信快捷登录/海外用户支持...

    IT之家 安卓和 iOS 版 7.15 更新! 这个版本是比较重大的版本,7.x 版本非常重视最底层.最基础的体验和功能,我们在陆续进行视觉方面(阅读细节.字体等)的调整后,开始对基础服务动刀,包括最 ...

最新文章

  1. 北大计算机博士生先于OpenAI发表预训练语言模型求解数学题论文,曾被顶会拒绝...
  2. 伍哥原创之安装nginx,mysql,php-fpm,redis
  3. Quartus11中新建工程
  4. mysql数据库解除外键
  5. 自网站服务器,教你如何配置自的网站服务器.doc
  6. 大一python编程题_请教python编程问题(作业就剩这几道题了)
  7. Jenkins加上linux slave出现[SSH] Connection closed.问题
  8. 简单总结PPPoE设置
  9. docker 离线安装_企业级Docker私库Harbor安装详解
  10. SSH项目搭建-03-DAO层,Controller层创建及代码抽取
  11. Asp.net页面生命周期详解任我行(1)-小试牛刀,编写页面代码
  12. “一天搞懂深度学习”笔记
  13. java 时间轮_惊艳的时间轮定时器
  14. 多个pdf怎么合并成一个pdf?如何将几个pdf文件合并成一个pdf?
  15. Fast-paced Multiplayer
  16. linux手机版模拟电脑,在你的PC上体验Firefox OS 1.3 模拟器
  17. 【转载】8B/10B Encode/Decode详解
  18. java poi 将公文套红 并 电子签章
  19. 数据库集合运算与关系代数
  20. xilinx fpga学习笔记5:Xst综合属性

热门文章

  1. 图难于其易;为大于其细。天下难事,必作于易,天下大事,必作于细。
  2. 朋友圈集赞神器!再也不怕谁让集赞了
  3. 漫画APP开发前景浅析
  4. 四边形可以分为几类_四边形的分类
  5. 产品经理和项目经理区别与联系
  6. 【SLF4j】使用日志组件SLF4j写系统日志
  7. 接触C#的第一天和回锅Python的第一天
  8. uboot源码学习(8)DDR内存时序参数
  9. 教你用Python画一棵圣诞树
  10. 【ava数据集可视化】ava数据集ID可视化 A Video Dataset of Spatio-temporally Localized Atomic Visual Actions