支付宝转账(公钥证书模式)

博客 分享
0 219
张三
张三 2022-03-03 17:56:02
悬赏:0 积分 收藏

支付宝转账(公钥证书模式)

前言

很久都没有写博客了,一来是感觉工作中没有接触什么新东西,二来也是自己变懒了,业余时间都耗费在了休闲上面,主动学习的次数越来越少了。今天项目里需要对接到支付宝转账给个人账户,正好以前没有弄过,把对接步骤在此总结一下。

 

配置

支付宝对接官方文档 : https://opendocs.alipay.com/apis/02byum

首先需要在支付宝开放平台中创建好应用,整理对接时需要的参数。

1.appId

2.私钥

3.应用公钥证书

4.支付宝公钥证书

5.支付宝根证书

 

 

 

 

 代码

1.首先需要引入支付宝的SDK,jar包下载或者maven引入都可以。

 

2.把三个证书放入到项目中

 

3.封装配置参数,其中支付宝网关是固定的,正式环境是 https://openapi.alipay.com/gateway.do ,沙箱环境是 https://openapi.alipaydev.com/gateway.do ,其他的appId、应用私钥在配置文件中配好

@Component@Datapublic class AliPayConfig {    // 支付宝网关    @Value("${aliPay.serverUrl}")    private String serverUrl;    //appId    @Value("${aliPay.appId}")    private String appId;    //私钥    @Value("${aliPay.privateKey}")    private String privateKey;    //参数返回格式,只支持 JSON(固定)。    public static String FORMAT = "json";    //商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2。    public static String SIGN_TYPE = "RSA2";    // 字符编码格式    public static String CHARSET = "UTF-8";    //转账成功状态码    public static String SUCCESS_CODE = "10000";    //收款方标识类型 ALIPAY_USER_ID:支付宝会员的用户 ID,可通过 获取会员信息 能力获取。ALIPAY_LOGON_ID:支付宝登录号,支持邮箱和手机号格式。    public static String IDENTITY_TYPE = "ALIPAY_LOGONID";    //应用证书路径    public static String APP_CERT_PATH = ClassLoader.getSystemResource("aliPay/appCertPublicKey.crt").getPath();    //公钥证书路径    public static String PUBLIC_CERT_PATH = ClassLoader.getSystemResource("aliPay/alipayCertPublicKey_RSA2.crt").getPath();    //支付宝根证书路径    public static String ROOT_CERT_PATH = ClassLoader.getSystemResource("aliPay/alipayRootCert.crt").getPath();

 

 

 

4. 发送转账请求

/** * 功能描述: 支付宝转账接口-公钥证书模式 * * @param aliPayConfig 支付宝配置 * @param orderNo      系统订单号 * @param account      收款方帐号 * @param userName     收款方姓名 * @param amount       转账金额 * @创建人: Tang * @创建时间: 2022年03月03日 17:36:30 * @return: boolean **/public static boolean transfer(AliPayConfig aliPayConfig, String orderNo, String account, String userName, String amount) throws AlipayApiException {    log.info("支付宝转账开始,订单号 = {}", orderNo);    //构造client    CertAlipayRequest certAlipayRequest = new CertAlipayRequest();    //设置网关地址    certAlipayRequest.setServerUrl(aliPayConfig.getServerUrl());    //设置应用Id    certAlipayRequest.setAppId(aliPayConfig.getAppId());    //设置应用私钥    certAlipayRequest.setPrivateKey(aliPayConfig.getPrivateKey());    //设置请求格式,固定值json    certAlipayRequest.setFormat(AliPayConfig.FORMAT);    //设置字符集    certAlipayRequest.setCharset(AliPayConfig.CHARSET);    //设置签名类型    certAlipayRequest.setSignType(AliPayConfig.SIGN_TYPE);    //设置应用公钥证书路径    certAlipayRequest.setCertPath(AliPayConfig.APP_CERT_PATH);    //设置支付宝公钥证书路径    certAlipayRequest.setAlipayPublicCertPath(AliPayConfig.PUBLIC_CERT_PATH);    //设置支付宝根证书路径    certAlipayRequest.setRootCertPath(AliPayConfig.ROOT_CERT_PATH);    //构造client    AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);    AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest();    AlipayFundTransToaccountTransferModel transferModel = new AlipayFundTransToaccountTransferModel();    //自身系统订单号,    transferModel.setOutBizNo(orderNo);    transferModel.setPayeeType(AliPayConfig.IDENTITY_TYPE);    transferModel.setPayeeAccount(account);    transferModel.setAmount(amount);    transferModel.setPayeeRealName(userName);    transferModel.setRemark("提款");    request.setBizModel(transferModel);    log.info("支付宝转账请求参数 = {}", JSONObject.toJSON(transferModel));    try {        AlipayFundTransToaccountTransferResponse response = alipayClient.certificateExecute(request);        if (AliPayConfig.SUCCESS_CODE.equals(response.getCode())) {            log.info("转账成功,返回信息{}", JSONObject.toJSON(response));            return true;        } else {            log.error("转账失败,错误信息 = {}", JSONObject.toJSON(response));            return false;        }    } catch (AlipayApiException e) {        log.error("转账异常,异常信息 = {}", e.getMessage());        return false;    }}

 

至此完成 ,如果有哪说得不对的地方,欢迎指出。

posted @ 2022-03-03 17:49 我恰芙蓉王 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    张三

    张三 (王者 段位)

    821 积分 (2)粉丝 (41)源码

     

    温馨提示

    亦奇源码

    最新会员