首页 > 其他分享 >支付宝企业转账到支付宝账户

支付宝企业转账到支付宝账户

时间:2023-09-08 17:12:41浏览次数:44  
标签:转账 支付宝 String alipay 账户 private import com

准备工作

  1. 注册企业支付宝,企业认证
  2. 产品中心(支付宝商家平台)->签约转账到支付宝账户
  3. 创建应用(支付宝开放平台)默认签约会有一个应用

相关网站

注意事项

  • 创建的支付宝应用需要绑定对应的产品才可以使用
  • 应用需要上线审核通过接口才可以调用
  • 接口加签方式必须使用证书方式
  • 转账需要账号和实名认证姓名一致

代码示例

阿里SDK

<dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-sdk-java</artifactId>
    <version>4.38.72.ALL</version>
</dependency>

单例模式工具类

本示例所有证书都放在resource/certs目录下载加载,方便迁移,如果放在其他路径,项目迁移每次都需手动上传服务器。

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.AlipayConfig;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayFundTransUniTransferModel;
import com.alipay.api.domain.Participant;
import com.alipay.api.internal.util.file.FileUtils;
import com.alipay.api.request.AlipayFundTransUniTransferRequest;
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.ClassPathResource;

import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

/**
 * @description:
 * @author: Mr.Fang
 * @create: 2023-9-8 
 **/
@Slf4j
public class AlipayUtil {

    private String URL = "https://openapi.alipay.com/gateway.do";
    private String APPID = "应用APPID";
    private String app_private_key = "certs/appPrivate.txt";
    private String CHARSET = "UTF8";
    private String FORMAT = "json";
    private String SIGN_TYPE = "RSA2";
    private String app_cert_path = "certs/appCertPublicKey.crt";
    private String alipay_cert_path = "certs/alipayCertPublicKey_RSA2.crt";
    private String alipay_root_cert_path = "certs/alipayRootCert.crt";
    private AlipayConfig alipayConfig;
    private static AlipayUtil instance;

    // 无惨构造,默认加载支付宝配置信息
    private AlipayUtil() throws IOException {
        alipayConfig = new AlipayConfig();
        //设置网关地址
        alipayConfig.setServerUrl(URL);
        //设置应用ID
        alipayConfig.setAppId(APPID);
        //设置应用私钥
        alipayConfig.setPrivateKey(readToString(new ClassPathResource(app_private_key).getInputStream()));

        //设置请求格式,固定值json
        alipayConfig.setFormat(FORMAT);
        //设置字符集
        alipayConfig.setCharset(CHARSET);
        //设置签名类型
        alipayConfig.setSignType(SIGN_TYPE);
        //设置应用公钥证书路径
        alipayConfig.setAppCertContent(readToString(new ClassPathResource(app_cert_path).getInputStream()));
        //设置支付宝公钥证书路径
        alipayConfig.setAlipayPublicCertContent(readToString(new ClassPathResource(alipay_cert_path).getInputStream()));
        //设置支付宝根证书路径
        alipayConfig.setRootCertContent(readToString(new ClassPathResource(alipay_root_cert_path).getInputStream()));
    }

    /**
     * 读取 resource 文件
     *
     * @param inputStream
     * @return
     */
    private String readToString(InputStream inputStream) {
        try {
            DataInputStream dataInputStream = new DataInputStream(inputStream);
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int length;
            while ((length = dataInputStream.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }
            return output.toString();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static AlipayUtil getInstance() throws IOException {
        if (instance == null) {
            synchronized (AlipayUtil.class) {
                if (instance == null) {
                    instance = new AlipayUtil();
                }
            }
        }
        return instance;
    }

    /**
     * description: 支付宝企业转账到个人
     * create by: Mr.Fang
     *
     * @param bizNo    订单编号
     * @param amount   金额
     * @param title    转账说明
     * @param identity 支付宝手机号或邮箱
     * @param name     支付宝真实姓名
     * @return: Result<java.lang.String>
     * @date: 2023/9/8 
     */
    public Result<String> transfer(String bizNo, String amount, String title, String identity, String name) throws AlipayApiException {
        AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);
        AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
        AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();

        model.setOutBizNo(bizNo); // 订单编号
        model.setTransAmount(amount); // 金额
        model.setBizScene("DIRECT_TRANSFER");
        model.setProductCode("TRANS_ACCOUNT_NO_PWD");
        model.setOrderTitle(title); // 订单标题

        Participant payeeInfo = new Participant();
        payeeInfo.setIdentity(identity); // 用户支付宝账户
        payeeInfo.setIdentityType("ALIPAY_LOGON_ID"); // 固定值
        payeeInfo.setName(name); // 用户真实姓名

        model.setPayeeInfo(payeeInfo);
        request.setBizModel(model);
        AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request);
        log.info("转账响应结果:{}", response.getBody());
        if (response.isSuccess()) {
            return Result.OK("转账成功", response.getBody());
        }
        return Result.error("转账失败", response.getBody());
    }
}

resource目录扩展

  • springboot 打包jar文件后通过ClassPathResource 对象可以获取到文件,但是文件路径是无法使用的。
  • 阿里提供的AlipayConfig 对象支持配置证书相关参数有两种方式:第一种证书内容,第二种文件路径。
  • 通过ClassPathResource 拿到文件对象,readToString方法读取文件内容配置证书内容信息。

AlipayConfig 部分代码

public void setRootCertPath(String rootCertPath) {
    this.rootCertPath = rootCertPath;
}
……………………省略
public void setRootCertContent(String rootCertContent) {
    this.rootCertContent = rootCertContent;
}

标签:转账,支付宝,String,alipay,账户,private,import,com
From: https://www.cnblogs.com/bxmm/p/17688078.html

相关文章

  • SQL Server登录账户只能看见自己的数据库(sqlserver设置用户只能查询自己的数据库)
     SQLServer登录账户只能看见自己的数据库(sqlserver设置用户只能查询自己的数据库) 1.新建登录用户以管理员身份登陆数据库(权限最高的身份如sa),点击安全性->登录名,右键新建登录名,输入登录名和密码,取消强制实施密码策略。 2.将服务器角色设置为public  3.将public"......
  • 运用手机运营商二要素Api接口,守护您的账户和隐私,让您安心使用!
    随着移动互联网的普及,我们的生活离不开手机,手机成为了我们生活中不可或缺的一部分。但是随着移动支付的普及,手机支付在我们的生活中也变得越来越重要。手机支付是一种方便快捷的支付方式,但是也存在一些安全隐患。如果我们在使用手机支付时不小心泄露了我们的账户和隐私,那么后果不......
  • 失效日期管理和账户锁定2
    一:chage命令设置密码的失效日期 使用chage命令检查系统中密码的失效日期的命令格式:   change-l用户名使用chage命令设置不更改密码可以使用的最长天数的命令格式: change-M天数用户名使用chage命令检查密码更改到期的宽限天数的命令格式: change-l天数用户名使用ch......
  • 支付宝沙箱支付详细教程(IDEA版)—2023最新版
    目录文章内容如下✏️前言✏️一、获取基本信息......
  • 失效日期管理和账户锁定1(Ubuntu)
    一:概述 Linux系统中的用户和密码都是有使用期限的,超过设置日期期限之后,必须更改密码以防止产生漏洞。如果我们使用Linux系统中有一个账号被人盗了,就容易是文件窃取,危害系统安全。二:设置Linux系统中的失效日期 useradd命令与和指定选项搭配可以设置默认的失效日期。useradd命令......
  • 如何批量注册多个Gmail账户且不会关联?
    Gmail是谷歌旗下的网络邮件服务,是全球最受欢迎的电子邮件服务,它的用途很广泛,具备全球性和通用性的特点。数百万人使用它,不分年龄、性别和地点。它也可以在多个平台上使用,包括网页、移动应用和桌面客户端。正因为如此,Gmail也有很多限制政策:一个IP地址只能登录四个Gmail账户;并且在使......
  • 22. 补充阅读-会计分类账户借贷标记的本质原理和规律
    作者:王会计王贻岩链接:https://www.zhihu.com/question/28385432/answer/281130552来源:知乎著作权归作者所有。  借贷记账法比其他复式记账法(增减记账法)简便、合理的原因就是因为其巧妙的账户结构设置规定:同类账户结构相同,异类账户结构相反。  什么意思,通过会计等式”资产......
  • Oracle官网下载软件需要登录Oracle账户问题
    问题描述当我们在Oracle官网上下载JDK时,(JDK下载地址)系统会提示需要登录Oracle账户。对于没有Oracle账户的人来说,注册账户太繁琐。没有账户怎么办???此处推荐一个靠谱的网站,https://bugmenot.com/view/oracle.com,里面提供部分Oracle内部账户及密码,我们可以临时使用这些账户来下......
  • 【运营版】盛大大财神多功能完美运营微信/支付宝/云闪付/抢单系统源码/完整数据
    源码介绍:盛大大财神多功能完美运营微信/支付宝/云闪付/抢单系统源码/完整数据做码商的那时候都知道的,大财神,功能以及各方面都是很不错的。完美运营级无BUG。VUE+thinkphp5前后端分离,喜欢的拿去学习研究,里面带简单的搭建教程   点击链接,免费下载:提取码:011e......
  • 关于Azure-存储账户-文件共享的内网访问-专用终结点连接-配置说明
    这里以标准性能的StorageV2的存储账户为例(即同时包含了容器,文件共享,队列,表)本文的实验环境,是想让Azure上的虚拟机通过内网访问文件共享,而数据连接不走Internet公网我们可以使用到存储账户,菜单下的Networking配置,下面的【专用终结点连接|Privateendpointconnections】 创建......