diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WeixinConfig.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WeixinConfig.java deleted file mode 100644 index c8c1a2db..00000000 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WeixinConfig.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.linlinjava.litemall.wx.config; - -import cn.binarywang.wx.miniapp.config.WxMaConfig; -import cn.binarywang.wx.miniapp.config.WxMaInMemoryConfig; -import com.github.binarywang.wxpay.config.WxPayConfig; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class WeixinConfig { - public static final String WX_AppId = "wxa5b486c6b918ecfb"; - public static final String WX_Secret = "e04004829d4c383b4db7769d88dfbca1"; - public static final String WX_Token = ""; - public static final String WX_AesKey = ""; - public static final String WX_MsgDataFormat = "JSON"; - - - public static final String WX_MchId = ""; - public static final String WX_MchKey = ""; - public static final String WX_KeyPath = ""; - - @Bean - public WxMaConfig wxMaConfig() { - WxMaInMemoryConfig config = new WxMaInMemoryConfig(); - config.setAppid(WX_AppId); - config.setSecret(WX_Secret); - config.setToken(WX_Token); - config.setAesKey(WX_AesKey); - config.setMsgDataFormat(WX_MsgDataFormat); - - return config; - } - - - @Bean - public WxPayConfig wxPayConfig() { - WxPayConfig payConfig = new WxPayConfig(); - payConfig.setAppId(WX_AppId); - payConfig.setMchId(WX_MchId); - payConfig.setMchKey(WX_MchKey); - payConfig.setSubAppId(null); - payConfig.setSubMchId(null); - payConfig.setKeyPath(WX_KeyPath); - - return payConfig; - } -} \ No newline at end of file diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WxConfig.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WxConfig.java new file mode 100644 index 00000000..c728ccae --- /dev/null +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WxConfig.java @@ -0,0 +1,54 @@ +package org.linlinjava.litemall.wx.config; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; +import cn.binarywang.wx.miniapp.config.WxMaConfig; +import cn.binarywang.wx.miniapp.config.WxMaInMemoryConfig; +import com.github.binarywang.wxpay.config.WxPayConfig; +import com.github.binarywang.wxpay.service.WxPayService; +import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class WxConfig { + @Autowired + private WxProperties properties; + + @Bean + public WxMaConfig wxMaConfig() { + WxMaInMemoryConfig config = new WxMaInMemoryConfig(); + config.setAppid(properties.getAppId()); + config.setSecret(properties.getAppSecret()); + return config; + } + + + @Bean + public WxMaService wxMaService(WxMaConfig maConfig) { + WxMaService service = new WxMaServiceImpl(); + service.setWxMaConfig(maConfig); + return service; + } + + @Bean + public WxPayConfig wxPayConfig() { + WxPayConfig payConfig = new WxPayConfig(); + payConfig.setAppId(properties.getAppId()); + payConfig.setMchId(properties.getMchId()); + payConfig.setMchKey(properties.getMchKey()); + payConfig.setNotifyUrl(properties.getNotifyUrl()); + payConfig.setTradeType("JSAPI"); + payConfig.setSignType("MD5"); + return payConfig; + } + + + @Bean + public WxPayService wxPayService(WxPayConfig payConfig) { + WxPayService wxPayService = new WxPayServiceImpl(); + wxPayService.setConfig(payConfig); + return wxPayService; + } +} \ No newline at end of file diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WxMaConfiguration.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WxMaConfiguration.java deleted file mode 100644 index 5c083c57..00000000 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WxMaConfiguration.java +++ /dev/null @@ -1,115 +0,0 @@ -package org.linlinjava.litemall.wx.config; - -import cn.binarywang.wx.miniapp.api.WxMaService; -import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; -import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage; -import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage; -import cn.binarywang.wx.miniapp.config.WxMaConfig; -import cn.binarywang.wx.miniapp.config.WxMaInMemoryConfig; -import cn.binarywang.wx.miniapp.message.WxMaMessageHandler; -import cn.binarywang.wx.miniapp.message.WxMaMessageRouter; -import com.google.common.collect.Lists; -import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; -import me.chanjar.weixin.common.exception.WxErrorException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.io.File; - -/** - * @author Binary Wang - */ -@Configuration -@ConditionalOnClass(WxMaService.class) -@EnableConfigurationProperties(WxMaProperties.class) -public class WxMaConfiguration { - private static final WxMaMessageHandler templateMsgHandler = (wxMessage, context, service, sessionManager) -> - service.getMsgService().sendTemplateMsg(WxMaTemplateMessage.builder() - .templateId("此处更换为自己的模板id") - .formId("自己替换可用的formid") - .data(Lists.newArrayList( - new WxMaTemplateMessage.Data("keyword1", "339208499", "#173177"))) - .toUser(wxMessage.getFromUser()) - .build()); - - private final WxMaMessageHandler logHandler = (wxMessage, context, service, sessionManager) -> { - System.out.println("收到消息:" + wxMessage.toString()); - service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("收到信息为:" + wxMessage.toJson()) - .toUser(wxMessage.getFromUser()).build()); - }; - - private final WxMaMessageHandler textHandler = (wxMessage, context, service, sessionManager) -> - service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("回复文本消息") - .toUser(wxMessage.getFromUser()).build()); - - private final WxMaMessageHandler picHandler = (wxMessage, context, service, sessionManager) -> { - try { - WxMediaUploadResult uploadResult = service.getMediaService() - .uploadMedia("image", "png", - ClassLoader.getSystemResourceAsStream("tmp.png")); - service.getMsgService().sendKefuMsg( - WxMaKefuMessage - .newImageBuilder() - .mediaId(uploadResult.getMediaId()) - .toUser(wxMessage.getFromUser()) - .build()); - } catch (WxErrorException e) { - e.printStackTrace(); - } - }; - - private final WxMaMessageHandler qrcodeHandler = (wxMessage, context, service, sessionManager) -> { - try { - final File file = service.getQrcodeService().createQrcode("123", 430); - WxMediaUploadResult uploadResult = service.getMediaService().uploadMedia("image", file); - service.getMsgService().sendKefuMsg( - WxMaKefuMessage - .newImageBuilder() - .mediaId(uploadResult.getMediaId()) - .toUser(wxMessage.getFromUser()) - .build()); - } catch (WxErrorException e) { - e.printStackTrace(); - } - }; - @Autowired - private WxMaProperties properties; - - @Bean - @ConditionalOnMissingBean - public WxMaConfig config() { - WxMaInMemoryConfig config = new WxMaInMemoryConfig(); - config.setAppid(this.properties.getAppid()); - config.setSecret(this.properties.getSecret()); - config.setToken(this.properties.getToken()); - config.setAesKey(this.properties.getAesKey()); - config.setMsgDataFormat(this.properties.getMsgDataFormat()); - - return config; - } - - @Bean - @ConditionalOnMissingBean - public WxMaService wxMaService(WxMaConfig config) { - WxMaService service = new WxMaServiceImpl(); - service.setWxMaConfig(config); - return service; - } - - @Bean - public WxMaMessageRouter router(WxMaService service) { - final WxMaMessageRouter router = new WxMaMessageRouter(service); - router - .rule().handler(logHandler).next() - .rule().async(false).content("模板").handler(templateMsgHandler).end() - .rule().async(false).content("文本").handler(textHandler).end() - .rule().async(false).content("图片").handler(picHandler).end() - .rule().async(false).content("二维码").handler(qrcodeHandler).end(); - return router; - } - -} diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WxMaProperties.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WxMaProperties.java deleted file mode 100644 index b091ba62..00000000 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WxMaProperties.java +++ /dev/null @@ -1,81 +0,0 @@ -package org.linlinjava.litemall.wx.config; - -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; -import org.springframework.boot.context.properties.ConfigurationProperties; - -/** - * @author Binary Wang - */ -@ConfigurationProperties(prefix = "wechat.miniapp") -public class WxMaProperties { - /** - * 设置微信小程序的appid - */ - private String appid; - - /** - * 设置微信小程序的Secret - */ - private String secret; - - /** - * 设置微信小程序的token - */ - private String token; - - /** - * 设置微信小程序的EncodingAESKey - */ - private String aesKey; - - /** - * 消息格式,XML或者JSON - */ - private String msgDataFormat; - - public String getAppid() { - return this.appid; - } - - public void setAppid(String appid) { - this.appid = appid; - } - - public String getSecret() { - return this.secret; - } - - public void setSecret(String secret) { - this.secret = secret; - } - - public String getToken() { - return this.token; - } - - public void setToken(String token) { - this.token = token; - } - - public String getAesKey() { - return this.aesKey; - } - - public void setAesKey(String aesKey) { - this.aesKey = aesKey; - } - - public String getMsgDataFormat() { - return msgDataFormat; - } - - public void setMsgDataFormat(String msgDataFormat) { - this.msgDataFormat = msgDataFormat; - } - - @Override - public String toString() { - return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE); - } -} diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WxPayConfiguration.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WxPayConfiguration.java deleted file mode 100644 index d518c0c4..00000000 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WxPayConfiguration.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.linlinjava.litemall.wx.config; - -import com.github.binarywang.wxpay.config.WxPayConfig; -import com.github.binarywang.wxpay.service.WxPayService; -import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * @author Binary Wang - */ -@Configuration -@ConditionalOnClass(WxPayService.class) -@EnableConfigurationProperties(WxPayProperties.class) -public class WxPayConfiguration { - @Autowired - private WxPayProperties properties; - - @Bean - @ConditionalOnMissingBean - public WxPayConfig config() { - WxPayConfig payConfig = new WxPayConfig(); - payConfig.setAppId(this.properties.getAppId()); - payConfig.setMchId(this.properties.getMchId()); - payConfig.setMchKey(this.properties.getMchKey()); - payConfig.setSubAppId(StringUtils.trimToNull(this.properties.getSubAppId())); - payConfig.setSubMchId(StringUtils.trimToNull(this.properties.getSubMchId())); - payConfig.setKeyPath(this.properties.getKeyPath()); - - return payConfig; - } - - @Bean - //@ConditionalOnMissingBean - public WxPayService wxPayService(WxPayConfig payConfig) { - WxPayService wxPayService = new WxPayServiceImpl(); - wxPayService.setConfig(payConfig); - return wxPayService; - } - -} diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WxPayProperties.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WxPayProperties.java deleted file mode 100644 index e3fdc66d..00000000 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WxPayProperties.java +++ /dev/null @@ -1,97 +0,0 @@ -package org.linlinjava.litemall.wx.config; - -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; -import org.springframework.boot.context.properties.ConfigurationProperties; - -/** - * wxpay pay properties - * - * @author Binary Wang - */ -@ConfigurationProperties(prefix = "wechat.pay") -public class WxPayProperties { - /** - * 设置微信公众号的appid - */ - private String appId; - - /** - * 微信支付商户号 - */ - private String mchId; - - /** - * 微信支付商户密钥 - */ - private String mchKey; - - /** - * 服务商模式下的子商户公众账号ID,普通模式请不要配置,请在配置文件中将对应项删除 - */ - private String subAppId; - - /** - * 服务商模式下的子商户号,普通模式请不要配置,最好是请在配置文件中将对应项删除 - */ - private String subMchId; - - /** - * apiclient_cert.p12文件的绝对路径,或者如果放在项目中,请以classpath:开头指定 - */ - private String keyPath; - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getMchId() { - return mchId; - } - - public void setMchId(String mchId) { - this.mchId = mchId; - } - - public String getMchKey() { - return mchKey; - } - - public void setMchKey(String mchKey) { - this.mchKey = mchKey; - } - - public String getSubAppId() { - return subAppId; - } - - public void setSubAppId(String subAppId) { - this.subAppId = subAppId; - } - - public String getSubMchId() { - return subMchId; - } - - public void setSubMchId(String subMchId) { - this.subMchId = subMchId; - } - - public String getKeyPath() { - return this.keyPath; - } - - public void setKeyPath(String keyPath) { - this.keyPath = keyPath; - } - - @Override - public String toString() { - return ToStringBuilder.reflectionToString(this, - ToStringStyle.MULTI_LINE_STYLE); - } -} diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WxProperties.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WxProperties.java new file mode 100644 index 00000000..7cc0ae1c --- /dev/null +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/config/WxProperties.java @@ -0,0 +1,62 @@ +package org.linlinjava.litemall.wx.config; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConfigurationProperties(prefix = "wx") +public class WxProperties { + + private String appId; + + private String appSecret; + + private String mchId; + + private String mchKey; + + private String notifyUrl; + + public String getNotifyUrl() { + return notifyUrl; + } + + public void setNotifyUrl(String notifyUrl) { + this.notifyUrl = notifyUrl; + } + + public String getMchKey() { + return mchKey; + } + + public void setMchKey(String mchKey) { + this.mchKey = mchKey; + } + + public String getAppId() { + return this.appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getAppSecret() { + return appSecret; + } + + public void setAppSecret(String appSecret) { + this.appSecret = appSecret; + } + + public String getMchId() { + return mchId; + } + + public void setMchId(String mchId) { + this.mchId = mchId; + } + +} diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxPayController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxPayController.java deleted file mode 100644 index 2e03ba38..00000000 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxPayController.java +++ /dev/null @@ -1,99 +0,0 @@ -package org.linlinjava.litemall.wx.web; - -import com.github.binarywang.wxpay.service.WxPayService; -import org.apache.log4j.Logger; -import org.linlinjava.litemall.db.domain.LitemallOrder; -import org.linlinjava.litemall.db.domain.LitemallUser; -import org.linlinjava.litemall.db.service.LitemallOrderGoodsService; -import org.linlinjava.litemall.db.service.LitemallOrderService; -import org.linlinjava.litemall.db.service.LitemallUserService; -import org.linlinjava.litemall.core.util.ResponseUtil; -import org.linlinjava.litemall.wx.annotation.LoginUser; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -@RestController -@RequestMapping("/wx/pay") -public class WxPayController { - private Logger logger = Logger.getLogger(WxPayController.class); - - @Autowired - private LitemallOrderService orderService; - @Autowired - private LitemallOrderGoodsService orderGoodsService; - @Autowired - private LitemallUserService userService; - - @Autowired - private WxPayService wxService; - - - /** - * 获取支付的请求参数 - */ - @RequestMapping("prepay") - public Object payPrepay(@LoginUser Integer userId, Integer orderId) { - if(userId == null){ - return ResponseUtil.fail401(); - } - if(orderId == null){ - return ResponseUtil.fail402(); - } - - LitemallOrder order = orderService.findById(orderId); - LitemallUser user = userService.findById(userId); - if(user.getWeixinOpenid() == null){ - return ResponseUtil.fail(403, "用户openid不存在"); - } - if(order == null){ - return ResponseUtil.fail(403, "订单不存在"); - } - - return ResponseUtil.ok("模拟支付成功"); -// if(order.getPayStatus() != 0){ -// return ResponseUtil.fail(403, "订单已支付,请不要重复操作"); -// } - -// WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = new WxPayUnifiedOrderRequest(); -// WxPayUnifiedOrderResult wxPayUnifiedOrderResult = null; -// try { -// wxPayUnifiedOrderResult = wxService.unifiedOrder(wxPayUnifiedOrderRequest); -// } catch (WxPayException e) { -// e.printStackTrace(); -// return ResponseUtil.fail(403, "支付失败"); -// } -// -// return ResponseUtil.fail(404, "支付未实现"); - - - } - - /** - * 微信订单回调接口 - */ - @RequestMapping(value = "/notify", method = RequestMethod.POST) - public Object notify(HttpServletRequest request, HttpServletResponse response) { - return ResponseUtil.fail501(); - } - - /** - * 订单退款请求 - */ - @RequestMapping("refund") - public Object refund(@LoginUser Integer userId, Integer orderId) { - if (userId == null) { - return ResponseUtil.fail401(); - } - if (orderId == null) { - return ResponseUtil.fail402(); - } - return ResponseUtil.fail501(); - - } - -} \ No newline at end of file diff --git a/litemall-wx-api/src/main/resources/application.properties b/litemall-wx-api/src/main/resources/application.properties index 1d5bfda0..6894a0ac 100644 --- a/litemall-wx-api/src/main/resources/application.properties +++ b/litemall-wx-api/src/main/resources/application.properties @@ -1,3 +1,3 @@ -spring.profiles.active=dev +spring.profiles.active=prod server.port=8082 logging.level.org.linlinjava.litemall.wx.Application=DEBUG diff --git a/litemall-wx-api/src/test/java/org/linlinjava/litemall/wx/WxConfigTest.java b/litemall-wx-api/src/test/java/org/linlinjava/litemall/wx/WxConfigTest.java new file mode 100644 index 00000000..7fe39178 --- /dev/null +++ b/litemall-wx-api/src/test/java/org/linlinjava/litemall/wx/WxConfigTest.java @@ -0,0 +1,25 @@ +package org.linlinjava.litemall.wx; + +import com.github.binarywang.wxpay.config.WxPayConfig; +import com.github.binarywang.wxpay.service.WxPayService; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; + +@WebAppConfiguration +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest +public class WxConfigTest { + @Autowired + private WxPayService wxPayService; + + @Test + public void test() { + WxPayConfig wxPayConfig = wxPayService.getConfig(); + System.out.println(wxPayConfig.getMchId() + " " + wxPayConfig.getMchKey()); + } + +}