当前访客身份:游客 [ 登录 | 加入开源中国 ]

代码分享

当前位置:
代码分享 » Java  » Web编程
分享到: 
收藏 +0
3
由于问的人比较多,决定把代码放出来,代码还未整理,里面有解析数据可以用正则表达式替换也没做,有需要的可以自己在此基础上修改。没做验证码处理、如果出现验证码错误、重复请求几次就会登录、现在很多人反映微信模拟登录不上去,可能微信那边做了调整,建议使用fiddler2工具具体分析下请求,在原有代码基础上调整
"-1":"系统错误。 
"-2":"帐号或密码错误 
"-3":"密码错误。" 
"-4":"不存在该帐户。" 
"-5":"访问受限。" 
"-6":"需要输入验证码" 
"-7":"此帐号已绑定私人微信号,不可用于公众平台登录。" 
"-8":"邮箱已存在。" 
"-32":"验证码输入错误" 
"-200":n="因频繁提交虚假资料,该帐号被拒绝登录。" 
"-94":"请使用邮箱登陆。" 
"10":"该公众会议号已经过期,无法再登录使用。" 
"65201":"65202":"成功登陆,正在跳转..." 
"0":n="成功登陆,正在跳转..." 
default:"未知的返回。" 
这是微信平台的返回码对应错误信息。
标签: <无>

代码片段(2) [全屏查看所有代码]

1. [代码][Java]代码     跳至 [1] [全屏预览]

public boolean msgSend(MsgForm form, MsgType type) {
        try {
            if (!this.isLogin) {
                this._login();
            }
            if (this.isLogin) {
                form.setToken(this.token);
                PostMethod post = new PostMethod(POST_MSG);
                post.setRequestHeader(USER_AGENT_H, USER_AGENT);
                post.setRequestHeader(REFERER_H, INDEX_URL);
                post.setRequestHeader("Cookie", this.cookiestr);
                NameValuePair[] params = null;
                Part[] parts = null;
                switch (type) {
                    case TEXT:
                 
                        parts = new Part[]{
                                new StringPart("content", form.getContent(),
                                        "UTF-8"),
                                new StringPart("type", form.getType()),
                                new StringPart("error", form.getError()),
                                new StringPart("needcomment", form.getNeedcomment()),
                                new StringPart("groupid", form.getGroupid()),
                                new StringPart("sex", form.getSex()),
                                new StringPart("country", form.getCountry()),
                                new StringPart("province", form.getProvince()),
                                new StringPart("city", form.getCity()),
                                new StringPart("token", form.getToken()),
                                new StringPart("ajax", form.getAjax()),
                                new StringPart("t", "ajax-response")};
                        break;
                    case IMAGE_TEXT:
                        parts = new Part[]{
                                new StringPart("content", form.getContent(),
                                        "UTF-8"),
                                new StringPart("type", form.getType()),
                                new StringPart("error", form.getError()),
                                new StringPart("needcomment", form.getNeedcomment()),
                                new StringPart("groupid", form.getGroupid()),
                                new StringPart("sex", form.getSex()),
                                new StringPart("country", form.getCountry()),
                                new StringPart("province", form.getProvince()),
                                new StringPart("city", form.getCity()),
                                new StringPart("token", form.getToken()),
                                new StringPart("ajax", form.getAjax()),
                                new StringPart("t", "ajax-response")};
                        break;
                    default:
                        parts = new Part[]{
                                new StringPart("content", form.getContent(),
                                        "UTF-8"),
                                new StringPart("type", form.getType()),
                                new StringPart("error", form.getError()),
                                new StringPart("needcomment", form.getNeedcomment()),
                                new StringPart("groupid", form.getGroupid()),
                                new StringPart("sex", form.getSex()),
                                new StringPart("country", form.getCountry()),
                                new StringPart("province", form.getProvince()),
                                new StringPart("city", form.getCity()),
                                new StringPart("token", form.getToken()),
                                new StringPart("ajax", form.getAjax()),
                                new StringPart("t", "ajax-response")};

                        break;
                }
                RequestEntity entity = new MultipartRequestEntity(parts,
                        post.getParams());
                post.setRequestEntity(entity);
                int status;
                status = client.executeMethod(post);
                if (status == HttpStatus.SC_OK) {
                    String text = post.getResponseBodyAsString();
                    try {
                        MsgJson ret = JSON.parseObject(text, MsgJson.class);
                        this.msgSendCode = ret.getRet();
                        switch (this.msgSendCode) {
                            case 0:
                                this.msgSendMsg = "发送成功";
                                return true;
                            case -2:
                                this.msgSendMsg = "参数错误,请仔细检查";
                                return false;
                            case 64004:
                                this.msgSendMsg = "今天的群发数量已到,无法群发";
                                return false;
                            case -20000:
                                this.msgSendMsg = "请求被禁止,请仔细检查token是否合法";
                                return false;
                            default:
                                this.msgSendMsg = "未知错误!";
                                return false;
                        }
                    } catch (Exception e) {
                        String info = "【群发信息失败】【解析json错误】" + e.getMessage()
                                + "\n\t【文本:】\n\t" + text;
                        System.err.println(info);
                        log.debug(info);
                        log.info(info);
                        return false;
                    }
                }
            }
        } catch (Exception e) {
            String info = "【群发信息失败】" + e.getMessage();
            System.err.println(info);
            log.debug(info);
            log.info(info);
            return false;
        }
        return false;
    }

2. [文件] weixin.zip ~ 12KB     下载(1080)     [全屏预览]



开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»

发表评论 回到顶部 网友评论(60)

  • 1楼:小薇 发表于 2013-06-03 21:29 回复此评论
    没有测试,但是觉得很赞,之前我在博客中发表了部分关于微信平台开发的文章,也是有很多人问我这个问题。
    文章我大致转载了: http://50vip.com/blog.php?i=268
  • 2楼:书一 发表于 2013-06-03 21:34 回复此评论

    引用来自“王小为”的评论

    没有测试,但是觉得很赞,之前我在博客中发表了部分关于微信平台开发的文章,也是有很多人问我这个问题。
    文章我大致转载了: http://50vip.com/blog.php?i=268
    代码能运行,jdk最好要1.7
  • 3楼:李龙 发表于 2013-06-03 23:45 回复此评论

    引用来自“王小为”的评论

    没有测试,但是觉得很赞,之前我在博客中发表了部分关于微信平台开发的文章,也是有很多人问我这个问题。
    文章我大致转载了: http://50vip.com/blog.php?i=268
    谢谢分享,试试看
  • 4楼:天体图 发表于 2013-06-03 23:49 回复此评论
    建议你把代码里的帐号和密码给去掉。。。。
  • 5楼:fox2628 发表于 2013-06-05 20:03 回复此评论
    您好,使用您的代码从今天下午起就返回错误无法登陆了。请问您今天试过么?还是我有地方配置不对?中午11点前还能登陆的,隔了一段时间就不行了
  • 6楼:李嘉峰 发表于 2013-06-06 16:51 回复此评论
    请问那些包要到哪里弄
  • 7楼:书一 发表于 2013-06-07 09:50 回复此评论

    引用来自“fox2628”的评论

    您好,使用您的代码从今天下午起就返回错误无法登陆了。请问您今天试过么?还是我有地方配置不对?中午11点前还能登陆的,隔了一段时间就不行了
    可能需要验证码之类的,重复请求就对了,没做验证码识别
  • 8楼:书一 发表于 2013-06-07 09:50 回复此评论

    引用来自“李嘉峰”的评论

    请问那些包要到哪里弄
    去apache官网看下吧
  • 9楼:fox2628 发表于 2013-06-08 13:20 回复此评论

    引用来自“廖凯”的评论

    引用来自“fox2628”的评论

    您好,使用您的代码从今天下午起就返回错误无法登陆了。请问您今天试过么?还是我有地方配置不对?中午11点前还能登陆的,隔了一段时间就不行了
    可能需要验证码之类的,重复请求就对了,没做验证码识别
    我觉得不太像是验证码的问题,我只想做一个模拟登陆的页面,达到直接跳主页的效果就行了。但是现在就算cookie送过去了,页面还是返回登陆界面。http抓的话是出现了主页的。但是不知道怎么回事就自动跳回了。请问您这里是否也碰到过这类问题?
  • 10楼:OpenIoT 发表于 2013-06-08 13:43 回复此评论
    我想问下:如何让用户加了某个微信公帐号之后,后台程序自动给该用户发送一条:欢迎信息。

  • 11楼:书一 发表于 2013-06-08 14:05 回复此评论

    引用来自“心中彩虹”的评论

    我想问下:如何让用户加了某个微信公帐号之后,后台程序自动给该用户发送一条:欢迎信息。

    你可以保存一个用户列表,当然这个列表需要你自己更新维护,接下来就像正常一样的做法了
  • 12楼:书一 发表于 2013-06-08 14:07 回复此评论

    引用来自“心中彩虹”的评论

    我想问下:如何让用户加了某个微信公帐号之后,后台程序自动给该用户发送一条:欢迎信息。

    微信自己的有这个功能,貌似有些平台也做了,不太清楚其实现方式
  • 13楼:赖国强 发表于 2013-06-08 14:12 回复此评论
    10楼的需求,直接调用消息接口就能够实现了啊
  • 14楼:OpenIoT 发表于 2013-06-08 15:32 回复此评论

    引用来自“赖国强”的评论

    10楼的需求,直接调用消息接口就能够实现了啊
    请问是哪个接口,貌视没有找到?能否给链接?谢谢!
  • 15楼:小野ye 发表于 2013-06-09 08:37 回复此评论

    引用来自“心中彩虹”的评论

    引用来自“赖国强”的评论

    10楼的需求,直接调用消息接口就能够实现了啊
    请问是哪个接口,貌视没有找到?能否给链接?谢谢!
    subscribe event
  • 16楼:小野ye 发表于 2013-06-09 08:41 回复此评论
    嗯, 单独给某个人发?
  • 17楼:kakaximu 发表于 2013-06-09 09:37 回复此评论

    引用来自“心中彩虹”的评论

    我想问下:如何让用户加了某个微信公帐号之后,后台程序自动给该用户发送一条:欢迎信息。

    微信公众平台API里有写,关注事件吧
  • 18楼:Lukerr 发表于 2013-06-09 16:01 回复此评论

    引用来自“心中彩虹”的评论

    我想问下:如何让用户加了某个微信公帐号之后,后台程序自动给该用户发送一条:欢迎信息。

    这个简单,用户添加微信公众帐号后会给后台发送一个msgType=event的消息,event=subscribe的消息。判断一下,然后返回给用户一个msgType=text消息。content=欢迎信息
  • 19楼:Lukerr 发表于 2013-06-09 16:57 回复此评论
    我部署运行异常:是不是证书问题?怎么解决?
    Caused by: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: basic constraints check failed: pathLenConstraint violated - this cert must be the last cert in the certification path
    ... ...
    at com.kin.weixin.Weixin.updateImg(Weixin.java:654)
    at com.kin.weixin.Weixin.saveImgText(Weixin.java:773)

    ... ...
  • 20楼:书一 发表于 2013-06-09 17:11 回复此评论

    引用来自“look-vip”的评论

    我部署运行异常:是不是证书问题?怎么解决?
    Caused by: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: basic constraints check failed: pathLenConstraint violated - this cert must be the last cert in the certification path
    ... ...
    at com.kin.weixin.Weixin.updateImg(Weixin.java:654)
    at com.kin.weixin.Weixin.saveImgText(Weixin.java:773)

    ... ...
    嗯,jdk版本高,就没这个问题