Commit 7475d6d9 by giaogiao

微信支付

parent 89e293a7
...@@ -5,7 +5,6 @@ import me.chanjar.weixin.mp.api.WxMpService; ...@@ -5,7 +5,6 @@ import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl; import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl; import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
...@@ -18,7 +17,7 @@ import java.util.stream.Collectors; ...@@ -18,7 +17,7 @@ import java.util.stream.Collectors;
* @author Binary Wang(https://github.com/binarywang) * @author Binary Wang(https://github.com/binarywang)
*/ */
@Configuration @Configuration
@EnableConfigurationProperties(WxMpProperties.class) //@EnableConfigurationProperties(WxMpProperties.class)
public class WxMpConfiguration { public class WxMpConfiguration {
// private final LogHandler logHandler; // private final LogHandler logHandler;
// private final NullHandler nullHandler; // private final NullHandler nullHandler;
......
package com.sien.common.controller; //package com.sien.common.controller;
//
import io.geekidea.springbootplus.framework.common.api.ApiResult; //import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.log.annotation.OperationLog; //import io.geekidea.springbootplus.framework.log.annotation.OperationLog;
import io.swagger.annotations.Api; //import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; //import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; //import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresRoles; //import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.web.bind.annotation.GetMapping; //import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; //import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; //import org.springframework.web.bind.annotation.RestController;
//
import java.io.IOException; //import java.io.IOException;
//
/** ///**
* // *
* Hello World Controller // * Hello World Controller
**/ // **/
@Slf4j //@Slf4j
@Api(value = "权限测试", tags = {"APP Hello World2"}) //@Api(value = "权限测试", tags = {"APP Hello World2"})
@RestController //@RestController
@RequestMapping("/app") //@RequestMapping("/app")
public class AppHelloWorldController { //public class AppHelloWorldController {
//
/** // /**
* Hello World // * Hello World
* // *
* @return // * @return
* @throws IOException // * @throws IOException
*/ // */
@GetMapping(value = "/world") // @GetMapping(value = "/world")
@OperationLog(name = "helloWorld") // @OperationLog(name = "helloWorld")
@ApiOperation(value = "helloWorld", response = String.class) // @ApiOperation(value = "helloWorld", response = String.class)
public ApiResult<String> helloWorld() throws IOException { // public ApiResult<String> helloWorld() throws IOException {
log.debug("Hello World...app"); // log.debug("Hello World...app");
return ApiResult.ok("Hello World app"); // return ApiResult.ok("Hello World app");
} // }
//
//
@GetMapping(value = "/needRole") // @GetMapping(value = "/needRole")
@OperationLog(name = "needRole") // @OperationLog(name = "needRole")
@ApiOperation(value = "needRole", response = String.class) // @ApiOperation(value = "needRole", response = String.class)
public ApiResult<String> needRole() throws IOException { // public ApiResult<String> needRole() throws IOException {
log.debug("Hello World...app"); // log.debug("Hello World...app");
return ApiResult.ok("Hello World app"); // return ApiResult.ok("Hello World app");
} // }
//
@GetMapping(value = "/needRoleAdmin") // @GetMapping(value = "/needRoleAdmin")
@OperationLog(name = "needRoleAdmin") // @OperationLog(name = "needRoleAdmin")
@ApiOperation(value = "needRoleAdmin", response = String.class) // @ApiOperation(value = "needRoleAdmin", response = String.class)
@RequiresRoles("app:admin") // @RequiresRoles("app:admin")
public ApiResult<String> needRoleAdmin() throws IOException { // public ApiResult<String> needRoleAdmin() throws IOException {
log.debug("Hello World...app"); // log.debug("Hello World...app");
return ApiResult.ok("Hello World needRoleAdmin"); // return ApiResult.ok("Hello World needRoleAdmin");
} // }
//
@GetMapping(value = "/needRoleAll") // @GetMapping(value = "/needRoleAll")
@OperationLog(name = "needRoleAll") // @OperationLog(name = "needRoleAll")
@ApiOperation(value = "needRoleAll", response = String.class) // @ApiOperation(value = "needRoleAll", response = String.class)
@RequiresRoles("app:all") // @RequiresRoles("app:all")
public ApiResult<String> needRoleAll() throws IOException { // public ApiResult<String> needRoleAll() throws IOException {
log.debug("Hello World...app"); // log.debug("Hello World...app");
return ApiResult.ok("Hello World needRoleAll"); // return ApiResult.ok("Hello World needRoleAll");
} // }
//
@GetMapping(value = "/noRole") // @GetMapping(value = "/noRole")
@OperationLog(name = "noRole") // @OperationLog(name = "noRole")
@ApiOperation(value = "noRole", response = String.class) // @ApiOperation(value = "noRole", response = String.class)
public ApiResult<String> noRole() throws IOException { // public ApiResult<String> noRole() throws IOException {
log.debug("Hello World...app"); // log.debug("Hello World...app");
return ApiResult.ok("Hello World app noRole"); // return ApiResult.ok("Hello World app noRole");
} // }
//
} //}
package com.sien.common.controller; package com.sien.common.controller;
import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
import com.sien.common.param.DonationRecordPageParam; import com.sien.common.param.DonationRecordPageParam;
import com.sien.common.param.app.DonationRecordAdd; import com.sien.common.param.app.DonationRecordAdd;
import com.sien.common.service.DonationRecordService; import com.sien.common.service.DonationRecordService;
...@@ -42,9 +43,9 @@ public class DonationRecordController extends BaseController { ...@@ -42,9 +43,9 @@ public class DonationRecordController extends BaseController {
@PostMapping("/add") @PostMapping("/add")
@OperationLog(name = "我要捐款", type = OperationLogType.ADD) @OperationLog(name = "我要捐款", type = OperationLogType.ADD)
@ApiOperation(value = "我要捐款") @ApiOperation(value = "我要捐款")
public ApiResult<Boolean> addDonationRecord(@Validated(Add.class) @RequestBody DonationRecordAdd donationRecordAdd) throws Exception { public ApiResult<WxPayMpOrderResult> addDonationRecord(@Validated(Add.class) @RequestBody DonationRecordAdd donationRecordAdd) throws Exception {
boolean flag = donationRecordService.add(donationRecordAdd);
return ApiResult.result(flag); return donationRecordService.add(donationRecordAdd);
} }
/** /**
......
...@@ -3,7 +3,6 @@ package com.sien.common.param.app; ...@@ -3,7 +3,6 @@ package com.sien.common.param.app;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
...@@ -23,13 +22,12 @@ public class DonationRecordAdd implements Serializable { ...@@ -23,13 +22,12 @@ public class DonationRecordAdd implements Serializable {
@ApiModelProperty("捐款用途;直接录入字符串: 助学助教,资助病残;慰问孤老,其他") @ApiModelProperty("捐款用途;直接录入字符串: 助学助教,资助病残;慰问孤老,其他")
private String purpose; private String purpose;
@ApiModelProperty("捐款方式;1正常.2匿名,替他人捐款记录在donation_r agent表") @ApiModelProperty("捐款方式;1正常,2匿名")
private Integer way; private Integer way;
@ApiModelProperty("是否替别人捐款") @ApiModelProperty("是否替别人捐款")
private Integer isReplace; private Integer isReplace;
@NotNull(message = "捐款接收用户手机号")
@ApiModelProperty("捐款接收用户手机号") @ApiModelProperty("捐款接收用户手机号")
private String userPhone; private String userPhone;
} }
package com.sien.common.service; package com.sien.common.service;
import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
import com.sien.common.entity.DonationRecord; import com.sien.common.entity.DonationRecord;
import com.sien.common.param.DonationRecordPageParam; import com.sien.common.param.DonationRecordPageParam;
import com.sien.common.param.app.DonationRecordAdd; import com.sien.common.param.app.DonationRecordAdd;
import com.sien.common.vo.DonationRankAndTotal; import com.sien.common.vo.DonationRankAndTotal;
import com.sien.common.vo.DonationRecordQueryVo; import com.sien.common.vo.DonationRecordQueryVo;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.service.BaseService; import io.geekidea.springbootplus.framework.common.service.BaseService;
import io.geekidea.springbootplus.framework.core.pagination.Paging; import io.geekidea.springbootplus.framework.core.pagination.Paging;
...@@ -35,7 +37,7 @@ public interface DonationRecordService extends BaseService<DonationRecord> { ...@@ -35,7 +37,7 @@ public interface DonationRecordService extends BaseService<DonationRecord> {
boolean saveDonationRecord(DonationRecord donationRecord) throws Exception; boolean saveDonationRecord(DonationRecord donationRecord) throws Exception;
boolean add(DonationRecordAdd donationRecordAdd) throws Exception; ApiResult<WxPayMpOrderResult> add(DonationRecordAdd donationRecordAdd) throws Exception;
/** /**
* 修改 * 修改
......
package com.sien.common.service.impl; package com.sien.common.service.impl;
import cn.hutool.captcha.generator.RandomGenerator; import cn.hutool.captcha.generator.RandomGenerator;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.core.metadata.OrderItem;
...@@ -12,17 +11,24 @@ import com.sien.common.entity.DonationRecord; ...@@ -12,17 +11,24 @@ import com.sien.common.entity.DonationRecord;
import com.sien.common.mapper.DonationRecordMapper; import com.sien.common.mapper.DonationRecordMapper;
import com.sien.common.param.DonationRecordPageParam; import com.sien.common.param.DonationRecordPageParam;
import com.sien.common.param.app.DonationRecordAdd; import com.sien.common.param.app.DonationRecordAdd;
import com.sien.common.service.AppUserService;
import com.sien.common.service.DonationRecordService; import com.sien.common.service.DonationRecordService;
import com.sien.common.vo.AppUserQueryVo;
import com.sien.common.vo.DonationRankAndTotal; import com.sien.common.vo.DonationRankAndTotal;
import com.sien.common.vo.DonationRecordQueryVo; import com.sien.common.vo.DonationRecordQueryVo;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl; import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo; import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
import io.geekidea.springbootplus.framework.core.pagination.Paging; import io.geekidea.springbootplus.framework.core.pagination.Paging;
import io.geekidea.springbootplus.framework.shiro.jwt.JwtToken;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
/** /**
* 捐款记录 服务实现类 * 捐款记录 服务实现类
* *
...@@ -33,12 +39,22 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -33,12 +39,22 @@ import org.springframework.transaction.annotation.Transactional;
@Service @Service
public class DonationRecordServiceImpl extends BaseServiceImpl<DonationRecordMapper, DonationRecord> implements DonationRecordService { public class DonationRecordServiceImpl extends BaseServiceImpl<DonationRecordMapper, DonationRecord> implements DonationRecordService {
private static final String BODY = "四恩慈善会-捐款";
private static final String http = "http";
@Autowired @Autowired
private DonationRecordMapper donationRecordMapper; private DonationRecordMapper donationRecordMapper;
@Autowired @Autowired
private WxPayService wxService; private WxPayService wxService;
@Autowired
HttpServletRequest req;
@Autowired
private AppUserService appUserService;
@Override @Override
public DonationRankAndTotal getDonationRankAndTotal(Long userId) { public DonationRankAndTotal getDonationRankAndTotal(Long userId) {
return donationRecordMapper.getDonationRankAndTotal(userId); return donationRecordMapper.getDonationRankAndTotal(userId);
...@@ -50,37 +66,62 @@ public class DonationRecordServiceImpl extends BaseServiceImpl<DonationRecordMap ...@@ -50,37 +66,62 @@ public class DonationRecordServiceImpl extends BaseServiceImpl<DonationRecordMap
return super.save(donationRecord); return super.save(donationRecord);
} }
@Override @Override
public boolean add(DonationRecordAdd donationRecordAdd) throws Exception { public ApiResult<WxPayMpOrderResult> add(DonationRecordAdd donationRecordAdd) throws Exception {
JwtToken jwtToken = (JwtToken) SecurityUtils.getSubject().getPrincipal();
AppUserQueryVo appUserById = appUserService.getAppUserById(jwtToken.getUserId());
WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = new WxPayUnifiedOrderRequest(); WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = new WxPayUnifiedOrderRequest();
wxPayUnifiedOrderRequest.setBody("四恩慈善会-捐款"); String openid = appUserById.getWechatOpenId();
String spbillCreateIp = req.getRemoteAddr();
int totalFee = donationRecordAdd.getMoney().intValue() * 100;
DonationRecord donationRecord = new DonationRecord();
// donationRecord.setId(0L);
donationRecord.setFkUserId(jwtToken.getUserId());
donationRecord.setMoney(donationRecordAdd.getMoney());
donationRecord.setPurpose(donationRecordAdd.getPurpose());
donationRecord.setWay(donationRecordAdd.getWay());
// donationRecord.setRemark("");
// donationRecord.setCreateTime(new Date());
// donationRecord.setUpdateTime(new Date());
donationRecord.setIsReplace(donationRecordAdd.getIsReplace());
WxPayMpOrderResult order = getWxPayMpOrderResult(wxPayUnifiedOrderRequest, BODY, openid, spbillCreateIp, totalFee, http);
return ApiResult.ok(order);
}
private WxPayMpOrderResult getWxPayMpOrderResult(WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest, String body, String openid, String spbillCreateIp, int totalFee, String http) {
wxPayUnifiedOrderRequest.setBody(body);
// 商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号 // 商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
wxPayUnifiedOrderRequest.setOutTradeNo(new RandomGenerator(32).generate()); wxPayUnifiedOrderRequest.setOutTradeNo(new RandomGenerator(32).generate());
//订单总金额,单位为分,详见支付金额 //订单总金额,单位为分,详见支付金额
wxPayUnifiedOrderRequest.setTotalFee(10); wxPayUnifiedOrderRequest.setTotalFee(totalFee);
// APP和网页支付提交用户端ip // APP和网页支付提交用户端ip
wxPayUnifiedOrderRequest.setSpbillCreateIp("111.111.222.33"); wxPayUnifiedOrderRequest.setSpbillCreateIp(spbillCreateIp);
// 接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。 // 接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。
wxPayUnifiedOrderRequest.setNotifyUrl("http"); wxPayUnifiedOrderRequest.setNotifyUrl(http);
wxPayUnifiedOrderRequest.setOpenid("ogXcu56o2ZYi-MgLRkSklKbe-PdU"); wxPayUnifiedOrderRequest.setOpenid(openid);
String jsapi = "JSAPI";
wxPayUnifiedOrderRequest.setTradeType("JSAPI"); wxPayUnifiedOrderRequest.setTradeType(jsapi);
WxPayMpOrderResult order = null; WxPayMpOrderResult order = null;
try { try {
order = this.wxService.createOrder(wxPayUnifiedOrderRequest); order = this.wxService.createOrder(wxPayUnifiedOrderRequest);
} catch (WxPayException e) { } catch (WxPayException e) {
e.printStackTrace(); e.printStackTrace();
} }
return false; return order;
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
......
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