Commit 5b25274c by Java-聂换换

支付宝支付

parent c8b4959f
package com.thinkgem.jeesite.modules.pay.alipay.config;
public class AlipayConfig {
public static final String TIMEOUTEXPRESS = "30m";
}
...@@ -16,7 +16,10 @@ import com.alipay.api.response.AlipayTradeOrderSettleResponse; ...@@ -16,7 +16,10 @@ import com.alipay.api.response.AlipayTradeOrderSettleResponse;
import com.thinkgem.jeesite.common.config.Global; import com.thinkgem.jeesite.common.config.Global;
import com.thinkgem.jeesite.common.mapper.JsonMapper; import com.thinkgem.jeesite.common.mapper.JsonMapper;
import com.thinkgem.jeesite.common.utils.IdGen; import com.thinkgem.jeesite.common.utils.IdGen;
import com.thinkgem.jeesite.modules.pay.alipay.config.AlipayConfig;
import com.thinkgem.jeesite.modules.pay.juhezhong.utils.MakeOrderNum; import com.thinkgem.jeesite.modules.pay.juhezhong.utils.MakeOrderNum;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URLDecoder; import java.net.URLDecoder;
...@@ -27,6 +30,8 @@ import java.util.*; ...@@ -27,6 +30,8 @@ import java.util.*;
import static com.alipay.api.AlipayConstants.APP_ID; import static com.alipay.api.AlipayConstants.APP_ID;
import static com.alipay.api.AlipayConstants.CHARSET; import static com.alipay.api.AlipayConstants.CHARSET;
@Service
@Transactional
public class AlipayService { public class AlipayService {
public JSONObject alipay(JSONObject dto) throws AlipayApiException { public JSONObject alipay(JSONObject dto) throws AlipayApiException {
...@@ -71,7 +76,6 @@ public class AlipayService { ...@@ -71,7 +76,6 @@ public class AlipayService {
public static void main(String[] args) throws AlipayApiException { public static void main(String[] args) throws AlipayApiException {
AlipayService alipayService = new AlipayService(); AlipayService alipayService = new AlipayService();
JSONObject dto = new JSONObject();
// dto.put("out_request_no", MakeOrderNum.makeOrderNum());// 结算请求流水号 开发者自行生成并保证唯一性 // dto.put("out_request_no", MakeOrderNum.makeOrderNum());// 结算请求流水号 开发者自行生成并保证唯一性
// dto.put("trade_no",IdGen.randomBase62(64)); // 支付宝订单号 // dto.put("trade_no",IdGen.randomBase62(64)); // 支付宝订单号
// JSONObject royalty_parameters = new JSONObject(); // 分账明细信息 // JSONObject royalty_parameters = new JSONObject(); // 分账明细信息
...@@ -81,35 +85,41 @@ public class AlipayService { ...@@ -81,35 +85,41 @@ public class AlipayService {
// royalty_parameters.put("amount_percentage","100"); // 分账信息中分账百分比。取值范围为大于0,少于或等于100的整数。 // royalty_parameters.put("amount_percentage","100"); // 分账信息中分账百分比。取值范围为大于0,少于或等于100的整数。
// royalty_parameters.put("desc","desc"); // royalty_parameters.put("desc","desc");
// dto.put("operator_id","operator_id");// 操作员id 可选 // dto.put("operator_id","operator_id");// 操作员id 可选
alipayService.alipay(dto); // alipayService.alipay(dto);
alipayService.aliPay("0.01",new HashMap<>()); JSONObject dto = new JSONObject();
dto.put("body",new HashMap<>());
String payCode = IdGen.randomBase62(64);
String amount = "0.01";
dto.put("payCode",payCode);
dto.put("amount",amount);
dto.put("subject","subject");
alipayService.aliPay(dto);
} }
public String aliPay(String amount,Map<String,Object> body){ public String aliPay(JSONObject dto) throws AlipayApiException {
//实例化客户端 //实例化客户端
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",Global.getConfig("alipay.appid"), Global.getConfig("alipay.private.key") , "json", "UTF-8", Global.getConfig("alipay.public.key"), "RSA2"); AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",Global.getConfig("alipay.appid"), Global.getConfig("alipay.private.key") , "json", "UTF-8", Global.getConfig("alipay.public.key"), "RSA2");
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setPassbackParams(URLEncoder.encode(body.toString()));; //描述信息 添加附加数据 model.setPassbackParams(dto.get("body").toString()); //描述信息 添加附加数据
model.setSubject("魅格"); //商品标题 model.setSubject(dto.getString("subject")); //商品标题
model.setOutTradeNo(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+(int)(Math.random()*90000+10000)); //商家订单编号 model.setOutTradeNo(dto.getString("payCode")); //商家订单编号
model.setTimeoutExpress("30m"); //超时关闭该订单时间 model.setTimeoutExpress(AlipayConfig.TIMEOUTEXPRESS); //超时关闭该订单时间
model.setTotalAmount(amount); //订单总金额 model.setTotalAmount(dto.getString("amount")); //订单总金额
model.setProductCode("QUICK_MSECURITY_PAY"); //销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY model.setProductCode("QUICK_MSECURITY_PAY"); //销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY
request.setBizModel(model); request.setBizModel(model);
request.setNotifyUrl("baidu.com"); //回调地址 request.setNotifyUrl(Global.getConfig("project.access.url")+"/api/pay/aliPayCallback"); //回调地址
String orderStr = ""; String orderStr = "";
try { //这里和普通的接口调用不同,使用的是sdkExecute
//这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request); orderStr = response.getBody();
orderStr = response.getBody(); System.out.println(orderStr);//就是orderString 可以直接给客户端请求,无需再做处理。
System.out.println(orderStr);//就是orderString 可以直接给客户端请求,无需再做处理。
} catch (AlipayApiException e) {
e.printStackTrace();
}
return orderStr; return orderStr;
} }
} }
...@@ -55,7 +55,7 @@ public class PayApiController { ...@@ -55,7 +55,7 @@ public class PayApiController {
try { try {
PayBackDto payBackDto = payService.quickPay(request); PayBackDto payBackDto = payService.quickPay(request);
if(payBackDto.getUrl()!=null && !"".equals(payBackDto.getUrl())){ if((payBackDto.getUrl()!=null && !"".equals(payBackDto.getUrl())) || "0".equals(payBackDto.getIsUrl()) ){
resp.setStatus(ComCode.STATUS_CODE_2000); resp.setStatus(ComCode.STATUS_CODE_2000);
resp.setMessage(ComCode.STATUS_CODE_2000_DESC); resp.setMessage(ComCode.STATUS_CODE_2000_DESC);
resp.setData(payBackDto); resp.setData(payBackDto);
...@@ -79,6 +79,30 @@ public class PayApiController { ...@@ -79,6 +79,30 @@ public class PayApiController {
return resp; return resp;
} }
/**
* 支付宝支付
*
* @param request
* @return
*/
@PostMapping("/aliPay")
public Response aliPay(JuHeZhongPayRequest request) {
Response resp = new Response();
try {
PayBackDto payBackDto = payService.aliPay(request);
resp.setStatus(ComCode.STATUS_CODE_2000);
resp.setMessage(ComCode.STATUS_CODE_2000_DESC);
resp.setData(payBackDto);
}catch (Exception e) {
resp.setStatus(ComCode.STATUS_CODE_9998);
resp.setMessage(ComCode.STATUS_CODE_9998_DESC);
resp.setError(e.getMessage());
e.printStackTrace();
}
return resp;
}
/** /**
* 开卡 * 开卡
* *
...@@ -313,6 +337,75 @@ public class PayApiController { ...@@ -313,6 +337,75 @@ public class PayApiController {
} }
/**
* 回调
* @param request
* @param response
*/
@RequestMapping("/aliPayCallback")
public void aliPayCallback(HttpServletRequest request, HttpServletResponse response) {
System.out.println("。。。。。。支付宝回调。。。。。");
Response responseRetrun = new Response();
Map map=request.getParameterMap();
Set keSet=map.entrySet();
for(Iterator itr = keSet.iterator(); itr.hasNext();){
Map.Entry me=(Map.Entry)itr.next();
Object ok=me.getKey(); //获取参数名
Object ov=me.getValue(); //获取参数值
System.out.println(ok+"="+ok.toString());
System.out.println(ov+"="+ov.toString());
String[] value=new String[1];
if(ov instanceof String[]){
value=(String[])ov;
}else{
value[0]=ov.toString();
}
for(int k=0;k <value.length;k++){
System.out.println(ok+"="+value[k]);
}
}
//设置编码
try {
request.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String orderId=request.getParameter("dsorderid");
String code = request.getParameter("respCode");
if("00".equals(code)){
System.out.println("orderId:"+orderId);
OrderEntity orderEntity = new OrderEntity();
orderEntity.setPayCode(orderId);
try {
orderEntity = payService.aliPayNotifyPay(orderEntity);
} catch (Exception e) {
e.printStackTrace();
}
//返回true 收到请求,停止通知
PrintWriter write= null;
try {
write = response.getWriter();
} catch (IOException e) {
e.printStackTrace();
}
write.print("success");
responseRetrun.setMessage("ok");
responseRetrun.setStatus(ComCode.STATUS_CODE_9998);
responseRetrun.setData(orderEntity);
write.flush();
write.close();
}
}
/** /**
* 获取支付的结果 * 获取支付的结果
* @param orderEntity * @param orderEntity
......
...@@ -10,6 +10,8 @@ public class PayBackDto { ...@@ -10,6 +10,8 @@ public class PayBackDto {
private String message; private String message;
private String payChannel;// private String payChannel;//
private String body;
private String isUrl = "1";// 是否是返回的url 1是 0否 private String isUrl = "1";// 是否是返回的url 1是 0否
public String getUrl() { public String getUrl() {
...@@ -43,4 +45,12 @@ public class PayBackDto { ...@@ -43,4 +45,12 @@ public class PayBackDto {
public void setIsUrl(String isUrl) { public void setIsUrl(String isUrl) {
this.isUrl = isUrl; this.isUrl = isUrl;
} }
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
} }
package com.thinkgem.jeesite.modules.pay.service; package com.thinkgem.jeesite.modules.pay.service;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.thinkgem.jeesite.common.baseBean.Request; import com.thinkgem.jeesite.common.baseBean.Request;
import com.thinkgem.jeesite.common.baseBean.Response; import com.thinkgem.jeesite.common.baseBean.Response;
import com.thinkgem.jeesite.common.config.Global; import com.thinkgem.jeesite.common.config.Global;
...@@ -8,6 +9,7 @@ import com.thinkgem.jeesite.common.constant.ComCode; ...@@ -8,6 +9,7 @@ import com.thinkgem.jeesite.common.constant.ComCode;
import com.thinkgem.jeesite.common.utils.DateUtils; import com.thinkgem.jeesite.common.utils.DateUtils;
import com.thinkgem.jeesite.common.utils.IdGen; import com.thinkgem.jeesite.common.utils.IdGen;
import com.thinkgem.jeesite.modules.commonError.MyException; import com.thinkgem.jeesite.modules.commonError.MyException;
import com.thinkgem.jeesite.modules.pay.alipay.service.AlipayService;
import com.thinkgem.jeesite.modules.pay.dao.PayApiDao; import com.thinkgem.jeesite.modules.pay.dao.PayApiDao;
import com.thinkgem.jeesite.modules.pay.entity.BenefitEntity; import com.thinkgem.jeesite.modules.pay.entity.BenefitEntity;
import com.thinkgem.jeesite.modules.pay.entity.OrderEntity; import com.thinkgem.jeesite.modules.pay.entity.OrderEntity;
...@@ -22,6 +24,8 @@ import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayIntegralSe ...@@ -22,6 +24,8 @@ import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayIntegralSe
import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayJFenService; import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayJFenService;
import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayService; import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayService;
import com.thinkgem.jeesite.modules.pay.juhezhong.utils.MakeOrderNum; import com.thinkgem.jeesite.modules.pay.juhezhong.utils.MakeOrderNum;
import com.thinkgem.jeesite.modules.sys.entity.Dict;
import com.thinkgem.jeesite.modules.sys.utils.DictUtils;
import com.thinkgem.jeesite.modules.user.bean.JuHeZhongPayRequest; import com.thinkgem.jeesite.modules.user.bean.JuHeZhongPayRequest;
import com.thinkgem.jeesite.modules.user.bean.UserRequest; import com.thinkgem.jeesite.modules.user.bean.UserRequest;
import com.thinkgem.jeesite.modules.user.entity.*; import com.thinkgem.jeesite.modules.user.entity.*;
...@@ -63,6 +67,9 @@ public class PayApiService { ...@@ -63,6 +67,9 @@ public class PayApiService {
@Autowired @Autowired
private HuanqiuhuijuService huanqiuhuijuService; private HuanqiuhuijuService huanqiuhuijuService;
@Autowired
private AlipayService alipayService;
@Transactional(readOnly = false) @Transactional(readOnly = false)
public PayBackDto quickPay(JuHeZhongPayRequest request) throws MyException, Exception { public PayBackDto quickPay(JuHeZhongPayRequest request) throws MyException, Exception {
if(ComCode.PAYCHANNEL_HL2.equals(request.getPayChannel())){ if(ComCode.PAYCHANNEL_HL2.equals(request.getPayChannel())){
...@@ -655,6 +662,47 @@ public class PayApiService { ...@@ -655,6 +662,47 @@ public class PayApiService {
/** /**
* 支付宝支付
* @param request
* @return
* @throws AlipayApiException
*/
@Transactional(readOnly = false)
public PayBackDto aliPay(JuHeZhongPayRequest request) throws AlipayApiException {
// 1. 根据入参获取用户详情信息,包括支付卡片信息
UserEntity userEntity = userService.getUserInfo(new Request(request.getSubMerchantCode()));
userEntity = userService.getUserDetailInfo(userEntity);
// 2. 创建支付订单信息,并保存
String code = IdGen.randomBase62(64);
String payNo = ComCode.YYYYMMDDHHMM.format(new Date()) + IdGen.randomBase62(8); // 订单号
String payCode = IdGen.randomBase62(64);
DecimalFormat df = new DecimalFormat("######0.00");
List<Dict> list = DictUtils.getDictList("level_"+request.getLevel());
String amount = "398";
if(list != null && list.size()>0){
amount = list.get(0).getValue();
}
// 创建订单保存
OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode,request.getPayMethod(), "ali", "1",amount , request.getSubject(), "","0", request.getCardCode());
payDao.saveOrderInfo(orderEntity);
// 支付宝支付返回对应支付信息
JSONObject dto = new JSONObject();
dto.put("payCode",payCode);
dto.put("subject",request.getSubject());
dto.put("amount",amount);
dto.put("body",new HashMap<>());
String body = alipayService.aliPay(dto);
PayBackDto payBackDto = new PayBackDto();
payBackDto.setBody(body);
return payBackDto;
}
/**
* 回调 * 回调
* @param orderEntity * @param orderEntity
* @return * @return
...@@ -709,6 +757,26 @@ public class PayApiService { ...@@ -709,6 +757,26 @@ public class PayApiService {
return orderEntity; return orderEntity;
} }
/**
* 回调
* @param orderEntity
* @return
* @throws Exception
*/
@Transactional(readOnly = false)
public OrderEntity aliPayNotifyPay(OrderEntity orderEntity) throws Exception {
QuickDto dto = new QuickDto();
orderEntity.setPayStatus("2");
payDao.updateOrderStatus(orderEntity);
orderEntity = payDao.getOrder(orderEntity);
UserEntity userEntity = new UserEntity();
userEntity.setCode(orderEntity.getUserCode());
userEntity.setLevel("D");
userService.updateUserLevel(userEntity);
return orderEntity;
}
public OrderEntity getOrder(OrderEntity orderEntity){ public OrderEntity getOrder(OrderEntity orderEntity){
return payDao.getOrder(orderEntity); return payDao.getOrder(orderEntity);
......
...@@ -10,6 +10,8 @@ public class JuHeZhongPayRequest extends Request { ...@@ -10,6 +10,8 @@ public class JuHeZhongPayRequest extends Request {
private String payMethod;// private String payMethod;//
private String passwd;// 验证码 private String passwd;// 验证码
private String level;// 升级成的等级
private String payNo;// 订单号 private String payNo;// 订单号
private String cvn2; // 安全吗 private String cvn2; // 安全吗
...@@ -87,4 +89,12 @@ public class JuHeZhongPayRequest extends Request { ...@@ -87,4 +89,12 @@ public class JuHeZhongPayRequest extends Request {
public void setExpireDate(String expireDate) { public void setExpireDate(String expireDate) {
this.expireDate = expireDate; this.expireDate = expireDate;
} }
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
} }
...@@ -712,4 +712,8 @@ public class UserApiService { ...@@ -712,4 +712,8 @@ public class UserApiService {
return userDao.getCardInfoByCode(userEntity); return userDao.getCardInfoByCode(userEntity);
} }
public void updateUserLevel(UserEntity recommendedUser){
userDao.updateUserLevel(recommendedUser);
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment