支付 -- 支付宝接口对接

1、支付宝开发平台

  • 扫码登录
https://open.alipay.com/platform/home.htm
  • 打开沙盒测试

  •  沙箱应用 -- 设置公钥

  • 下载公钥私钥生成器
#文档中心 -- 开发文档 -- 下面开发工具 -- 签名工具 -- 左边菜单工具
https://docs.open.alipay.com/291/106097/
  • 将商户应用公钥填写进去,商户应用私钥要好好保存

2、下载沙盒版支付宝

3、下载 sdk 和测试 demo

  • 文档中心 -- 开发文档 -- 电脑网站支付 -- 电脑网站支付 SDK & Demo

4、支付需要的配置信息

  •  APPID

  • 支付宝公钥

  • 应用私钥,之前秘钥生成工具中保存的

5、基本框架搭建

  • 配置依赖
拷贝 alipay-sdk-java20170324180803.jar 到 src/main/resources/lib 目录下
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.7.RELEASE</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.vim</groupId>
  <artifactId>pay-zfb</artifactId>
  <version>1.0-SNAPSHOT</version>

  <dependencies>
    <dependency>
      <groupId>com.alipay</groupId>
      <artifactId>alipay-sdk-java20170324180803</artifactId>
      <version>20170324180803</version>
      <scope>system</scope>
      <systemPath>${project.basedir}/src/main/resources/lib/alipay-sdk-java20170324180803.jar</systemPath>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- log4j -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-log4j</artifactId>
      <version>1.3.8.RELEASE</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
  • 支付宝配置文件 zfb.properties
alipay.appid = 
alipay.privateKey =
alipay.publicKey = 
alipay.signType = RSA2
alipay.charset = UTF-8

alipay.gatewayUrl = https://openapi.alipaydev.com/gateway.do 
alipay.returnUrl = 
alipay.notifyUrl = 
  • 支付宝配置文件类 ZfbConfig
package com.vim.common.properties;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "alipay")
@PropertySource("classpath:zfb.properties")
public class ZfbConfig {

    private String appid;
    private String privateKey;
    private String publicKey;
    private String signType;
    private String charset;

    private String gatewayUrl;
    private String returnUrl;
    private String notifyUrl;

    public String getAppid() {
        return appid;
    }

    public void setAppid(String appid) {
        this.appid = appid;
    }

    public String getPrivateKey() {
        return privateKey;
    }

    public void setPrivateKey(String privateKey) {
        this.privateKey = privateKey;
    }

    public String getPublicKey() {
        return publicKey;
    }

    public void setPublicKey(String publicKey) {
        this.publicKey = publicKey;
    }

    public String getSignType() {
        return signType;
    }

    public void setSignType(String signType) {
        this.signType = signType;
    }

    public String getCharset() {
        return charset;
    }

    public void setCharset(String charset) {
        this.charset = charset;
    }

    public String getGatewayUrl() {
        return gatewayUrl;
    }

    public void setGatewayUrl(String gatewayUrl) {
        this.gatewayUrl = gatewayUrl;
    }

    public String getReturnUrl() {
        return returnUrl;
    }

    public void setReturnUrl(String returnUrl) {
        this.returnUrl = returnUrl;
    }

    public String getNotifyUrl() {
        return notifyUrl;
    }

    public void setNotifyUrl(String notifyUrl) {
        this.notifyUrl = notifyUrl;
    }
}
  • 配置启动类
package com.vim;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;

@SpringBootApplication
@EnableConfigurationProperties
public class PayApplication {
    public static void main( String[] args ) {
        SpringApplication.run(PayApplication.class, args);
    }
}

6、电脑网站支付

package com.vim.modules.web.controller;

import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.domain.AlipayTradeFastpayRefundQueryModel;
import com.alipay.api.domain.AlipayTradeQueryModel;
import com.alipay.api.domain.AlipayTradeRefundModel;
import com.alipay.api.request.AlipayTradeFastpayRefundQueryRequest;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.vim.common.properties.ZfbConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class AlipayTradeWapPayController {

    @Autowired
    private ZfbConfig config;

    /**
     * 发起网站支付
     */
    @RequestMapping(value = "/trade/wap/pay", produces = MediaType.TEXT_HTML_VALUE)
    @ResponseBody
    public String alipayTradeWapPay() {
        try {
            //获得初始化的AlipayClient
            AlipayClient alipayClient = new DefaultAlipayClient(config.getGatewayUrl(), config.getAppid(), config.getPrivateKey(), "json", config.getCharset(), config.getPublicKey(), config.getSignType());

            //设置请求参数
            AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
            alipayRequest.setReturnUrl(config.getReturnUrl());
            alipayRequest.setNotifyUrl(config.getNotifyUrl());

            //商户订单号,商户网站订单系统中唯一订单号,必填
            String out_trade_no = "201907041136000001";
            //付款金额,必填
            String total_amount = "1";
            //订单名称,必填
            String subject = "201907041136000001";
            //商品描述,可空
            String body = "201907041136000001";

            AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
            model.setOutTradeNo(out_trade_no);
            model.setTotalAmount(total_amount);
            model.setSubject(subject);
            model.setBody(body);
            model.setTimeoutExpress("30m");
            model.setProductCode("FAST_INSTANT_TRADE_PAY");
            alipayRequest.setBizModel(model);

            return alipayClient.pageExecute(alipayRequest).getBody();
        }catch (Exception e){
            e.printStackTrace();
        }
        return "";
    }

    /**
     * 订单查询
     */
    @RequestMapping(value = "/trade/wap/query")
    @ResponseBody
    public String alipayTradeWapQuery() {
        try {
            //获得初始化的AlipayClient
            AlipayClient alipayClient = new DefaultAlipayClient(config.getGatewayUrl(), config.getAppid(), config.getPrivateKey(), "json", config.getCharset(), config.getPublicKey(), config.getSignType());

            //设置请求参数
            AlipayTradeQueryRequest alipayRequest = new AlipayTradeQueryRequest();
            //商户订单号,商户网站订单系统中唯一订单号
            String out_trade_no = "201907041136000001";

            AlipayTradeQueryModel model = new AlipayTradeQueryModel();
            model.setOutTradeNo(out_trade_no);

            alipayRequest.setBizModel(model);

            return alipayClient.execute(alipayRequest).getBody();
        }catch (Exception e){
            e.printStackTrace();
        }
        return "";
    }

    /**
     * 订单退款
     */
    @RequestMapping(value = "/trade/wap/refund")
    @ResponseBody
    public String alipayTradeWapRefund() {
        try {
            //获得初始化的AlipayClient
            AlipayClient alipayClient = new DefaultAlipayClient(config.getGatewayUrl(), config.getAppid(), config.getPrivateKey(), "json", config.getCharset(), config.getPublicKey(), config.getSignType());

            //设置请求参数
            AlipayTradeRefundRequest alipayRequest = new AlipayTradeRefundRequest();
            //商户订单号,商户网站订单系统中唯一订单号
            String out_trade_no = "201907041136000001";
            //支付宝交易号
            String trade_no = "2019070422001478251000019038";
            //请二选一设置
            //需要退款的金额,该金额不能大于订单金额,必填
            String refund_amount = "0.5";
            //退款的原因说明
            String refund_reason = "测试退款";
            //标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传
            String out_request_no = "201907041136100001";

            AlipayTradeRefundModel model = new AlipayTradeRefundModel();
            model.setOutTradeNo(out_trade_no);
            model.setTradeNo(trade_no);
            model.setRefundAmount(refund_amount);
            model.setRefundReason(refund_reason);
            model.setOutRequestNo(out_request_no);
            alipayRequest.setBizModel(model);

            return alipayClient.execute(alipayRequest).getBody();
        }catch (Exception e){
            e.printStackTrace();
        }
        return "";
    }

    /**
     * 订单退款查询
     */
    @RequestMapping(value = "/trade/wap/refund/query")
    @ResponseBody
    public String alipayTradeWapRefundQuery() {
        try {
            //获得初始化的AlipayClient
            AlipayClient alipayClient = new DefaultAlipayClient(config.getGatewayUrl(), config.getAppid(), config.getPrivateKey(), "json", config.getCharset(), config.getPublicKey(), config.getSignType());

            //设置请求参数
            AlipayTradeFastpayRefundQueryRequest alipayRequest = new AlipayTradeFastpayRefundQueryRequest();
            //商户订单号,商户网站订单系统中唯一订单号
            String out_trade_no = "201907041136000001";
            String out_request_no = "201907041136100001";

            AlipayTradeFastpayRefundQueryModel model = new AlipayTradeFastpayRefundQueryModel();
            model.setOutTradeNo(out_trade_no);
            model.setOutRequestNo(out_request_no);
            alipayRequest.setBizModel(model);

            return alipayClient.execute(alipayRequest).getBody();
        }catch (Exception e){
            e.printStackTrace();
        }
        return "";
    }
}

猜你喜欢

转载自blog.csdn.net/sky_eyeland/article/details/94594059