美文网首页
支付宝授权+支付demo

支付宝授权+支付demo

作者: gigglesoso | 来源:发表于2020-12-07 13:51 被阅读0次

项目中涉及到使用支付宝提现,涉及到的相关流程有支付宝授权,授权后获取到用户信息,使用用户信息进行转账。以下是demo测试代码。

    public String pay(String code) throws AlipayApiException {
        //构造client
        CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
        //设置网关地址
        certAlipayRequest.setServerUrl(serverUrl);
        //设置应用Id
        certAlipayRequest.setAppId(appId);
        //设置应用私钥
        certAlipayRequest.setPrivateKey(privateKey);
        //设置请求格式,固定值json
        certAlipayRequest.setFormat(format);
        //设置字符集
        certAlipayRequest.setCharset(charset);
        //设置签名类型
        certAlipayRequest.setSignType(signType);
        //设置应用公钥证书路径
        certAlipayRequest.setCertPath("应用公钥证书绝对路径");
        //设置支付宝公钥证书路径
        certAlipayRequest.setAlipayPublicCertPath("支付宝证书绝对路径");
        //设置支付宝根证书路径
        certAlipayRequest.setRootCertPath("支付宝根证书绝对路径");
        //构造client
        AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);
        // 创建获取token的request
        AlipaySystemOauthTokenRequest tokenRequest = new AlipaySystemOauthTokenRequest();
        tokenRequest.setCode(code);
        tokenRequest.setGrantType("authorization_code");
        AlipaySystemOauthTokenResponse tokenResponse = alipayClient.certificateExecute(tokenRequest);
        String accessToken = tokenResponse.getAccessToken();
        // 获取用户信息
        AlipayUserInfoShareRequest userinfoRequest = new AlipayUserInfoShareRequest();
        AlipayUserInfoShareResponse userInfoResponse = alipayClient.certificateExecute(userinfoRequest,accessToken);
        String userId = userInfoResponse.getUserId();
        // 开始转账
        AlipayFundTransUniTransferRequest request  =  new  AlipayFundTransUniTransferRequest();
        request.setBizContent ( "{"   +
                "\"out_biz_no\":\"test20201201002\","   +  // 单号唯一,需要保证每次转账时的唯一性
                "\"trans_amount\":0.1,"   +
                "\"product_code\":\"TRANS_ACCOUNT_NO_PWD\","   +
                "\"biz_scene\":\"DIRECT_TRANSFER\","   +
                "\"order_title\":\"使用用户ID转账测试\","   +
                "\"payee_info\":{"   +
                "\"identity\":\""+userId+"\","   +
                "\"identity_type\":\"ALIPAY_USER_ID\","   +     // ALIPAY_USER_ID   ALIPAY_LOGON_ID两种转账方式
                "    },"   +
                "\"remark\":\"使用用户ID转账\","   +
                "\"business_params\":\"{\\\"payer_show_name\\\":\\\"测试\\\"}\","   +
                "  }" );
        AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request);
        if (response.isSuccess()){
            System.out.println ( "调用成功" );
            return "success";
        } else {
            System.out.println ( "调用失败" );
            return "failure";
        }

以上只是示例代码,主要目的是明确在证书模式下使用的相关api,分别为使用CertAlipayRequest 构造AlipayClient,AlipayClient只需要程序构建一次;
AlipaySystemOauthTokenRequest,该request是用来使用前端获取到的授权码获取access_token;其对应的返回值为AlipaySystemOauthTokenResponse,其封装了相应token返回值;
AlipayUserInfoShareRequest,该request是使用AlipaySystemOauthTokenResponse获取到的access_token获取用户信息;对应返回值为AlipayUserInfoShareResponse,包含了用户相关信息;
AlipayFundTransUniTransferRequest ,该request用来向指定用户转账,可通过ALIPAY_USER_ID(用户id)或者ALIPAY_LOGON_ID(登录id,一般为电话);相应返回值为AlipayFundTransUniTransferResponse,该返回值包含了转账结果。

ps: 以上代码只明确证书模式下使用api,真正绑定转账流程以自己实际业务为主。

相关文章

网友评论

      本文标题:支付宝授权+支付demo

      本文链接:https://www.haomeiwen.com/subject/tjzzwktx.html