ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java 对接支付宝支付和支付宝提现代码(app)

2022-07-29 14:34:59  阅读:211  来源: 互联网

标签:alipay 支付宝 java String app new AliConfig import model


java 对接支付宝支付和支付宝提现代码(app)

一、申请支付宝商家的各种参数 以及证书 不多做介绍

二、引入maven

  

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

 

三、支付宝支付下单 以及提现的工具类:outtradeno是内部订单号,money是钱数 (AliConfig为我自己写的存参数的类)

  提现接口loginid是支付宝账号 name是真实姓名 orderno是内部订单号 money是提现数量

import com.alipay.api.*;
import com.alipay.api.domain.AlipayFundTransUniTransferModel;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.domain.Participant;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayFundTransUniTransferRequest;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class AlipayText {

    static String CHARSET = "UTF-8";
    static String sign_type = "RSA2";

    /*APP 支付 证书方式*/
    public static String alipayPayCert(String outtradeno,String money) throws AlipayApiException {
        //构造client
        CertAlipayRequest certAlipayRequest = new CertAlipayRequest ();
        //设置网关地址
        certAlipayRequest.setServerUrl(AliConfig.SERVERURL);
        //设置应用Id
        certAlipayRequest.setAppId(AliConfig.APP_ID);
        //设置应用私钥
        certAlipayRequest.setPrivateKey(AliConfig.APP_PRIVATE_KEY);
        //设置请求格式,固定值json
        certAlipayRequest.setFormat("json");
        //设置字符集
        certAlipayRequest.setCharset(CHARSET);
        //设置签名类型
        certAlipayRequest.setSignType(sign_type);
        //设置应用公钥证书路径
        certAlipayRequest.setCertPath(AliConfig.app_cert_path);
        //设置支付宝公钥证书路径
        certAlipayRequest.setAlipayPublicCertPath(AliConfig.alipay_cert_path);
        //设置支付宝根证书路径
        certAlipayRequest.setRootCertPath(AliConfig.alipay_root_cert_path);
        //构造client
        AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);
        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest ();
        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel ();
        model.setBody("购买xx" );
        model.setSubject ( "购买xx" );
        model.setOutTradeNo ( outtradeno );
        model.setTimeoutExpress ( "30m" );
        model.setTotalAmount ( money );
        model.setProductCode ( "QUICK_MSECURITY_PAY" );
        request.setBizModel ( model );
        request.setNotifyUrl ( AliConfig.NotifyUrl );
        try  {
            //这里和普通的接口调用不同,使用的是sdkExecute
            AlipayTradeAppPayResponse response = alipayClient.sdkExecute( request );
            System.out.println(response.getBody()); //就是orderString 可以直接给客户端请求,无需再做处理。
            return response.getBody();
        }  catch (AlipayApiException e ) {
            e.printStackTrace();
        }
        return null;
    }


    /*APP 转账*/
    public static String alipayFundTransUniTransfer(String loginId,String name,String orderno,String money) throws AlipayApiException {
        AlipayConfig alipayConfig = new AlipayConfig();
        alipayConfig.setServerUrl(AliConfig.SERVERURL);
        alipayConfig.setAppId(AliConfig.APP_ID);
        alipayConfig.setPrivateKey(AliConfig.APP_PRIVATE_KEY);
        alipayConfig.setAppCertPath(AliConfig.app_cert_path);
        alipayConfig.setAlipayPublicCertPath(AliConfig.alipay_cert_path);
        alipayConfig.setRootCertPath(AliConfig.alipay_root_cert_path);
        alipayConfig.setFormat("JSON");
        alipayConfig.setCharset(CHARSET);
        alipayConfig.setSignType("RSA2");
        // 构造client
        DefaultAlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);
        AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
        AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();
        Participant payeeInfo = new Participant();
        payeeInfo.setIdentity(loginId);
        payeeInfo.setName(name);
        payeeInfo.setIdentityType("ALIPAY_LOGON_ID");
        model.setPayeeInfo(payeeInfo);
        model.setProductCode("TRANS_ACCOUNT_NO_PWD");
        model.setOrderTitle("提现");
        model.setOutBizNo(orderno);
        model.setBusinessParams("{\"payer_show_name_use_alias\":\"xxxx\"}");
        /*SignData signData = new SignData();
        signData.setOriOutBizNo("订单号");
        signData.setOriSignType("RSA2");
        signData.setOriSign("EqHFP0z4a9iaQ1ep==");
        signData.setOriCharSet("UTF-8");
        signData.setPartnerId("签名被授权方支付宝账号ID");
        signData.setOriAppId("2021000185629012");
        model.setSignData(signData);*/
        model.setRemark("提现");
//        model.setOriginalOrderId("20190620110075000006640000063056");
//        model.setPassbackParams("{\"merchantBizType\":\"peerPay\"}");
        model.setBizScene("DIRECT_TRANSFER");
        model.setTransAmount(money);
        request.setBizModel(model);
        AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request);
        System.out.println(response.getBody());
        if (response.isSuccess()) {
            System.out.println("调用成功");
        } else {
            System.out.println("调用失败");
        }
        return response.getBody();
    }
}

四、支付宝提现调用代码处理

JSONObject json = JSONObject.parseObject(res).getJSONObject("alipay_fund_trans_uni_transfer_response");
        if (!"10000".equalsIgnoreCase(json.getString("code"))) {
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return AjaxResult.error(json.getString("sub_msg"));
        }

五、支付宝回调

/**
     * 支付宝回调
     */
    @PostMapping("alipay_callback")
    public void alipaySend(HttpServletRequest request, HttpServletResponse response) throws AlipayApiException, IOException {
        //获取支付宝POST过来反馈信息
        Map<String, String> params = new HashMap<String, String>();
        Map requestParams = request.getParameterMap();
        for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
            String name = (String) iter.next();
            String[] values = (String[]) requestParams.get(name);
            String valueStr = "";
            for (int i = 0; i < values.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
            }
            //乱码解决,这段代码在出现乱码时使用。
            //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
            params.put(name, valueStr);
        }
        logger.info("支付宝回调返回的信息{}", params.toString());
        boolean flag = AlipaySignature.rsaCertCheckV1(params, AliConfig.alipay_cert_path, "UTF-8", "RSA2");
        String tradeNo = params.get("out_trade_no");
        BbOrder order = orderService.selectOrderByOrderNo(tradeNo);
        if (order == null) {
            throw new ServiceException("out_trade_no错误");
        }
        // 支付成功
        if (flag) {
            logger.info("支付成功");
            
        } else {
            logger.info("支付失败");
        }
        response.getWriter().write("success");
    }

 

六、搞定

标签:alipay,支付宝,java,String,app,new,AliConfig,import,model
来源: https://www.cnblogs.com/void--main/p/16532114.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有