APP整合支付宝快捷登录,获取用户信息

由于公司的业务关系,我们开通了支付宝的支付功能,但是在使用中会产生提现.

由于是半路接手这个项目,之前的做法已经集成了微信 自动绑定了微信,但是支付宝却还是需要用户自己输入账号,用户体验不佳,经过查找支付宝的相关接口,发现可以通过第三方授权方式来完成支付宝账户的绑定.

下面记录一下整个的过程.由于此部分都在服务端操作,顾对已客户端的操作不做具体阐述.

接入过程共调用支付宝以下接口

alipay.open.auth.sdk.code.get

alipay.system.oauth.token

alipay.user.userinfo.share

 

 

1. 服务器端完成接口信息的签名,将字符串返回给客户端,客户端通过对应的sdk与支付宝进行交互

SortedMap<String,String > map = new TreeMap<>();
map.put("apiname","com.alipay.account.auth");
map.put("method","alipay.open.auth.sdk.code.get");
map.put("app_id", 	支付宝分配给开发者的应用ID);
map.put("app_name","mc");
map.put("biz_type","openservice");
map.put("pid",签约的支付宝账号对应的支付宝唯一用户号,以2088开头的16位纯数字组成);
map.put("product_id","APP_FAST_LOGIN");
map.put("scope","kuaijie");
map.put("target_id",商户标识该次用户授权请求的ID,该值在商户端应保持唯一);
map.put("auth_type","AUTHACCOUNT");
map.put("sign_type","RSA");
String signStr = AlipaySignature.getSignContent(map);
String sign = AlipaySignature.rsaSign(signStr, 私钥, 编码);
System.out.println(getEncodeSignContent(map) + "&sign=" + URLEncoder.encode(sign, 编码));

其中的  getEncodeSign方法是将map转为string 并且进行 urlEncode

 将最后获取的内容返回给客户端与支付宝进行交互获得如下内容:

result= "success=true&auth_code=xxxxxxxx&result_code=200&alipay_open_id=xxxxxx&user_id=xxxxxx";

至此,第一步完成.

2.通过刚刚获取的auth_code与支付宝交换accesstoken

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID,自己设置的私钥,"json","GBK",支付宝公钥,"RSA");
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();//创建API对应的request类
request.setGrantType("authorization_code");
request.setCode(刚刚获取的auth_code);
AlipaySystemOauthTokenResponse response = alipayClient.execute(request);//通过alipayClient调用API,获得对应的response类
System.out.print(response.getBody());

 运行后获得以下内容:

{"alipay_system_oauth_token_response":{"access_token":"kuaijiexxxxx","alipay_user_id":"xxxxxxxx","expires_in":1209600,"re_expires_in":15552000,"refresh_token":"xxxxxxxx","user_id":"2088702643630845"},"sign":"xxxx"}

至此,我们获得了对应的accesstoken,下面进行第三布获取用户的个人信息

3.根据accesstoken获取用户信息

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", AlipayConfig.APP_ID,私钥, "json", "UTF-8", 支付宝公钥, "RSA");  //获得初始化的AlipayClient
AlipayUserUserinfoShareRequest request = new AlipayUserUserinfoShareRequest();//创建API对应的request类
AlipayUserUserinfoShareResponse response = alipayClient.execute(request, "xxxxxxx");//在请求方法中传入上一步获得的access_token
System.out.print(response.getBody());

 运行后获得以下内容

{
  "alipay_user_userinfo_share_response": {
    "user_type_value": "2",
    "is_licence_auth": "F",
    "is_certified": "T",
    "is_certify_grade_a": "T",
    "avatar": "https://b0XXXXXXXXX",
    "city": "泰州市",
    "is_student_certified": "F",
    "area": "海陵区",
    "is_bank_auth": "T",
    "is_mobile_auth": "T",
    "nick_name": "清清",
    "alipay_user_id": "xxxxx",
    "user_id": "xxxxx",
    "province": "江苏省",
    "user_status": "T",
    "gender": "m",
    "is_id_auth": "T"
  },
  "sign": "xxxx8MdeFrr20ymvwtnMUPaPAw7JSy8J383LT9FxP5DBEIdh9GKh1GPZ1E="
}

此处有个问题,对于页面文档中的字段会有很多,但是此处获取的信息会少很多,具体的在等待支付宝的回复.

 

注:

其中用的都是RSA加密,由于在支付宝后台没有设置RSA2的秘钥,如果使用RSA2请先配置RSA2的秘钥信息. 

转载于:https://my.oschina.net/bddiudiu/blog/834607

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值