接近年关,公司产品提出新需求,和支付宝合作,需要开发快捷登录--》“无线账户授权”,手机端装有支付宝钱包,直接唤起支付宝钱包,若没有支付宝钱包就直接走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、下载接口
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参考如下
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 内,自行解析。
四、如何获得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状态代码
这篇博客详细介绍了如何在iOS应用中集成支付宝快捷登录功能,包括客户端iOS App和商户服务端C#的步骤。内容涵盖下载SDK、配置Xcode、授权流程、接口调用、授权令牌和用户信息共享接口的实现,以及PID、APPID、密钥的获取和RSA密钥的生成与使用。

3万+

被折叠的 条评论
为什么被折叠?



