博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java支付宝第三方登陆开发过程
阅读量:4028 次
发布时间:2019-05-24

本文共 4419 字,大约阅读时间需要 14 分钟。

网站支付宝登录接入流程

一、文档地址

接入文档地址:。

注:该接口支持沙箱环境测试。

 

二、开发前准备

1、签约

网站支付宝登录无需单独签约,在Appid对应的应用上添加获取会员信息功能包即可。

 

2、创建应用

(1)。

(2)生成密钥:参考或者。

(3)。

(4)添加功能包:进入,根据自己的业务需求,选择“应用类型”,再点击要添加功能的应用,进入应用详情页,然后进行如下操作。

帖子图片80.png

 

3、服务端sdk地址

 

三、接口集成代码示例

1、应用授权URL拼接(在页面上加入此链接。这个链接是跳转到支付宝的授权地址

授权链接拼接示例如下:

https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=SCOPE&redirect_uri=UrlEncode(授权回调地址)

授权链接上的各参数说明

app_id:开发者应用的app_id,如何获取可参考。

scope:网站支付宝登录的scope可填写成auth_user或者auth_base,2则区别可参考进行了解。

redirect_uri:授权回调地址,必须以http或者https开头。

state:商户自定义参数,用户授权后,重定向到 redirect_uri 时会原样回传给商户,可不传递。

 

2、获取 auth_code(授权成功后,跳转到回调地址。进行用户信息获取

授权商户访问拼接好的应用授权URL拼接链接,点击授权成功跳转至授权回调页面,在授权回调页面会带有auth_code 相关的数据内容,示例如下:

http://example.com/doc/toAuthPage.html?app_id=2014101500013658&source=alipay_wallet&scope=auth_user&auth_code=ca34ea491e7146cc87d25fca24c4cD11

3、实现代码如下(回调地址业务,获取用户信息

通过auth_code 获取用户信息 

 返回值如下:

user_id就是我们唯一的用户标识。其实代码并不难。也就是刚入手的话。对于私钥和应用公钥以及支付宝公钥会弄混淆。

 顺便把代码贴在这里吧。

  

/** * 支付宝第三方登陆 * @param code * @param appId * @param request * @param response */@RequestMapping("/qyStaffAlipay/login")public void qyStaffAlipay(@RequestParam(value = "auth_code") String code,                          @RequestParam(value = "app_id") String appId,                          HttpServletRequest request, HttpServletResponse response) throws IOException {  try {    JSONObject json =  AlipayClientUtils.getAuthToken(code);    if(json != null){      String unionId = json.getString("user_id");      if(StringUtils.isNotBlank(unionId)){          //登陆业务             }else {        logger.error("登录失败:unionId为空");      }    }  }catch (AuthException e) {    e.printStackTrace();    logger.error("登录失败:" + e.getMessage());  } catch (Exception e) {    e.printStackTrace();    logger.error("登录失败:" + e.getMessage());  }  response.sendRedirect("/r/login");  return;}
import com.alibaba.fastjson.JSONObject;import com.alipay.api.AlipayApiException;import com.alipay.api.AlipayClient;import com.alipay.api.DefaultAlipayClient;import com.alipay.api.request.AlipayOpenPublicTemplateMessageIndustryModifyRequest;import com.alipay.api.request.AlipaySystemOauthTokenRequest;import com.alipay.api.response.AlipayOpenPublicTemplateMessageIndustryModifyResponse;import com.alipay.api.response.AlipaySystemOauthTokenResponse;import com.ditop.modules.gcjsy.basic.constant.AliPayLoginContant;import static com.alipay.api.AlipayConstants.CHARSET_GBK;/** * @author wwz */public class AlipayClientUtils {    /**     * 创建单例     * @return     */    private static class AlipayClientHolder{        private static final AlipayClient alipayClient = new DefaultAlipayClient(AliPayLoginContant.SERVICE_URL, AliPayLoginContant.APPID, AliPayLoginContant.APP_PRIVATE_KEY, "json", CHARSET_GBK, AliPayLoginContant.ALIPAY_PUBLIC_KEY, "RSA2");    }       /**     * 获取token信息     * @param code     * @return     * @throws AlipayApiException     */    public static JSONObject getAuthToken(String code) throws AlipayApiException {        AlipayClient alipayClient  = AlipayClientHolder.alipayClient;        AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();        request.setCode(code);        request.setGrantType("authorization_code");        AlipaySystemOauthTokenResponse response = alipayClient.execute(request);        if(response.isSuccess()){            String body = response.getBody();            if(!StringUtils.isEmpty(body)){                JSONObject jsonObject = JSONObject.parseObject(body);                JSONObject object = jsonObject.getJSONObject(AliPayLoginContant.ALIPAY_SYSTEM_OAUTH_TOKEN_RESPONSE);                 return object;            }            System.out.println("调用成功");        } else {            System.out.println("调用失败");        }        return null;    }}

 

/** * @author wwz */public class AliPayLoginContant {    public final static String BASE_URL = "http://wwz1994.e2.luyouxia.net:22851";    /**     * 网关地址     */    public final static String SERVICE_URL = "https://openapi.alipay.com/gateway.do";    /**     * appid     */    public final static String APPID = "XXXXX";    /**     * 回调地址     */    public final static String REDIRECT_URL = "XXXXX";    /**     * 支付宝公钥(在签名)     */    public final static String ALIPAY_PUBLIC_KEY = "XXXXX";    /**     * 你自己生成的私钥     */    public final static String APP_PRIVATE_KEY = "XXXXX";    public static final String ALIPAY_SYSTEM_OAUTH_TOKEN_RESPONSE = "alipay_system_oauth_token_response";  }

 

转载地址:http://tmvbi.baihongyu.com/

你可能感兴趣的文章
snprintf 函数用法
查看>>
uboot.lds文件分析
查看>>
uboot start.s文件分析
查看>>
没有路由器的情况下,开发板,虚拟机Ubuntu,win10主机,三者也可以ping通
查看>>
本地服务方式搭建etcd集群
查看>>
安装k8s Master高可用集群
查看>>
忽略图片透明区域的事件(Flex)
查看>>
忽略图片透明区域的事件(Flex)
查看>>
AS3 Flex基础知识100条
查看>>
Flex动态获取flash资源库文件
查看>>
flex中设置Label标签文字的自动换行
查看>>
Flex 中的元数据标签
查看>>
flex4 中创建自定义弹出窗口
查看>>
01Java基础语法-11. 数据类型之间的转换
查看>>
01Java基础语法-13. if分支语句的灵活使用
查看>>
01Java基础语法-15.for循环结构
查看>>
01Java基础语法-16. while循环结构
查看>>
01Java基础语法-17. do..while循环结构
查看>>
01Java基础语法-18. 各种循环语句的区别和应用场景
查看>>
01Java基础语法-19. 循环跳转控制语句
查看>>