Commit 8c9c8584 authored by liuyang's avatar liuyang

update alipay

parent 654c19e2
......@@ -296,6 +296,11 @@
<artifactId>aliyun-java-sdk-vod</artifactId>
<version>2.15.11</version>
</dependency>
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.13.58.ALL</version>
</dependency>
</dependencies>
......
package com.qkdata.alipay.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
public class AlipayProperties {
@Value("${alipay.appId}")
private String appId;
@Value("${alipay.url}")
private String url;
@Value("${alipay.appPrivateKey}")
private String appPrivateKey;
@Value("${alipay.alipayPublicKey}")
private String alipayPublicKey;
}
package com.qkdata.alipay.controller;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.internal.util.AlipaySignature;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.qkdata.alipay.config.AlipayProperties;
import com.qkdata.biz.enums.ProductOrderStatusEnum;
import com.qkdata.biz.management.service.ProductOrderService;
import com.qkdata.common.base.exception.BusinessException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@Slf4j
@Api
@RestController
@RequestMapping("/alipay")
public class AlipayNotifyController {
@Autowired
private AlipayProperties alipayProperties;
@Autowired
private ProductOrderService orderService;
@ApiOperation(value = "支付回调通知处理")
@PostMapping("/notify/order")
public String parseOrderNotifyResult(HttpServletRequest request) throws WxPayException {
Map<String,String> params = parseParameter(request);
log.info(JSONObject.toJSONString(params));
//商户订单号
String out_trade_no = params.get("out_trade_no");
//支付宝交易号
String trade_no = params.get("trade_no");
//交易状态
String trade_status = params.get("trade_status");
try {
//计算得出通知验证结果
boolean verify_result = AlipaySignature.rsaCheckV1(params, alipayProperties.getAlipayPublicKey(), "UTF-8", "RSA2");
if (verify_result){
//验证成功
if(trade_status.equals("TRADE_SUCCESS")){
orderService.orderComplete(out_trade_no);
} else if (trade_status.equals("TRADE_FINISHED")){
}else if (trade_status.equals("WAIT_BUYER_PAY")){
orderService.updateStatus(out_trade_no, ProductOrderStatusEnum.WAIT_PAY);
}
}else {
//验证失败
throw new BusinessException("非法请求");
}
} catch (AlipayApiException e) {
log.error(e.getMessage(),e);
orderService.updateStatus(out_trade_no, ProductOrderStatusEnum.PAY_FAILD);
return "fail";
}
return "success";
}
private Map<String,String> parseParameter(HttpServletRequest request){
//获取支付宝POST过来反馈信息
Map<String,String> params = new HashMap<String,String>();
Map requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
//乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");
params.put(name, valueStr);
}
return params;
}
}
package com.qkdata.alipay.service;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.*;
import com.alipay.api.domain.AlipayTradeQueryModel;
import com.alipay.api.domain.AlipayTradeWapPayModel;
import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.request.AlipayTradeWapPayRequest;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.alipay.api.response.AlipayTradeWapPayResponse;
import com.qkdata.alipay.config.AlipayProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
@Slf4j
@Service
public class AlipayService {
@Autowired
private AlipayProperties alipayProperties;
@Value("${frontend.domain}")
private String frontendDomain;
private AlipayClient alipayClient;
@PostConstruct
public void init(){
alipayClient = new DefaultAlipayClient(alipayProperties.getUrl(),
alipayProperties.getAppId(),
alipayProperties.getAppPrivateKey(),
AlipayConstants.FORMAT_JSON,
AlipayConstants.CHARSET_UTF8,
alipayProperties.getAlipayPublicKey(),
AlipayConstants.SIGN_TYPE_RSA2);
}
public String prePayOrder(AlipayTradeWapPayModel model) throws AlipayApiException {
AlipayTradeWapPayRequest alipay_request=new AlipayTradeWapPayRequest();
alipay_request.setBizModel(model);
alipay_request.setNotifyUrl(frontendDomain + "/online-edu-backend/alipay/notify/order");
alipay_request.setReturnUrl(frontendDomain + "/online-edu/pay/result");
String form = "";
AlipayTradeWapPayResponse response = alipayClient.pageExecute(alipay_request);
if (response.isSuccess()){
form = response.getBody();
}else {
log.info("Alipay prePay request faild:"+ JSONObject.toJSONString(response));
}
return form;
}
public String queryOrder(String orderNo) throws AlipayApiException {
AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
AlipayTradeQueryModel model = new AlipayTradeQueryModel();
model.setOutTradeNo(orderNo);
request.setBizModel(model);
AlipayTradeQueryResponse response = alipayClient.execute(request);
String result = "";
if (response.isSuccess()){
result = response.getTradeStatus();
}else {
log.info("Alipay trade query faild:"+JSONObject.toJSONString(response));
}
return result;
}
}
package com.qkdata.biz.enums;
/**
* 订单类型
* 产品类型
*/
public enum ProductTypeEnum {
/**
......
......@@ -356,6 +356,10 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
public PageResult<SearchCourseResultModel> search(SearchCourseConditionModel model) {
Page page = new Page(model.getPageIndex(),model.getPageSize());
List<SearchCourseResultModel> list = baseMapper.searchPageList(page,model);
addTagAndDuration(list);
return PageResult.<SearchCourseResultModel>builder().code(CodeEnum.SUCCESS.getCode()).count(page.getTotal()).data(list).build();
}
public void addTagAndDuration(List<SearchCourseResultModel> list){
for (SearchCourseResultModel m : list){
List<CourseTagsModel> tags = tagRelMapper.selectModelList(m.getCourseId());
m.setTags(tags);
......@@ -364,9 +368,7 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
m.setDuration(chaperList.get(0).getDuration());
}
}
return PageResult.<SearchCourseResultModel>builder().code(CodeEnum.SUCCESS.getCode()).count(page.getTotal()).data(list).build();
}
public List<Long> getAllowEnterpriseList(Long courseId) {
List<AllowOrgCoursePO> enterpriseIdList = allowOrgCourseMapper.selectList(Wrappers.<AllowOrgCoursePO>lambdaQuery().eq(AllowOrgCoursePO::getCourseId,courseId));
if (CollUtil.isNotEmpty(enterpriseIdList)){
......
......@@ -5,12 +5,15 @@ import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.alipay.api.AlipayApiException;
import com.alipay.api.domain.AlipayTradeWapPayModel;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
import com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.WxPayService;
import com.qkdata.alipay.service.AlipayService;
import com.qkdata.biz.common.BizConstants;
import com.qkdata.biz.enums.*;
import com.qkdata.biz.management.entity.CoursePO;
......@@ -67,6 +70,8 @@ public class ProductOrderService extends ServiceImpl<ProductOrderMapper, Product
private UserCourseAuthService userCourseAuthService;
@Autowired
private OrgSurplusService orgSurplusService;
@Autowired
private AlipayService alipayService;
private String generateOrderNo() {
DateTime nowDateTime = DateUtil.date();
......@@ -120,9 +125,19 @@ public class ProductOrderService extends ServiceImpl<ProductOrderMapper, Product
throw new BusinessException("微信支付异常");
}
}else if (orderPO.getPayMethod() == PayMethodEnum.AliPay){
//todo
return null;
AlipayTradeWapPayModel payModel = new AlipayTradeWapPayModel();
payModel.setOutTradeNo(orderPO.getOrderNo());
payModel.setSubject(orderPO.getOrderName());
payModel.setTotalAmount(orderPO.getPaymentMoney().toString());
payModel.setQuitUrl(frontendDomain + "/online-edu/pay/result");//todo
payModel.setProductCode("QUICK_WAP_WAY");//todo
try {
String form = alipayService.prePayOrder(payModel);
return form;
} catch (AlipayApiException e) {
log.error(e.getMessage(),e);
throw new BusinessException("支付宝创建订单异常");
}
}
return null;
}
......@@ -206,7 +221,17 @@ public class ProductOrderService extends ServiceImpl<ProductOrderMapper, Product
return ProductOrderStatusEnum.PAY_FAILD;
}
}else if (orderPO.getPayMethod() == PayMethodEnum.AliPay){
return ProductOrderStatusEnum.PAY_FAILD;
try {
String queryResult = alipayService.queryOrder(orderNo);
if (queryResult.equals("TRADE_SUCCESS") || queryResult.equals("TRADE_FINISHED")){
updateStatus(orderNo,ProductOrderStatusEnum.PAY_COMPLETE);
return ProductOrderStatusEnum.PAY_COMPLETE;
}else {
return ProductOrderStatusEnum.PAY_FAILD;
}
} catch (AlipayApiException e) {
throw new BusinessException("查询支付宝订单请求异常");
}
}else {
throw new BusinessException("暂不支持的支付类型");
}
......
package com.qkdata.biz.management.service;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qkdata.biz.management.entity.UserFavoritesPO;
import com.qkdata.biz.management.mapper.CourseTagRelMapper;
import com.qkdata.biz.management.mapper.UserFavoritesMapper;
import com.qkdata.biz.management.vo.CourseChaperModel;
import com.qkdata.biz.management.vo.CourseTagsModel;
import com.qkdata.biz.management.vo.QueryFavoriteCourseModel;
import com.qkdata.biz.web.vo.SearchCourseResultModel;
import com.qkdata.common.base.enums.CodeEnum;
import com.qkdata.common.base.model.PageResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserFavoritesService extends ServiceImpl<UserFavoritesMapper, UserFavoritesPO> {
@Autowired
private CourseService courseService;
public UserFavoritesPO findByUserIdAndCourseId(Long userId, Long courseId) {
return getOne(Wrappers.<UserFavoritesPO>lambdaQuery().eq(UserFavoritesPO::getUserId,userId).eq(UserFavoritesPO::getCourseId,courseId));
......@@ -27,6 +34,7 @@ public class UserFavoritesService extends ServiceImpl<UserFavoritesMapper, UserF
public PageResult<SearchCourseResultModel> queryPageList(QueryFavoriteCourseModel model) {
Page page = new Page(model.getPageIndex(),model.getPageSize());
List<SearchCourseResultModel> list = baseMapper.queryPageList(page,model);
courseService.addTagAndDuration(list);
return PageResult.<SearchCourseResultModel>builder().code(CodeEnum.SUCCESS.getCode()).count(page.getTotal()).data(list).build();
}
}
......@@ -23,3 +23,10 @@ wx:
sms:
api:
v3: http://localhost:9004/sms/api/v3
## 支付宝沙箱环境
alipay:
appId: 2021000117670831
url: https://openapi.alipaydev.com/gateway.do
appPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCJOkoU54PfkfL6LktJzYRvWGQjXptV0Y2w3h35Zf4yjfIKjAXLumiNE00XCWcsR2HWbx23SpcHLlk9peUd1+OKGkk1D4Ts99r/5OimRmVjnF+/pRPtooCMEa1ub6NO2IPTnyz/jxn4gXsGlKRVIMP7Sa9xVodZib4IXWemf7+jysQuG1R5kN9ClkQi+WIv4MExueUJiu2tyhDnuvk/vIDGP3tTbY1myedqx/StZIu2zQRul/KIDKkNUmXVds0F9QbnwK7AdcQwyCyy86XQzytq0GNPqL83YZGEvmH0mJ4nfkWKpyHzOLmkhvkKzOD3rRi8HtV7YUMTWN3v3vHrRE/pAgMBAAECggEAJK/puFcA4ZeSXyJbTHreaio2c2JKoxHoEJ4BY3jKEdfzGrC+p+3JH9ZGKN+BrsvSs1J3nlYZtHjGsP2WGHlsQrKuWboxbm0BJqKbNEDjwFLBImpOvpxQQ6JCPKEqBt1JuRz4Gca3ScHME0FQAdZFrvvPJLzeaKiznmbiXBgRMweRW704Nk2HfM3Uo7x2PS3BiCDdaQ0CXnj63EWHCteyLf4TlgV7qlk0OG9uh9RWm5xRC5/ucscc8oa8BdC/fLdAh7T2XIHFtVhEe+KPYvobJ3lFZlRb/jhKlu79wWXC08zoQrunCesvsB/RrLDTHk0FV29h1qv3BneOLFVDiwj6BQKBgQC9dXcDmRx7kZcA/dDz13RljWo0kmuYQt1h1dI1a7GgqcIdI5jdwOf3vVN7Ctge6YLaG+ptiaXU+SAMN1HQnqzN5DlKn2Q7hN66I+KQjfOYggnDEscOIPEaY/avAsSVZObZu+bK/XDIbypDDl4dELvVQy8ckd4CCCKC8QduqObu8wKBgQC5bKQzIrvtmaEhqbjvP83CZyiGG/GB3zzogJUKA6nm0oKiURHldoA5UozYyvbu3sBBuw81NQYuMMBVBZgO3XIFc7hHVqyn93dHgzOxUFYk2bhliVg9siFg6n3YQWvxIDkP6NGVhCXPLL+0H33rcBCjgQyxJyUa35rAzovFWu7UswKBgQClvrvNxAcs+2N1lJdWm6jSpvLA50+Ftwlh6+OopHyTJ7AQOfIkHf1RuKntvMDx2iuFkGJ4TbFsLj4hMcw7jHV08jJE3Eid4VHQ2k/9UpJHW4wawrSt4ZfMFKPc27kLUWi8FyyDbVFbqBT68PjYyKjqm4n9nobwlBlNIHv2DYFqjQKBgDWUH+oqujTQtI+elDKFtDXdSwddYa6OS/I+3VH0dw6ce2Tdmhc845YstUgbdbjWIqWboKxWMv/71Ed9A1AgSscqhfAPKnqqdgvy7Gfq98lUJAUq55WEOELh3xUy6jbVgceIFa9nbOltW8N3ahIy4ovsSTeTQRR/0h6uUBLp0KMjAoGAHJBJOAnS8csXYIIMArXcxCUgnC90sMQ9DySaTxmtfTVAy7Gs1TnBLRpwWOg55u1KebVTgx5T6vU+KupNi5KAbuK/1so27XXCo7DAY83leJTn9UC4iyOSOhTyNBwvd8uDyT2XrxbesSTBLe1dT3QtXJwT4iBttKky9lsAQDHB13o=
alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhBcqLFQhDttWG9Ffqzf8SNjYP/IzBHxUh9XxHVbUXFtDyCY4L0mZKfOCKKq9q7gC0D3wWEmP+OS4b/5oB7n0DgWExTb2lcStzwzISEyoRagGH38EWH77PgN97tsJw6p06nVTWr+0W60tb1FZeFmCNbqzEpuF22srRztKzfHfoyn8KyL5LcZ15JBPC8uuRT0fSh2txYrjvVuToh8tdMcLEL/LGj1h/E8ol7qSUfHkyQNyeWgP2YrzzmW9QvLuRYUS2ZjhMbbBbGpkq9Bf35kwNG3gvcb0y0cYXV9zR/OLgz0aRF7scDIICUYG9/9o0ezGaH4veaKCUC+8Zx9CqUUdZwIDAQAB
......@@ -126,4 +126,10 @@ aliyun:
endpoint: oss-cn-beijing.aliyuncs.com
bucket: qkdata-online-edu
vod:
region: cn-shanghai
\ No newline at end of file
region: cn-shanghai
alipay:
appId: aaaa
url: https://openapi.alipay.com/gateway.do
appPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCJOkoU54PfkfL6LktJzYRvWGQjXptV0Y2w3h35Zf4yjfIKjAXLumiNE00XCWcsR2HWbx23SpcHLlk9peUd1+OKGkk1D4Ts99r/5OimRmVjnF+/pRPtooCMEa1ub6NO2IPTnyz/jxn4gXsGlKRVIMP7Sa9xVodZib4IXWemf7+jysQuG1R5kN9ClkQi+WIv4MExueUJiu2tyhDnuvk/vIDGP3tTbY1myedqx/StZIu2zQRul/KIDKkNUmXVds0F9QbnwK7AdcQwyCyy86XQzytq0GNPqL83YZGEvmH0mJ4nfkWKpyHzOLmkhvkKzOD3rRi8HtV7YUMTWN3v3vHrRE/pAgMBAAECggEAJK/puFcA4ZeSXyJbTHreaio2c2JKoxHoEJ4BY3jKEdfzGrC+p+3JH9ZGKN+BrsvSs1J3nlYZtHjGsP2WGHlsQrKuWboxbm0BJqKbNEDjwFLBImpOvpxQQ6JCPKEqBt1JuRz4Gca3ScHME0FQAdZFrvvPJLzeaKiznmbiXBgRMweRW704Nk2HfM3Uo7x2PS3BiCDdaQ0CXnj63EWHCteyLf4TlgV7qlk0OG9uh9RWm5xRC5/ucscc8oa8BdC/fLdAh7T2XIHFtVhEe+KPYvobJ3lFZlRb/jhKlu79wWXC08zoQrunCesvsB/RrLDTHk0FV29h1qv3BneOLFVDiwj6BQKBgQC9dXcDmRx7kZcA/dDz13RljWo0kmuYQt1h1dI1a7GgqcIdI5jdwOf3vVN7Ctge6YLaG+ptiaXU+SAMN1HQnqzN5DlKn2Q7hN66I+KQjfOYggnDEscOIPEaY/avAsSVZObZu+bK/XDIbypDDl4dELvVQy8ckd4CCCKC8QduqObu8wKBgQC5bKQzIrvtmaEhqbjvP83CZyiGG/GB3zzogJUKA6nm0oKiURHldoA5UozYyvbu3sBBuw81NQYuMMBVBZgO3XIFc7hHVqyn93dHgzOxUFYk2bhliVg9siFg6n3YQWvxIDkP6NGVhCXPLL+0H33rcBCjgQyxJyUa35rAzovFWu7UswKBgQClvrvNxAcs+2N1lJdWm6jSpvLA50+Ftwlh6+OopHyTJ7AQOfIkHf1RuKntvMDx2iuFkGJ4TbFsLj4hMcw7jHV08jJE3Eid4VHQ2k/9UpJHW4wawrSt4ZfMFKPc27kLUWi8FyyDbVFbqBT68PjYyKjqm4n9nobwlBlNIHv2DYFqjQKBgDWUH+oqujTQtI+elDKFtDXdSwddYa6OS/I+3VH0dw6ce2Tdmhc845YstUgbdbjWIqWboKxWMv/71Ed9A1AgSscqhfAPKnqqdgvy7Gfq98lUJAUq55WEOELh3xUy6jbVgceIFa9nbOltW8N3ahIy4ovsSTeTQRR/0h6uUBLp0KMjAoGAHJBJOAnS8csXYIIMArXcxCUgnC90sMQ9DySaTxmtfTVAy7Gs1TnBLRpwWOg55u1KebVTgx5T6vU+KupNi5KAbuK/1so27XXCo7DAY83leJTn9UC4iyOSOhTyNBwvd8uDyT2XrxbesSTBLe1dT3QtXJwT4iBttKky9lsAQDHB13o=
alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAigumfaT5OI9WRVkZKC6lU95MaxCwNvcyRo+oQlItuhQLJexyIcLk87i4WWEmkkZOu8SLsPazkn18QeMnMwy98Pm1iGZCBmwFnj3UNq0qm5lfmpao945QKskArKVr/kkRMBNNm6INGpsppZAvBaBsiiSw4jrrgTE9AP3SvPQ2rykiZaU5Kcn7nMUueZt2aYIbJrpQ70mcl18sZILDPL0vNQJ1pIFMJN6B/BxSJDfi5Bbh2fiwOu+qVivBfYbCJuHpx2RWGA7jknGsnXHUHfAekAlFhtwGpa+fvpQPoB1jRPmvi8VQGJA+zU6lunxcRxpTEVGr1ryeeTUFIixQY9XNuQIDAQAB
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