package com.ruoyi.order.util.alipay.util;
|
|
|
import com.alipay.api.AlipayApiException;
|
import com.alipay.api.AlipayClient;
|
import com.alipay.api.DefaultAlipayClient;
|
import com.alipay.api.domain.AlipayTradeAppPayModel;
|
import com.alipay.api.domain.AlipayTradeCreateModel;
|
import com.alipay.api.request.AlipayTradeAppPayRequest;
|
import com.alipay.api.request.AlipayTradeCreateRequest;
|
import com.alipay.api.response.AlipayTradeCreateResponse;
|
import com.jpay.alipay.AliPayApi;
|
import com.jpay.alipay.AliPayApiConfig;
|
import com.jpay.alipay.AliPayApiConfigKit;
|
import com.ruoyi.order.util.alipay.config.AlipayConfig;
|
import java.io.UnsupportedEncodingException;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
|
/**
|
* 支付宝签名工具类<
|
*/
|
@SuppressWarnings("unused")
|
public class PayDemoActivity {
|
|
/** 支付宝参数配置项 */
|
public static String serverUrl = "https://openapi.alipay.com/gateway.do";
|
public static String format = "json";
|
public static String charset = "UTF-8";
|
public static String signType = "RSA2";
|
|
public static String APP_ID = AlipayConfig.app_id;
|
public static String APP_PRIVATE_KEY = AlipayConfig.private_key;
|
public static String ALIPAY_PUBLIC_KEY = AlipayConfig.ali_public_key;
|
public static String NOTIFY_URL = AlipayConfig.notify_url;
|
|
//实例化客户端
|
private static AlipayClient alipayClient = new DefaultAlipayClient(serverUrl, APP_ID, APP_PRIVATE_KEY, format, charset, ALIPAY_PUBLIC_KEY, signType);
|
|
|
private static AliPayApiConfig aliPayApiConfig = null;
|
|
static {
|
aliPayApiConfig = AliPayApiConfig.New()
|
.setAppId(APP_ID)
|
.setCharset("UTF-8")
|
.setPrivateKey(APP_PRIVATE_KEY)
|
.setAlipayPublicKey(ALIPAY_PUBLIC_KEY)
|
.setServiceUrl("https://openapi.alipay.com/gateway.do")
|
.setSignType("RSA2")
|
.build();
|
}
|
|
/**
|
* @throws AlipayApiException
|
* @throws UnsupportedEncodingException
|
* @throws UnsupportedEncodingException
|
* @throws AlipayApiException
|
*
|
* 方法功能说明:支付宝2.0 app支付
|
* 创建:2017年2月10日 by tzj
|
* 修改:日期 by 修改者
|
* 修改内容:
|
* @参数: @param subject
|
* @参数: @param body
|
* @参数: @param price
|
* @参数: @param out_trade_no
|
* @参数: @param notify_url
|
* @参数: @return
|
* @return Map<String,Object>
|
* @throws
|
*/
|
public static Map<String, Object> appPay(String subject, String body, Double price, String out_trade_no) throws UnsupportedEncodingException, AlipayApiException{
|
|
String outtradeno = out_trade_no;
|
String total_amount = price+"";
|
|
/*********** 测试数据(仅供测试) ************/
|
// subject = "subject"+DateUtil.getTodayDate("yyMMssHHmmss");
|
// total_amount = "0.01";
|
|
/*********** 测试数据(仅供测试)end ************/
|
|
Map<String, Object> map = new HashMap<>();
|
try {
|
|
AliPayApiConfigKit.setThreadLocalAppId(APP_ID);
|
AliPayApiConfigKit.setThreadLocalAliPayApiConfig(aliPayApiConfig);
|
|
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
|
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
|
//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
|
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
|
model.setBody(body);
|
model.setSubject(subject);
|
model.setOutTradeNo(outtradeno);
|
model.setTimeoutExpress("30m");
|
model.setTotalAmount(total_amount);
|
model.setProductCode("QUICK_MSECURITY_PAY");
|
request.setBizModel(model);
|
request.setNotifyUrl(NOTIFY_URL);
|
// 这里和普通的接口调用不同,使用的是sdkExecute
|
String orderInfo = "";
|
orderInfo = AliPayApi.startAppPay(model, NOTIFY_URL);
|
|
|
map.put("orderInfo", orderInfo);
|
map.put("Type",2);
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return map;
|
}
|
|
public static Map<String, Object> jsApiPay(String subject, String body, Double price,
|
String out_trade_no, String openId) throws AlipayApiException {
|
// 构造请求参数以调用接口
|
AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
|
AlipayTradeCreateModel model = new AlipayTradeCreateModel();
|
|
// 设置商户订单号
|
model.setOutTradeNo(out_trade_no);
|
|
// 设置产品码
|
model.setProductCode("JSAPI_PAY");
|
|
// 设置小程序支付中
|
model.setOpAppId(APP_ID);
|
|
// 设置订单总金额
|
model.setTotalAmount(price.toString());
|
|
// 设置业务扩展参数
|
// ExtendParams extendParams = new ExtendParams();
|
// extendParams.setTradeComponentOrderId("2023060801502300000008810000005657");
|
// model.setExtendParams(extendParams);
|
|
// 设置可打折金额
|
// model.setDiscountableAmount("80.00");
|
|
// 设置订单标题
|
model.setSubject(subject);
|
|
// 设置订单附加信息
|
model.setBody(body);
|
|
// uid参数未来计划废弃,存量商户可继续使用,新商户请使用openid。请根据应用-开发配置-openid配置选择支持的字段。
|
// model.setBuyerId("2088102146225135");
|
|
// 设置买家支付宝用户唯一标识
|
model.setBuyerOpenId(openId);
|
|
// 设置商户门店编号
|
// model.setStoreId("NJ_001");
|
|
request.setBizModel(model);
|
request.setNotifyUrl(NOTIFY_URL);
|
// 第三方代调用模式下请设置app_auth_token
|
// request.putOtherTextParam("app_auth_token", "<-- 请填写应用授权令牌 -->");
|
|
AlipayTradeCreateResponse response = alipayClient.execute(request);
|
System.out.println(response.getBody());
|
Map<String, Object> map = new HashMap<>();
|
if (response.isSuccess()) {
|
System.out.println("调用成功");
|
|
map.put("outTradeNo", response.getOutTradeNo());
|
map.put("tradeNo", response.getTradeNo());
|
map.put("Type", 2);
|
} else {
|
System.out.println("调用失败");
|
// sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接
|
// String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response);
|
// System.out.println(diagnosisUrl);
|
}
|
return map;
|
}
|
|
}
|