在沙箱环境获取AppId、商户PID、支付私钥/公钥等信息,不需要自己创建应用。地址:https://openhome.alipay.com/develop/sandbox/app
AppId、商户PID:公钥、私钥信息:
POM
<!--支付宝SDK -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.31.48.ALL</version>
</dependency>
<!-- 支付宝SDK依赖的日志-->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
配置Yaml
alipay:
# appid
appId:
# 商户PID,卖家支付宝账号ID
sellerId:
# 私钥 pkcs8格式的,rsc中的私钥:https://openhome.alipay.com/platform/appDaily.htm?tab=info
privateKey:
# 支付宝公钥:https://openhome.alipay.com/platform/appDaily.htm?tab=info
publicKey:
# 服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
notifyUrl: http://zhbexg.natappfree.cc/alipay/notify
# 页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
returnUrl: https://zhbexg.natappfree.cc/alipay/return
# 请求网关地址
# 正式为:"https://openapi.alipay.com/gateway.do"
serverUrl: https://openapi.alipaydev.com/gateway.do
支付配置类
@Component
@Data
@ConfigurationProperties(prefix = "alipay")
public class AlipayConfig {
/**
* 商户appid
*/
private String appId;
/**
* 商户PID,卖家支付宝账号ID
*/
private String sellerId;
/**
* 私钥 pkcs8格式的,rsc中的私钥
*/
private String privateKey;
/**
* 支付宝公钥
*/
private String publicKey;
/**
* 请求网关地址
*/
private String serverUrl;
/**
* 页面跳转同步通知(可以直接返回前端页面、或者通过后端进行跳转)
*/
private String returnUrl;
/**
* 服务器异步通知
*/
private String notifyUrl;
/**
* 获得初始化的AlipayClient
*
* @return
*/
@Bean
public AlipayClient alipayClient() {
// 获得初始化的AlipayClient
return new DefaultAlipayClient(serverUrl, appId, privateKey,
AlipayConstants.FORMAT_JSON, AlipayConstants.CHARSET_UTF8,
publicKey, AlipayConstants.SIGN_TYPE_RSA2);
}
}
定义枚举
@Getter
@AllArgsConstructor
public enum PayTypeEnum {
/**
* PC
*/
PC("pc","FAST_INSTANT_TRADE_PAY"),
/**
* H5
*/
H5("h5","QUICK_WAP_WAY"),
/**
* App
*/
APP("app","QUICK_MSECURITY_PAY");
String type;
String code;
public static String getCode(String type) {
for (PayTypeEnum payType : PayTypeEnum.values()) {
if (payType.getType().equals(type)) {
return payType.getCode();
}
}
return null;
}
}
统一API封装
public class AliPayApi {
public static String h5Pay(AlipayClient alipayClient, String bizContent, String returnUrl, String notifyUrl, String appAuthToken) throws AlipayApiException {
// 相应请求API的request
AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();
// 在公共参数中设置回跳和通知地址
alipayRequest.setReturnUrl(returnUrl);
alipayRequest.setNotifyUrl(notifyUrl);
alipayRequest.setBizContent(bizContent);
// 服务商模式,第三方授权的token
if (appAuthToken != null) {
alipayRequest.putOtherTextParam("app_auth_token", appAuthToken);
}
AlipayTradeWapPayResponse payResponse = alipayClient.pageExecute(alipayRequest);
return readData(payResponse.isSuccess(), payResponse.getBody());
}
public static String appPay(AlipayClient alipayClient, String bizContent, String returnUrl, String notifyUrl, String appAuthToken) throws AlipayApiException {
// 相应请求API的request
AlipayTradeAppPayRequest alipayRequest = new AlipayTradeAppPayRequest();
// 在公共参数中设置回跳和通知地址
alipayRequest.setReturnUrl(returnUrl);
alipayRequest.setNotifyUrl(notifyUrl);
alipayRequest.setBizContent(bizContent);
// 服务商模式,第三方授权的token
if (appAuthToken != null) {
alipayRequest.putOtherTextParam("app_auth_token", appAuthToken);
}
AlipayTradeAppPayResponse payResponse = alipayClient.pageExecute(alipayRequest);
return readData(payResponse.isSuccess(), payResponse.getBody());
}
public static String pcPay(AlipayClient alipayClient, String bizContent, String returnUrl, String notifyUrl, String appAuthToken) throws AlipayApiException {
// 相应请求API的request
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
// 在公共参数中设置回跳和通知地址
alipayRequest.setReturnUrl(returnUrl);
alipayRequest.setNotifyUrl(notifyUrl);
alipayRequest.setBizContent(bizContent.toString());
// 服务商模式,第三方授权的token
if (appAuthToken != null) {
alipayRequest.putOtherTextParam("app_auth_token", appAuthToken);
}
AlipayTradePagePayResponse payResponse = alipayClient.pageExecute(alipayRequest);
return readData(payResponse.isSuccess(), payResponse.getBody());
}
private static String readData(boolean isSuccess, String body) {
if (isSuccess) {
return body;
} else {
throw new RuntimeException(body);
}
}
}
下单接口
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点