|
@@ -55,7 +55,7 @@ import java.util.concurrent.TimeUnit;
|
|
|
@Slf4j
|
|
|
@Controller
|
|
|
@RequestMapping("/wechat/app")
|
|
|
-@Api(description = "微信小程序api服务")
|
|
|
+@Api(tags = "微信小程序api服务")
|
|
|
public class WechatAppController extends BaseController {
|
|
|
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
|
|
|
|
@@ -73,7 +73,7 @@ public class WechatAppController extends BaseController {
|
|
|
@ApiOperation(value = "微信登录", notes = "微信登录")
|
|
|
@PostMapping("/login")
|
|
|
@ResponseBody
|
|
|
- public ResponseBase login(@RequestBody LoginRequest request) {
|
|
|
+ public ResponseBase<Map<String, String>> login(@RequestBody LoginRequest request) {
|
|
|
String code = request.getCode();
|
|
|
if (StringUtils.isBlank(code)) {
|
|
|
return resultVOError("请输入code错误!");
|
|
@@ -134,251 +134,251 @@ public class WechatAppController extends BaseController {
|
|
|
return resultVOSuccess();
|
|
|
}
|
|
|
|
|
|
- private Map<String, Object> getStringObjectMap(String customerId) {
|
|
|
- CustomerInfoForm customerInfoForm = customerInfoService.queryByPrimaryKey(customerId);
|
|
|
- CustomerInfo data = BeanCopyUtil.convertBean(customerInfoForm, CustomerInfo.class);
|
|
|
-
|
|
|
- String guid = data.getGuid();
|
|
|
- Map<String, Object> resultMap = new HashMap<>();
|
|
|
- ValueOperations<String, Object> operations = redisTemplate.opsForValue();
|
|
|
- Token token = TokenUtil.createJwtToken(guid, GlobleConstant.CURRENT_MEMBER);
|
|
|
- String accessToken = token.getAccessToken();
|
|
|
- resultMap.put("accessToken", accessToken);
|
|
|
- resultMap.put(WECHAT_USER_INFO, data);
|
|
|
- operations.set(token.getAccessToken(), resultMap, GlobleConstant.TOKEN_EXPIRES_SECOND, TimeUnit.SECONDS);
|
|
|
- return resultMap;
|
|
|
- }
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private RedisTemplate redisTemplate;
|
|
|
-
|
|
|
- private static final String WECHAT_USER_INFO = "wechatUserInfo";
|
|
|
-
|
|
|
- @GetMapping("dologin")
|
|
|
- @ResponseBody
|
|
|
- public ResponseBase login(String customerId) {
|
|
|
- Map<String, Object> resultMap = getStringObjectMap(customerId);
|
|
|
- return responseSuccess(new ResultVO(ResultEnum.SUCCESS, resultMap));
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- private MyWxMpUser getMyWxMpUser(WxMaUserInfo userInfo) {
|
|
|
- String openId = userInfo.getOpenId();
|
|
|
- String unionId = userInfo.getUnionId();
|
|
|
- String nickName = userInfo.getNickName();
|
|
|
- String gender = userInfo.getGender();
|
|
|
- String avatarUrl = userInfo.getAvatarUrl();
|
|
|
- MyWxMpUser myWxMpUser = new MyWxMpUser();
|
|
|
- myWxMpUser.setOpenId(openId);
|
|
|
- myWxMpUser.setUnionId(unionId);
|
|
|
- myWxMpUser.setNickname(nickName);
|
|
|
- myWxMpUser.setHeadImgUrl(avatarUrl);
|
|
|
- myWxMpUser.setSex(1);
|
|
|
- return myWxMpUser;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Value("${wx.pay.wxpayAppcallbackurl}")
|
|
|
- private String wxpayCallbackUrl;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private WxPayService wxPayService;
|
|
|
-
|
|
|
-
|
|
|
- @PostMapping("/pay")
|
|
|
- @AuthCarbonValidate
|
|
|
- @ResponseBody
|
|
|
- public ResponseBase pay(HttpServletRequest request) {
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
- WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
|
|
|
-
|
|
|
- String s = UUIDUtils.randomUUID();
|
|
|
-
|
|
|
- orderRequest.setNonceStr(s);
|
|
|
-
|
|
|
- orderRequest.setBody("碳汇扶贫!");
|
|
|
-
|
|
|
- GeneratorIdUtils generatorIdUtils = new GeneratorIdUtils();
|
|
|
- String orderNum = generatorIdUtils.nextId();
|
|
|
- log.info("orderNum:" + orderNum);
|
|
|
-
|
|
|
- orderRequest.setOutTradeNo(orderNum);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
-
|
|
|
- String ipAddress = getIpAddress(request);
|
|
|
- orderRequest.setSpbillCreateIp(ipAddress);
|
|
|
-
|
|
|
- log.info("wxpayCallbackUrl=================>{}", wxpayCallbackUrl);
|
|
|
- orderRequest.setNotifyUrl(wxpayCallbackUrl);
|
|
|
-
|
|
|
- orderRequest.setTradeType(WxPayConstants.TradeType.APP);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- Object unOrder = null;
|
|
|
- try {
|
|
|
- unOrder = wxPayService.createOrder(orderRequest);
|
|
|
- } catch (WxPayException e) {
|
|
|
-
|
|
|
- log.error(e.getMessage());
|
|
|
-
|
|
|
- ResultVO resultVO = new ResultVO();
|
|
|
- resultVO.setCode(1);
|
|
|
- resultVO.setMsg("微信支付失败!");
|
|
|
- return responseError(resultVO);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- ResultVO resultVO = new ResultVO();
|
|
|
- resultVO.setCode(0);
|
|
|
- resultVO.setData(unOrder);
|
|
|
- return responseSuccess(resultVO);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- * wx支付成功回调接口
|
|
|
- *
|
|
|
- * @param request
|
|
|
- * @param response
|
|
|
- * @throws IOException
|
|
|
- */
|
|
|
- @RequestMapping("payResult")
|
|
|
- public void payResult(HttpServletRequest request, HttpServletResponse response) throws IOException {
|
|
|
- log.info("微信支付返回通知函数开始---------------------");
|
|
|
-
|
|
|
- InputStream inStream = request.getInputStream();
|
|
|
- ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
|
|
|
- byte[] buffer = new byte[1024];
|
|
|
- int len = 0;
|
|
|
- while ((len = inStream.read(buffer)) != -1) {
|
|
|
- outSteam.write(buffer, 0, len);
|
|
|
- }
|
|
|
- outSteam.close();
|
|
|
- inStream.close();
|
|
|
- String result = new String(outSteam.toByteArray(), "utf-8");
|
|
|
- boolean isPayOk = false;
|
|
|
- WxPayOrderNotifyResult wxPayOrderNotifyResult = null;
|
|
|
-
|
|
|
- try {
|
|
|
- wxPayOrderNotifyResult = wxPayService.parseOrderNotifyResult(result);
|
|
|
- if ("SUCCESS".equals(wxPayOrderNotifyResult.getResultCode())) {
|
|
|
- isPayOk = true;
|
|
|
- }
|
|
|
- log.info("解析数据:" + wxPayOrderNotifyResult.toString());
|
|
|
- } catch (WxPayException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- String noticeStr = "";
|
|
|
-
|
|
|
- PrintWriter writer = response.getWriter();
|
|
|
- if (isPayOk) {
|
|
|
-
|
|
|
-
|
|
|
- System.out.println("===============付款成功,业务开始处理==============");
|
|
|
- String orderNum = wxPayOrderNotifyResult.getOutTradeNo();
|
|
|
- log.info("orderNum:" + orderNum);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- * 自己的业务
|
|
|
- */
|
|
|
- System.out.println("===============付款成功,业务处理完毕==============");
|
|
|
-
|
|
|
- noticeStr = setXML("SUCCESS", "OK");
|
|
|
- log.info("收到通知返回给微信api信息:-----------" + noticeStr);
|
|
|
- writer.write(noticeStr);
|
|
|
- writer.flush();
|
|
|
- } else {
|
|
|
-
|
|
|
- noticeStr = setXML("FAIL", "");
|
|
|
- writer.write(noticeStr);
|
|
|
- writer.flush();
|
|
|
- System.out.println("===============支付失败==============");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- *
|
|
|
- *
|
|
|
- * @return
|
|
|
- * @throws GeneralSecurityException
|
|
|
- */
|
|
|
- private void insertPayOrder(Object object) {
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- public static String setXML(String return_code, String return_msg) {
|
|
|
- return "<xml><return_code><![CDATA[" + return_code + "]]></return_code><return_msg><![CDATA[" + return_msg + "]]></return_msg></xml>";
|
|
|
- }
|
|
|
-
|
|
|
- public static String getIpAddress(HttpServletRequest request) {
|
|
|
- String ip = request.getHeader("x-forwarded-for");
|
|
|
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
|
|
- ip = request.getHeader("Proxy-Client-IP");
|
|
|
- }
|
|
|
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
|
|
- ip = request.getHeader("WL-Proxy-Client-IP");
|
|
|
- }
|
|
|
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
|
|
- ip = request.getHeader("HTTP_CLIENT_IP");
|
|
|
- }
|
|
|
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
|
|
- ip = request.getHeader("HTTP_X_FORWARDED_FOR");
|
|
|
- }
|
|
|
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
|
|
- ip = request.getRemoteAddr();
|
|
|
- }
|
|
|
- String[] split = ip.split(",");
|
|
|
- ip = split[0];
|
|
|
- return ip;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * <pre>
|
|
|
- * 获取用户绑定手机号信息
|
|
|
- * </pre>
|
|
|
- */
|
|
|
- @GetMapping("/phone")
|
|
|
- public String phone(String sessionKey, String signature,
|
|
|
- String rawData, String encryptedData, String iv) {
|
|
|
-
|
|
|
-
|
|
|
- if (!wxMaService.getUserService().checkUserInfo(sessionKey, rawData, signature)) {
|
|
|
- return "user check failed";
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- WxMaPhoneNumberInfo phoneNoInfo = wxMaService.getUserService().getPhoneNoInfo(sessionKey, encryptedData, iv);
|
|
|
-
|
|
|
- return JsonUtils.toJson(phoneNoInfo);
|
|
|
- }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
|
|
|
}
|