1、地址: 登录 - 支付宝
2、引入sdk
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.10.218.ALL</version>
</dependency>
3、下载工具包:https://opendocs.alipay.com/common/02kipk
4、生成密钥
5、保存应用私钥到代码里面
6、复制应用公钥到支付宝沙箱 网址:登录 - 支付宝
得到 支付宝公钥 复制到代码里面。JI
/**
* 应用私钥
*/
private String APP_PRIVATE = "XXXX";
/**
* 支付宝公钥
*/
private String ALI_PUBLIC = "XXX";
/**
* appId
*/
private String APP_ID="XXX";
继续编写上面的基本配置类
/**
* 应用私钥
*/
private String APP_PRIVATE = "xxx";
/**
* 支付宝公钥
*/
private String ALI_PUBLIC = "xxx";
/**
* appId
*/
private String APP_ID="xxx";
/**
* 签名算法
*/
private String SIGN_TYPE="RSA2";
/**
* 编码
*/
private String CHAT_SET="UTF-8";
新建
@Configuration
@Data
public class PayUrlConfig {
private String callBack="http://baidu.com";
private String SuccessURL="http://baidu.com";
}
完整配置类ceshi
package com.itlin.link.shop.pay;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import org.springframework.stereotype.Component;
@Component
public class AliPayConfig {
/**
* 应用私钥
*/
private static final String APP_PRIVATE = "xxxx";
/**
* 支付宝公钥
*/
private static final String ALI_PUBLIC = "xxxx";
/**
* appId
*/
private static final String APP_ID="xxxx";
/**
* 支付宝网关
*/
private static final String PAY_GATEWAY="https://openapi-sandbox.dl.alipaydev.com/gateway.do";
/**
* 签名算法
*/
private static final String SIGN_TYPE="RSA2";
/**
* 编码
*/
private static final String CHAT_SET="UTF-8";
/**
* 返回参数格式
*/
public static final String FORMAT="json";
private volatile static AlipayClient instance = null;
/**
* 单例模式获取, 双重锁校验
* @return
*/
public static AlipayClient getInstance(){
if(instance==null){
synchronized (AliPayConfig.class){
if(instance == null){
instance = new DefaultAlipayClient(PAY_GATEWAY,APP_ID,APP_PRIVATE,FORMAT,CHAT_SET,ALI_PUBLIC,SIGN_TYPE);
}
}
}
return instance;
}
}
测试案例
/**
* 测试支付方法
*/
@GetMapping("test_pay")
public void testAlipay(HttpServletResponse response) throws AlipayApiException, IOException {
HashMap<String,String> content = new HashMap<>();
//商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复
String no = UUID.randomUUID().toString();
log.info("订单号:{}",no);
content.put("out_trade_no", no);
content.put("product_code", "FAST_INSTANT_TRADE_PAY");
//订单总金额,单位为元,精确到小数点后两位
content.put("total_amount", String.valueOf("111.99"));
//商品标题/交易标题/订单标题/订单关键字等。 注意:不可使用特殊字符,如 /,=,& 等。
content.put("subject", "杯子");
//商品描述,可空
content.put("body", "好的杯子");
// 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
content.put("timeout_express", "5m");
AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
request.setBizContent(JSON.toJSONString(content));
request.setNotifyUrl("http://baidu.com");
request.setReturnUrl("http://baidu.com");
AlipayTradeWapPayResponse alipayResponse = AliPayConfig.getInstance().pageExecute(request);
if(alipayResponse.isSuccess()){
System.out.println("调用成功");
String form = alipayResponse.getBody();
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write(form);
response.getWriter().flush();
response.getWriter().close();
} else {
System.out.println("调用失败");
}
}