4 changed files with 189 additions and 0 deletions
@ -0,0 +1,37 @@ |
|||||
|
package com.bnyer.img.controller; |
||||
|
|
||||
|
import com.bnyer.common.core.utils.StringUtils; |
||||
|
import com.bnyer.common.core.web.controller.BaseController; |
||||
|
import com.bnyer.common.core.web.domain.AjaxResult; |
||||
|
import com.bnyer.img.service.AlipayService; |
||||
|
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.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
|
||||
|
import javax.servlet.http.HttpServletRequest; |
||||
|
|
||||
|
@Api(value = "【图文平台】公共接口",tags = "【图文平台】公共接口") |
||||
|
@RestController |
||||
|
@RequestMapping("/img/common") |
||||
|
@Slf4j |
||||
|
public class CommonController extends BaseController { |
||||
|
|
||||
|
@Autowired |
||||
|
private AlipayService alipayService; |
||||
|
|
||||
|
//@RequiresPermissions("system:config:list")
|
||||
|
@ApiOperation(value = "支付宝回调通知") |
||||
|
@PostMapping("/alipayCallback") |
||||
|
public AjaxResult alipayCallback(@RequestBody HttpServletRequest request) { |
||||
|
String result = alipayService.alipayCallBack(request); |
||||
|
if (StringUtils.isNotBlank(result)){ |
||||
|
return AjaxResult.success(result); |
||||
|
} |
||||
|
return AjaxResult.error(); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,31 @@ |
|||||
|
package com.bnyer.img.dto; |
||||
|
|
||||
|
import io.swagger.annotations.ApiModel; |
||||
|
import io.swagger.annotations.ApiModelProperty; |
||||
|
import lombok.AllArgsConstructor; |
||||
|
import lombok.Getter; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
import lombok.Setter; |
||||
|
|
||||
|
import java.io.Serializable; |
||||
|
|
||||
|
|
||||
|
@Getter |
||||
|
@Setter |
||||
|
@NoArgsConstructor |
||||
|
@AllArgsConstructor |
||||
|
@ApiModel("支付宝支付参数接收类") |
||||
|
public class AlipayParamDto implements Serializable { |
||||
|
|
||||
|
@ApiModelProperty(value="商户订单号") |
||||
|
private String outTradeNo; |
||||
|
|
||||
|
@ApiModelProperty(value="订单名称") |
||||
|
private String subject; |
||||
|
|
||||
|
@ApiModelProperty(value="付款金额") |
||||
|
private String totalAmount; |
||||
|
|
||||
|
@ApiModelProperty(value="备注") |
||||
|
private String body; |
||||
|
} |
||||
@ -0,0 +1,26 @@ |
|||||
|
package com.bnyer.img.service; |
||||
|
|
||||
|
import com.bnyer.img.dto.AlipayParamDto; |
||||
|
|
||||
|
import javax.servlet.http.HttpServletRequest; |
||||
|
|
||||
|
/** |
||||
|
* @author chengkun |
||||
|
* @date 2022/8/30 16:42 |
||||
|
*/ |
||||
|
public interface AlipayService { |
||||
|
|
||||
|
/** |
||||
|
* 支付宝支付 |
||||
|
* @param params 支付参数 |
||||
|
* @return - |
||||
|
*/ |
||||
|
String aliPay(AlipayParamDto params); |
||||
|
|
||||
|
/** |
||||
|
* 支付宝回调 |
||||
|
* @param request 回调请求 |
||||
|
* @return - |
||||
|
*/ |
||||
|
String alipayCallBack(HttpServletRequest request); |
||||
|
} |
||||
@ -0,0 +1,95 @@ |
|||||
|
package com.bnyer.img.service.impl; |
||||
|
|
||||
|
import com.alibaba.fastjson.JSON; |
||||
|
import com.alipay.api.AlipayApiException; |
||||
|
import com.alipay.api.AlipayClient; |
||||
|
import com.alipay.api.DefaultAlipayClient; |
||||
|
import com.alipay.api.internal.util.AlipaySignature; |
||||
|
import com.alipay.api.request.AlipayTradePagePayRequest; |
||||
|
import com.bnyer.img.config.AlipayConfig; |
||||
|
import com.bnyer.img.dto.AlipayParamDto; |
||||
|
import com.bnyer.img.service.AlipayService; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import javax.servlet.http.HttpServletRequest; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.Iterator; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
/** |
||||
|
* @author chengkun |
||||
|
* @date 2022/8/30 17:09 |
||||
|
*/ |
||||
|
@Service |
||||
|
@Slf4j |
||||
|
public class AlipayServiceImpl implements AlipayService { |
||||
|
|
||||
|
@Autowired |
||||
|
private AlipayConfig alipayConfig; |
||||
|
|
||||
|
@Override |
||||
|
public String aliPay(AlipayParamDto params) { |
||||
|
String result = null; |
||||
|
//1、获得初始化的AlipayClient
|
||||
|
AlipayClient client = new DefaultAlipayClient( |
||||
|
alipayConfig.getGatewayUrl(), |
||||
|
alipayConfig.getAppId(), |
||||
|
alipayConfig.getPrivateKey(), |
||||
|
alipayConfig.getCharset(), |
||||
|
alipayConfig.getPublicKey(), |
||||
|
alipayConfig.getSignType()); |
||||
|
//2、设置请求参数
|
||||
|
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); |
||||
|
//页面跳转同步通知页面路径
|
||||
|
request.setReturnUrl(alipayConfig.getReturnUrl()); |
||||
|
// 服务器异步通知页面路径
|
||||
|
request.setNotifyUrl(alipayConfig.getNotifyUrl()); |
||||
|
//封装参数
|
||||
|
request.setBizContent(JSON.toJSONString(client)); |
||||
|
try { |
||||
|
//3、请求支付宝进行付款,并获取支付结果
|
||||
|
result = client.pageExecute(request).getBody(); |
||||
|
} catch (AlipayApiException e) { |
||||
|
log.error("支付宝支付失败!错误原因为:", e); |
||||
|
return null; |
||||
|
} |
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public String alipayCallBack(HttpServletRequest request) { |
||||
|
Map<String, String> result = new HashMap<>(); |
||||
|
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] + ","; |
||||
|
} |
||||
|
//乱码解决,这段代码在出现乱码时使用。
|
||||
|
//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
|
||||
|
result.put(name, valueStr); |
||||
|
} |
||||
|
|
||||
|
String outTradeNo = result.get("out_trade_no"); |
||||
|
String appId = result.get("app_id"); |
||||
|
String sellerId = result.get("out_trade_no"); |
||||
|
String totalAmount = result.get("total_amount"); |
||||
|
log.info("outTradeNo=={},appId=={},sellerId=={},totalAmount=={}",outTradeNo,appId,sellerId,totalAmount); |
||||
|
try { |
||||
|
boolean flag = AlipaySignature.rsaCheckV1(result, alipayConfig.getPublicKey(), alipayConfig.getCharset(), alipayConfig.getSignType()); |
||||
|
if (flag) { |
||||
|
return "success"; |
||||
|
} else { |
||||
|
return "failure"; |
||||
|
} |
||||
|
} catch (AlipayApiException e) { |
||||
|
e.printStackTrace(); |
||||
|
return "failure"; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue