Giter Club home page Giter Club logo

wechat4j's Introduction

wechat4j

##What is wechat4j? wechat develop framework for java(微信开发框架JAVA版,最简单易用微信开发框架)

##wechat4j可以用来干什么? wechat4j是一个帮助你开发微信应用的jar包,使用它,你开发微信公众号应用只需要几秒钟的时间,完全不用关注太细节的东西。

##wechat4j快速开始 可以去下载wechat4j示例项目wechat4jDemo,然后在其基础之上修改即可。如果你要自己搭建,那么使用wechat4j只需要三步就可以搭建微信开发环境。

  1. 创建一个web工程,导入jdk和相关的web工程jar包。
  2. 下载wechat4j.jar包,下载地址wechat4j下载
  3. 创建wechat4j配置文件,在src目录下(java根目录)创建wechat4j.properties文件,配置你微信公众号的相关信息。内容如下:
#you wechat token
wechat.token=token
#wechat appid
wechat.appid=appid
#wechat app secret
wechat.appsecret=secret

你也可以在jar包的META-INF目录下找到wechat4j.properties.sample文件,复制到src目录下修改名称即可。wechat4j.properties配置文件的详细配置项意义参见wechat4j配置文件解读

通过以上步骤,你的微信工程就完全搭好了。

##wechat4j 运行环境 wechat4j要求的最低java运行环境是jdk1.6

wechat4j.jar的依赖jar包

  • commons-codec.jar 1.3以上
  • commons-lang3.jar
  • log4j.jar 1.2以上
  • fastjson-1.2.0.jar
  • sword-lang-1.2 (https://github.com/sword-org/sword-lang/releases)
  • fluent-hc-4.3.6.jar(httpclient依赖)
  • httpclient-4.3.6.jar
  • httpcore-4.3.3.jar (httpclient依赖)
  • servlet-api.jar 如果你是web工程,导入支持web工程的包就会包括,例如tomcat包

你可以去集中下载这些jar包的集合wechat4j所需jar下载,也可以去maven库或者对应jar包的项目官网下载.

##开发自己的微信应用 wechat4j开发环境搭好之后,就可以开始开发自己的微信应用了。比如我有一个微信号的token是lejian,下面就以她为例子来说明。 ###创建自己公众号服务类 创建自己的微信公众号服务类,需要继承wechat4j的WechatSupport类,然后实现其抽象方法即可,下面以文本消息处理为例子

public class Lejian extends WechatSupport{
	public Lejian(HttpServletRequest request) {
		super(request);
	}

	@Override
	protected void onText() {
		this.wechatRequest.getFromUserName();
		String content = "test ok";
		responseText(content);
	}
}

上面代码中的onText()是WechatSupport的抽象方法,需要你自己的类来实现,表示对文本消息的处理,示例中是接收到用户的消息之后,返回给用户“test ok”文本消息。

###创建微信服务地址 创建微信服务地址(微信公众平台中配置的自己服务器地址)servlet类。如果是springmvc则创建对应的controller,如果是struts则创建对应的action类。servlet类示例如下:

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Lejian lejian = new Lejian(request);
		String result = lejian.execute();
		response.getOutputStream().write(result.getBytes());
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Lejian lejian = new Lejian(request);
		String result = lejian.execute();
		response.getOutputStream().write(result.getBytes());

	}

通过上面两步你的微信服务就可以运行了

##如何得到微信的请求参数 继承了WechatSupport类之后,你可以通过wechatRequest.getFromUserName()类似的方法来得到微信服务器请求的参数。详细信息请阅读微信请求参数 ##如何设置响应参数 继承了WechatSupport类之后,你可以通过wechatResponse.setFromUserName(fromUser)类似的方法来设置给微信服务器的响应参数。详细信息请阅读响应微信服务器参数 ##如何响应用户信息 以文本信息为例,响应文本信息只需要在你的onText方法中使用responseText(content)即可(参见上面的代码例子)

##wechat4j示例项目

如果你有好的demo项目,请邮件或者修改本文件然后pull request给我,我会列在上面。

##技术支持

##贡献代码

  1. 如果你觉得本项目不错,希望你能够点击一下右上角的star
  2. 如果你希望参与改进本项目,那么请点击右上角的fork,修改之后pull request即可。如果你的贡献不错,你就会收到加入sword开源社区的邀请。
  3. 如果你发现了一个bug,请你创建一个issue来报告。 非常非常欢迎你能够参与本项目的建设,每人做出一点点贡献,对整个项目来说就是一个非常大的贡献,希望集合众人的力量,让项目走的更好,能够为更多的人服务。

###贡献者列表

###分支

wechat4j's People

Contributors

brandon007 avatar chengn avatar cuishu avatar dongzj19900520 avatar uncoseason avatar zhangys-hh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wechat4j's Issues

这个里面有获取用户的地理位置模块吗?

Could not initialize class org.sword.wechat4j.token.server.JsApiTicketMemServer

我只使用里面的jsapi_ticket功能。默认中控服务器

wechat4j.propertes

wechat.url=
wechat.token=abckdjkjkjsf
wechat.encodingaeskey=
wechat.appid=wx342423dsfds
wechat.appsecret=bbdslj23412349309890sdf
wechat.accessToken.server.class=
wechat.ticket.jsapi.server.class=

代码:String jsapiTicket = TokenProxy.jsApiTicket();

然后就出现这个错误了:
java.lang.NoClassDefFoundError: Could not initialize class org.sword.wechat4j.token.server.JsApiTicketMemServer
at org.sword.wechat4j.token.server.JsApiTicketServer.defaultServer(JsApiTicketServer.java:37)

所有需要的jar包已导入,并编译通过。

纯吐槽

好歹贴出几个图来看看,是个什么样子嘛,整了半天,都不知道是个什么样子,虽然都是老手,但也没必要,非得把你所有的代码扒开来看看,都有什么功能

如何监听需要同步新的好友

别人扫我二维码添加我的好友,我手机通过好友验证后,系统怎么监听到? 我需要再去触发同步好友功能。

中控服务器问题

启用监听后,过了3到4天,监听就会自动失效,有人遇到这个问题吗?

EventType枚举类中枚举名称不规范

public enum EventType {
	subscribe,             //关注
	unsubscribe,           //取消关注
	/** 创建菜单使用 */
	click,				   
	CLICK,                 //点击
	/** 创建菜单使用  */
	view,				   
	VIEW,                  //跳转链接
	SCAN,                  //扫描
	LOCATION,              //上报地理位置
	TEMPLATESENDJOBFINISH, //模板消息发送成功之后事件
	scancode_push,         //扫码推事件
	scancode_waitmsg,      //扫码推事件且弹出“消息接收中”提示框的事件
	pic_sysphoto,          //弹出系统拍照发图的事件
	pic_photo_or_album,    //弹出拍照或者相册发图的事件
	pic_weixin,            //弹出微信相册发图器的事件
	location_select,       //弹出地理位置选择器的事件
	media_id,			   //下发消息(除文本消息)
	view_limited,		   //跳转图文消息URL 
	kf_create_session,	   //接入会话
	kf_close_session,	   //关闭会话
	kf_switch_session,	   //转接会话
}

EventType枚举类中的枚举名称存在大小写混用的情况,不利于代码规范,建议统一大小写问题。感谢!

引用sword-lang时的JAXB操作XML的字符集问题

sword中JAXB调用默认本地编码,能不能照顾下广大的windows开发环境的同胞啊,本地默认都是GBK哦,如果用file.encoding环境变量的方式弊端太大,能不能给予可选编码的配置方式啊?3Q。

无法解析加密信息

2016-09-25 21:20:34 INFO Config:66 - load wechat4j.properties success
不清楚代码哪里有加密解密的处理。
Log 如下:

2016-09-25 21:20:34 INFO WechatSupport:114 - parse post data:


2016-09-25 21:20:34 INFO WechatSupport:128 - distributeMessage start
2016-09-25 21:20:34 INFO WechatSupport:130 - msgType is null
九月 25, 2016 9:20:34 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [dispatcher] in context with path [/wechat] threw exception [Request processing failed; nested exception is java.lang.NullPointerException: Name is null] with root cause
java.lang.NullPointerException: Name is null

msgId问题

接收到的信息中取得的msgID都是空的,我看了下源码,发现字段名称和微信返回的不一样倒致的。
org.sword.wechat4j.request.WechatRequest 的MsgId 需要改成MsgID。这样就好了,我本地改了,不知道对别的有没有影响暂时没有深入研究。先记录下。

中文乱码啊

看网上的就换了个sword-lang2.0.0的UTF-8版,输出到微信的内容不乱码了,但是这边日志上接收到微信的信息还是乱码的,并且用户发送的信息有数字的时候会报“3 字节的 UTF-8 序列的字节3无效。”
有没有老哥有好的解决办法?

get请求异常,Server sent an unsupported extension: type_35

javax.net.ssl.SSLHandshakeException: Server sent an unsupported extension: type_35
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:292)
at sun.security.ssl.ClientHandshaker.serverHello(ClientHandshaker.java:656)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:206)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1026)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:961)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:290)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:259)
at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:125)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:319)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:363)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:219)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57)
at org.apache.http.client.fluent.Request.execute(Request.java:143)
at org.sword.lang.HttpUtils.httpGet(HttpUtils.java:156)
at org.sword.lang.HttpUtils.get(HttpUtils.java:75)
at org.sword.wechat4j.token.Token.request(Token.java:54)
at org.sword.wechat4j.token.server.AccessTokenMemServer.refresh(AccessTokenMemServer.java:72)
at org.sword.wechat4j.token.server.AccessTokenMemServer.accessToken(AccessTokenMemServer.java:53)
at org.sword.wechat4j.token.server.AccessTokenMemServer.token(AccessTokenMemServer.java:63)
at org.sword.wechat4j.token.server.AbsServer.token(AbsServer.java:25)
at org.sword.wechat4j.token.server.AccessTokenServer.token(AccessTokenServer.java:20)
at org.sword.wechat4j.token.TokenProxy.accessToken(TokenProxy.java:27)
at com.sample.SQL.SwitchCaseMainText.selMain_T(SwitchCaseMainText.java:140)
at com.sample.wechat.MyWechat.onText(MyWechat.java:47)
at org.sword.wechat4j.WechatSupport.dispatchMessage(WechatSupport.java:139)
at org.sword.wechat4j.WechatSupport.dispatch(WechatSupport.java:101)
at org.sword.wechat4j.WechatSupport.execute(WechatSupport.java:81)
at com.sample.wechat.WechatServlet.doPost(WechatServlet.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)

有时会出现,有时又好了。搞不懂

长字符串出现乱码问题怎么解决

onnText()里面回复比较长的String字符串时出现乱码异常,responseText之前content内容是正常的,可是之后反馈给用户,还有控制台打印出来的信息是乱码的,不知道这个问题怎么解决?
response data:璇疯緭鍏ユ祴鐐瑰悕绉?(鏍煎紡涓?鍔犳祴鐐瑰悕)

关于项目的demo说明

使用demo中的1.2版本,接收用户的文本 可能出现乱码;
替换为最新版本的代码时,配置文件中的参数同新版的参数配置有差别;
可否更新一般demo

自定义菜单-小程序

此版本对自定义菜单中集成小程序不支持,需要进行扩展支持,我本地代码已添加,可以的话我可以把代码提交上来

1.1.0发版说明中出现了错别字,顺便问个问题

1.1.0发版说明中出现了错别字,建议改一下。错误如下:

1 删除就得依赖包,下载最新的wechat4j依赖包全集wechat4j开发jar下载

别外,想问下,如果在sae上用1.1.0,是不是说把httpclientjar包换成4.1版本的就可以了,还是说,必须得调用sae的提供的httpclient API?

代码编译不过去

当前版本代码编译不过去,有些变量没有声明直接就调用了,如
public Follwers subscriberList(String nextOpenId){
变量accessToken 没有定义
是不是代码没有合并全啊?

乱码

获取的用户信息是乱码,请问如何设置编码

卡券、红包接口

卡券、红包接口现在很火,很多人需要,想跟各位讨论讨论将这两个接口打通

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.