@ApiOperation(value= "支付宝预支付", httpMethod= "POST")
@PostMapping(value= "/aliPayReady", produces= "application/json;charset=UTF-8")
@ResponseBody
public RespBaseDto aliPayReady(
@RequestBody AlipayVo info) throws AlipayApiException {
String out_trade_no= info.getOut_trade_no();
String total_amount= info.getTotal_amount();
RespBaseDto baseDto= new RespBaseDto<>();
String orderStr= "";
try {
FxSdCarriageOrder order= orderService.selectOrderByOrderSn(Long.parseLong(out_trade_no));
if(order!=null&&order.getStatus()==1){
BigDecimal orderTotalAccount= order.getDispatchPrice();
int i= orderTotalAccount.compareTo(new BigDecimal(total_amount));
if(i==0){
//传入订单金额正确
Map orderMap= new LinkedHashMap(); //订单实体
Map bizModel= new LinkedHashMap(); //公共实体
// 商户订单号,商户网站订单系统中唯一订单号,必填
orderMap.put("out_trade_no",out_trade_no);
// 订单名称,必填
orderMap.put("subject","手机网站支付购买游戏币");
// 付款金额,必填
orderMap.put("total_amount",total_amount);
// 商品描述,可空
orderMap.put("body","您购买游戏币"+total_amount+"元");
// 超时时间 可空
orderMap.put("timeout_express","5m");
// 销售产品码 必填
orderMap.put("product_code","QUICK_MSECURITY_PAY");
/****** 2.商品参数封装结束 *****/
/******--------------- 3.公共参数封装 开始 ------------------------*****/ //支付宝用
//1.商户appid
bizModel.put("app_id",AlipayConfig.APPID);
//2.请求网关地址
bizModel.put("method",AlipayConfig.URL);
//3.请求格式
bizModel.put("format",AlipayConfig.FORMAT);
//4.回调地址
bizModel.put("return_url",AlipayConfig.return_url);
//5.私钥
bizModel.put("private_key",AlipayConfig.ALIPAY_PRIVATE_KEY);
//6.商家id
bizModel.put("seller_id","2088102170411333");
//7.加密格式
bizModel.put("sign_type",AlipayConfig.SIGNTYPE+"");
//8.回调地址
bizModel.put("notify_url",AlipayConfig.notify_url);
/******--------------- 3.公共参数封装 结束 ------------------------*****/
//实例化客户端
AlipayClient alipayClient= new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",
AlipayConfig.APPID, AlipayConfig.ALIPAY_PRIVATE_KEY, "json", AlipayConfig.CHARSET, AlipayConfig.ALIPAY_KEY, "RSA2");
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
AlipayTradeAppPayRequest request= new AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeAppPayModel model= new AlipayTradeAppPayModel();
model.setBody("帮我买-帮我取-帮我送");
model.setSubject("成都小短腿");
model.setOutTradeNo(out_trade_no);//更换为自己的订单编号
model.setTimeoutExpress("5m");
model.setTotalAmount(total_amount);//订单价格
model.setProductCode("QUICK_MSECURITY_PAY");
request.setBizModel(model);
request.setNotifyUrl("");//回调地址不可以带参数,这里的设置有效使用
//String orderStr = "";
try {
//这里和普通的接口调用不同,使用的是sdkExecute
AlipayTradeAppPayResponse response= alipayClient.sdkExecute(request);
orderStr= response.getBody();
System.out.println(orderStr);//就是orderString 可以直接给客户端请求,无需再做处理。
} catch (AlipayApiException e) {
e.printStackTrace();
}
baseDto.setMessage("订单生成成功");
baseDto.setState(200);
baseDto.setData(orderStr);
//订单号不存在
}else{
baseDto.setMessage(EWarning.OrderAccountError.getName());
baseDto.setState(EWarning.OrderAccountError.getValue());
baseDto.setData(orderStr);
}
}else{
baseDto.setMessage(EWarning.NoOrderInfo.getName());
baseDto.setState(EWarning.NoOrderInfo.getValue());
baseDto.setData(orderStr);
}
} catch (Exception e) {
baseDto.setMessage("订单生成失败");
baseDto.setState(400);
baseDto.setData(orderStr);
}
return baseDto;
}