阿里云支付
支付宝官方文档说明
https://opendocs.alipay.com/open/203/107091
开发准备
1、登录支付宝开发平台(支付宝账号)
地址: https://open.alipay.com/platform/home.html
2、生成私钥公钥
参照官方文档即可,按照步骤来保存私钥与公钥:官方文档
Java集成支付宝支付
1、加入相关Jar
//官方网站:https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java
//实例:
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.9.28.ALL</version>
</dependency>
2、新建支付宝的Config
package com.example.config;
import org.springframework.context.annotation.Configuration;
/**
* @Description:支付宝接口
*/
@Configuration
public class AliPayConfig {
/**
* netApp映射地址
*/
private static String neturl = "http://localhost:8080";
/**
* 应用的APPID
*/
public static String app_id = "你的APPID";
/**
* 商户私钥,您的PKCS8格式RSA2私钥 刚刚生成的私钥直接复制填写(填写自己利用第三方工具生成的私钥)
*/
public static String merchant_private_key = "你的商品私钥";
/**
* 支付宝公钥,对应APPID下的支付宝公钥(填写沙箱环境中的支付宝公钥)
*/
public static String alipay_public_key = "支付宝公钥,不是公钥";
/**
* 服务器异步通知页面路径 需http://格式的完整路径(支付宝完成后返回的页面)
*/
public static String notify_url = neturl+"/alipay/notify_url";
/**
* 页面跳转同步通知页面路径 需http://格式的完整路径(支付宝完成后返回的页面)
*/
public static String return_url = neturl+"/alipay/return_url";
/**
* 签名方式
*/
public static String sign_type = "RSA2";
/**
* 字符编码方式
*/
public static String charset = "utf-8";
/**
* 支付宝网关
*/
public static String url = "https://openapi.alipaydev.com/gateway.do";
}
3、创建Service业务逻辑处理
调用支付宝的支付接口即将一包数据通知支付SDK的一个接口发送给支付宝的服务器,然后会返回输入密码确认支付的页面
package com.example.service;
import com.alipay.api.AlipayApiException;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradePagePayModel;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.example.config.AliPayConfig;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
/**
* @Description:支付宝业务逻辑接口
*/
@Service
public class AliPayService {
/**
* 支付服务(推荐传入订单号和金额,其余的从其他地方获取)
*/
public String aliPay(){
try {
//1、构建支付数据信息
AlipayTradePagePayModel model = new AlipayTradePagePayModel();
//订单标题
model.setSubject("Test");
//订单号
model.setOutTradeNo("Ab125dasogggiDsd151515");
//订单付款金额
model.setTotalAmount("100");
//订单付款时间
model.setTimeoutExpress("");
//销售产品码(必填)
model.setProductCode("FAST_INSTANT_TRADE_PAY");
//2、构建客户端
DefaultAlipayClient defaultAlipayClient = new DefaultAlipayClient(AliPayConfig.url,
AliPayConfig.app_id,AliPayConfig.merchant_private_key,"json",
AliPayConfig.charset,AliPayConfig.alipay_public_key,AliPayConfig.sign_type);
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
//异步通知后回调
request.setNotifyUrl(AliPayConfig.notify_url);
//支付成功后回调
request.setReturnUrl(AliPayConfig.return_url);
request.setBizModel(model);
String response = defaultAlipayClient.pageExecute(request).getBody();
return response;
}catch (AlipayApiException ex){
ex.printStackTrace();
return null;
}
}
}
4、Controller
@Autowired
AliPayService aliPayService;
@ApiOperation("支付接口")
@GetMapping("/alipay/toPay/pay/{productId}")
public String alipay(@PathVariable(value = "productId")Integer productId){
return aliPayService.aliPay();
}
@ApiOperation("支付宝异步通知接口")
@GetMapping("/alipay/notify_url")
public String notifyAlipay(){
return "这是异步通知接口";
}
@ApiOperation("支付成功之后的回调")
@GetMapping("/alipay/return_url")
public String returnAlipay(){
return "支付成功后的回调";
}
注意:
1、标题Subject
支付宝的Subject(标题)如果不是Post提交方式的话,用中文好像会出问题
@ApiOperation("支付接口")
@GetMapping(value="/alipay/toPay/pay/{productId}",produces="application/xml",
consumes="application/x-www-form-urlencoded")
public String alipay(@PathVariable(value = "productId")Integer productId){
return aliPayService.aliPay();
}
2、三种接口
2.1、网页支付(支持扫码)
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
AlipayTradePagePayModel model = new AlipayTradePagePayModel();
model.setOutTradeNo("Ab125dasogggiDsd151515");
model.setSubject("Test");
model.setTotalAmount("100");
model.setTimeoutExpress("");
model.setProductCode("FAST_INSTANT_TRADE_PAY");
request.setBizModel(model);
String response = defaultAlipayClient.pageExecute(request).getBody();
2.2、移动H5支付(不支持扫码)
AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
AlipayTradeWapPayModel model1 = new AlipayTradeWapPayModel();
model.setOutTradeNo("Ab125dasogggiDsd151515");
model.setSubject("Test");
model.setTotalAmount("100");
model.setTimeoutExpress("");
model.setProductCode("QUICK_WAP_PAY");
request.setBizModel(model);
String response = defaultAlipayClient.pageExecute(request).getBody();
2.3、APP支付
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
AlipayTradeAppPayModel model2 = new AlipayTradeAppPayModel();
model.setOutTradeNo("Ab125dasogggiDsd151515");
model.setSubject("Test");
model.setTotalAmount("100");
model.setTimeoutExpress("");
model.setProductCode("QUICK_WAP_PAY");
request.setBizModel(model);
String response = defaultAlipayClient.pageExecute(request).getBody();