支付宝支付

https://open.alipay.com/develop/manage

点击沙箱

 

第一种方法

使用SDK

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

 

配置类

package com.dreams;
import lombok.Data;
import org.springframework.context.annotation.Configuration;
@Configuration
@Data
public class AlipayConfig {
    // 商户appid
    public  String APPID = "9xxxxxxxxxxxxxx";
    // 私钥 pkcs8格式的
    public  String RSA_PRIVATE_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxx";

//    // 服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
//    public  String notify_url = "http://商户网关地址/alipay.trade.wap.pay-JAVA-UTF-8/notify_url.jsp";
//    // 页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 商户可以自定义同步跳转地址
//    public  String return_url = "http://商户网关地址/alipay.trade.wap.pay-JAVA-UTF-8/return_url.jsp";
//

    // 请求网关地址
    public  String URL = "https://xxxxxxxxxxdev.xxxxxxxxxxx";
    // 编码
    public  String CHARSET = "UTF-8";
    // 返回格式
    public  String FORMAT = "json";
    // 支付宝公钥
    public  String ALIPAY_PUBLIC_KEY = "xxxxxxxxxxxxxxxxx";
    // 日志记录目录
    public  String log_path = "/log";
    // RSA2
    public  String SIGNTYPE = "RSA2";
}

 

请求

package com.dreams;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradeFastpayRefundQueryRequest;
import com.alipay.api.request.AlipayTradePrecreateRequest;
import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayTradeFastpayRefundQueryResponse;
import com.alipay.api.response.AlipayTradePrecreateResponse;

import com.alipay.api.response.AlipayTradeQueryResponse;
import com.alipay.api.response.AlipayTradeRefundResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @Description:
 * @Version: V1.0
 */
@RestController
public class PayController {


    @GetMapping("/alipaytest")
    public String alipaytest(HttpServletRequest httpRequest, HttpServletResponse httpResponse) throws IOException, AlipayApiException {


        AlipayConfig alipayConfig = new AlipayConfig();

        //获得初始化的AlipayClient
        AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
        request.setReturnUrl("url");
        JSONObject bizContent = new JSONObject();
        bizContent.put("out_trade_no", "20220817010101001");  //交易单号
        bizContent.put("total_amount", 1); //交易金额 单位:元
        bizContent.put("subject", "餐掌柜-餐饮消费"); //支付备注

        request.setBizContent(bizContent.toJSONString());
        // 封装请求支付信息
        AlipayClient client = new DefaultAlipayClient(alipayConfig.URL, alipayConfig.APPID, alipayConfig.RSA_PRIVATE_KEY, alipayConfig.FORMAT, alipayConfig.CHARSET, alipayConfig.ALIPAY_PUBLIC_KEY, alipayConfig.SIGNTYPE);


        AlipayTradePrecreateResponse response = null;
        try {
            response = client.execute(request);
            if (response.isSuccess()) {
                System.out.println("调用成功");
                System.out.println(response.getQrCode());

                //生成Base64格式
                String base64 = QrCodeUtil.
                        generateAsBase64(response.getQrCode(), new QrConfig(300, 300), "png");
                System.out.println(base64);

                return base64;
            } else {
                System.out.println("调用失败");
            }
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }


        return "OK";
    }


    @GetMapping("query")
    public String query(String orderNo) throws AlipayApiException {

        AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
        JSONObject bizContent = new JSONObject();
        bizContent.put("out_trade_no", "20220817010101001");  //交易单号
        request.setBizContent(bizContent.toJSONString());
        AlipayConfig alipayConfig = new AlipayConfig();
        // 封装请求支付信息
        AlipayClient client = new DefaultAlipayClient(alipayConfig.URL, alipayConfig.APPID, alipayConfig.RSA_PRIVATE_KEY, alipayConfig.FORMAT, alipayConfig.CHARSET, alipayConfig.ALIPAY_PUBLIC_KEY, alipayConfig.SIGNTYPE);

        AlipayTradeQueryResponse response = null;

        response = client.execute(request);

        System.out.println("调用成功");
        System.out.println(response.getTradeStatus());
        System.out.println(response);
        if (ObjectUtil.equal(response.getTradeStatus(), "TRADE_SUCCESS")) {
            return "SUCCESS";
        } else {
            return "ERROR";
        }
    }

    @GetMapping("refund")
    public String refund(String orderNo, String refundMoney) throws AlipayApiException {
        AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
        JSONObject bizContent = new JSONObject();
        bizContent.put("out_trade_no", "20220817010101001");  //交易单号
        bizContent.put("refund_amount", "0.5");
        // 分多次退款
        bizContent.put("out_request_no", "111");
        request.setBizContent(bizContent.toJSONString());
        AlipayConfig alipayConfig = new AlipayConfig();
        // 封装请求支付信息
        AlipayClient client = new DefaultAlipayClient(alipayConfig.URL, alipayConfig.APPID, alipayConfig.RSA_PRIVATE_KEY, alipayConfig.FORMAT, alipayConfig.CHARSET, alipayConfig.ALIPAY_PUBLIC_KEY, alipayConfig.SIGNTYPE);

        AlipayTradeRefundResponse response = null;

        response = client.execute(request);

        System.out.println("调用成功");
        System.out.println(response.getCode());
        System.out.println(response);
        if (ObjectUtil.equal(response.getCode(), "10000")) {
            return "SUCCESS";
        } else {
            return "ERROR";
        }
    }


    @GetMapping("refundQuery")
    public String refundQuery(String orderNo, String refundNo) throws AlipayApiException {
        AlipayTradeFastpayRefundQueryRequest request = new AlipayTradeFastpayRefundQueryRequest();
        JSONObject bizContent = new JSONObject();
        bizContent.put("out_trade_no", "20220817010101001");  //交易单号
        bizContent.put("out_request_no", "111");
        request.setBizContent(bizContent.toJSONString());
        AlipayConfig alipayConfig = new AlipayConfig();
        // 封装请求支付信息
        AlipayClient client = new DefaultAlipayClient(alipayConfig.URL, alipayConfig.APPID, alipayConfig.RSA_PRIVATE_KEY, alipayConfig.FORMAT, alipayConfig.CHARSET, alipayConfig.ALIPAY_PUBLIC_KEY, alipayConfig.SIGNTYPE);

        AlipayTradeFastpayRefundQueryResponse response = null;

        response = client.execute(request);

        System.out.println("调用成功");
        System.out.println(response.getRefundStatus());
        System.out.println(response);
        if (ObjectUtil.equal(response.getRefundStatus(), "REFUND_SUCCESS")) {
            return "SUCCESS";
        } else {
            return "ERROR";
        }
    }

}

 

第二种方法

使用easy SDK

<!--方式二 https://mvnrepository.com/artifact/com.alipay.sdk/alipay-easysdk -->
<dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-easysdk</artifactId>
    <version>2.2.0</version>
</dependency>

 

MyAlipayConfig

package com.dreams;
import com.alipay.easysdk.kernel.Config;

import lombok.Data;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @Description:
 * @Version: V1.0
 */
@Configuration
@Data
public class MyAlipayConfig {
    @Bean
    public Config config() {

        AlipayConfig alipayConfig = new AlipayConfig();

        Config config = new Config();
        config.protocol = "https";
        config.gatewayHost = "openapi-xxxxxxxxx.com";
        config.signType = alipayConfig.getSIGNTYPE();
        config.appId = alipayConfig.getAPPID();
        // 为避免私钥随源码泄露,推荐从文件中读取私钥字符串而不是写入源码中
        config.merchantPrivateKey = alipayConfig.getRSA_PRIVATE_KEY();
        //注:证书文件路径支持设置为文件系统中的路径或CLASS_PATH中的路径,优先从文件系统中加载,加载失败后会继续尝试从CLASS_PATH中加载
//        config.merchantCertPath = "<-- 请填写您的应用公钥证书文件路径,例如:/foo/appCertPublicKey_2019051064521003.crt -->";
//        config.alipayCertPath = "<-- 请填写您的支付宝公钥证书文件路径,例如:/foo/alipayCertPublicKey_RSA2.crt -->";
//        config.alipayRootCertPath = "<-- 请填写您的支付宝根证书文件路径,例如:/foo/alipayRootCert.crt -->";
        //注:如果采用非证书模式,则无需赋值上面的三个证书路径,改为赋值如下的支付宝公钥字符串即可
         config.alipayPublicKey = alipayConfig.getALIPAY_PUBLIC_KEY();
        //可设置异步通知接收服务地址(可选)
        config.notifyUrl = "";
        //可设置AES密钥,调用AES加解密相关接口时需要(可选) <-- 请填写您的AES密钥,例如:aa4BtZ4tspm2wnXLb1ThQA== -->
        config.encryptKey = "";
        return config;
    }
}

EasyPayController

package com.dreams;

import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config;
import com.alipay.easysdk.kernel.util.ResponseChecker;
import com.alipay.easysdk.payment.common.models.AlipayTradeQueryResponse;
import com.alipay.easysdk.payment.common.models.AlipayTradeRefundResponse;
import com.alipay.easysdk.payment.facetoface.models.AlipayTradePrecreateResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("easy")
public class EasyPayController {

    @Autowired
    Config config;


    @GetMapping("/alipaytest")
    public String alipaytest(String orderNo) {
        orderNo = "202208170101010233";
        // 1. 设置参数(全局只需设置一次) -- 项目启动时初始化
        Factory.setOptions(config);

        try {
            AlipayTradePrecreateResponse response = Factory.Payment.FaceToFace()
                    .preCreate("餐掌柜-餐饮消费",
                            orderNo, "0.01");

            // 3. 处理响应或异常
            if (ResponseChecker.success(response)) {

                System.out.println("调用成功");
                System.out.println(response.getQrCode());

                //生成Base64格式
                String base64 = QrCodeUtil.
                        generateAsBase64(response.getQrCode(), new QrConfig(300, 300), "png");
                System.out.println(base64);

                return base64;


//                System.out.println("调用成功");
//                System.out.println(response.getHttpBody());
//                return response;
            } else {
                System.err.println("调用失败,原因:" + response.msg + "," + response.subMsg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    @GetMapping("query")
    public AlipayTradeQueryResponse query(String orderNo) {

        // 1. 设置参数(全局只需设置一次) -- 项目启动时初始化
        Factory.setOptions(config);

        try {
            return Factory.Payment.Common().query(orderNo);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @GetMapping("refund")
    public AlipayTradeRefundResponse refund(String orderNo, String refundMoney) {
        // 1. 设置参数(全局只需设置一次) -- 项目启动时初始化
        Factory.setOptions(config);
        try {
            AlipayTradeRefundResponse response = Factory.Payment.Common().refund(orderNo, refundMoney);
            return response;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }
}

 

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇