JAVA通过auth_code获取支付宝账户信息

业务中用到了绑定支付宝账户的功能,需要移动端唤起支付宝app获取到auth_code后传递给后台,后台将用户支付宝的头像,昵称,user_id存入数据库,以便后面做退款转账业务。
首先需要在支付宝平台上签约授权然后下载对应jar包,这个按照官网文档做就可以。(https://docs.alipay.com/mini/introduce/auth
配置文件中的内容:

#支付宝网关(固定)
URL=https://openapi.alipay.com/gateway.do
#APPID即创建应用后生成
APP_ID= 
#开发者应用私钥,由开发者自己生成
APP_PRIVATE_KEY=
#参数返回格式,只支持json
FORMAT=json
#请求和签名使用的字符编码格式,支持GBK和UTF-8
CHARSET=UTF-8
#支付宝公钥,由支付宝生成
ALIPAY_PUBLIC_KEY=
#商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2
SIGN_TYPE=RSA2

在配置文件中引入该properties,然后新建类将参数注入。
applicationContext.xml代码:

<bean id="alipayclient" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="locations">
            <array>
                <value>classpath*:alipayclient.properties</value>
            </array>
        </property>
    </bean>

接口代码:

@Action("getAccessTokenAndUserId")
public class OutCommonAction extends OutInterfaceBasicAction<DoctorAccount>{
    private static final long serialVersionUID = 1L;
    private Map<String, Object> msg = new HashMap<String, Object>();
    @Value("#{alipayclient[URL]}") 
    public String URL;
    @Value("#{alipayclient[APP_ID]}") 
    public String APP_ID;
    @Value("#{alipayclient[APP_PRIVATE_KEY]}") 
    public String APP_PRIVATE_KEY;
    @Value("#{alipayclient[FORMAT]}") 
    public String FORMAT;
    @Value("#{alipayclient[CHARSET]}") 
    public String CHARSET;
    @Value("#{alipayclient[ALIPAY_PUBLIC_KEY]}") 
    public String ALIPAY_PUBLIC_KEY;
    @Value("#{alipayclient[SIGN_TYPE]}") 
    public String SIGN_TYPE;

    /**
     * 支付宝验证
     *  --使用auth_code获取access_token与user_id
     * @author XiongXiaobo
     */
    @Action("getAccessTokenAndUserId")
    public String getAccessTokenAndUserId() {
        //获取参数
        String auth_code = getRequest().getParameter("auth_code");
        //校验参数
        if (StringUtils.isNotBlank(auth_code)) {
            try {
                AlipayClient alipayClient = new DefaultAlipayClient(URL,APP_ID,APP_PRIVATE_KEY,FORMAT,CHARSET,ALIPAY_PUBLIC_KEY,SIGN_TYPE);
                //使用auth_code获取access_token与user_id
                AlipaySystemOauthTokenRequest requests = new AlipaySystemOauthTokenRequest();
                requests.setCode(auth_code);
                requests.setGrantType("authorization_code");
                AlipaySystemOauthTokenResponse oauthTokenResponse = alipayClient.execute(requests);
                if(oauthTokenResponse.isSuccess()){
                     AlipayUserInfoShareRequest requestUser = new AlipayUserInfoShareRequest();
                        AlipayUserInfoShareResponse userinfoShareResponse = alipayClient.execute(requestUser, oauthTokenResponse.getAccessToken());
                        if(userinfoShareResponse!=null){
                          String  avatar=userinfoShareResponse.getAvatar();//用户头像
                          String  userName=userinfoShareResponse.getNickName();//用户昵称
                          String userId= userinfoShareResponse.getUserId();
                          //绑定医生和支付宝数据
                          msg.put("aliNickName",userName);
                          msg.put("aliAvatar",avatar);
                          msg.put("aliAccount",userId);
                          msg.put("stateCode", MsgCode.SUCCESS);
                          msg.put("message", "请求成功并返回数据!");
                          Struts2Utils.renderJson(msg);
                          return NONE;
                    }
                }
                msg.put("message", "调用失败!");
                msg.put("stateCode", MsgCode.SUCCESS);
                msg.put("message", "请求成功并返回数据!");
            } catch (Exception e) {
                msg.put("stateCode", MsgCode.SYS_ERROR);
                msg.put("message", "后台异常!");
                e.printStackTrace();
            }
        } else {
            msg.put("stateCode",MsgCode.GET_PARAM_ERROR);
            msg.put("message","有一个或多个参数为空");
        }
        Struts2Utils.renderJson(msg);
        return NONE;
    }

}

需要强调的是,该接口测试需要在沙箱或者是线上服务器环境测试。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值