java微信开发_java微信开发获取code - CSDN
  • Java开发微信公众号(一)——微信开发环境搭建

    万次阅读 多人点赞 2017-12-10 16:32:22
    1.开发语言使用Java 2.使用微信接口测试账号进行本地测试 3.使用natapp(原ngrok)将本地地址映射到外网地址实现微信公众号的本地调试 准备工作最近学习微信公众平台的开发,在申请一个微信公众号的时候,发现...

    1.开发语言使用Java
    2.使用微信接口测试账号进行本地测试
    3.使用natapp(原ngrok)将本地地址映射到外网地址实现微信公众号的本地调试

    准备工作

    最近学习微信公众平台的开发,在申请一个微信公众号的时候,发现如果不是公司或组织只能申请订阅号(并且是个人的),而且不能使用微信提供的高级接口,所以如果想要使用公众平台的高级接口的话,申请一个微信公众平台接口测试账号就会非常方便了。使用微信公众平台接口测试账号,无需公众账号,快速申请接口测试号,能够直接体验和测试公众平台所有高级接口。

    申请微信公众平台接口测试账号

    点此申请微信公众平台接口测试账号
    打开上面的链接地址后,直接用自己的微信扫一下就可以直接登录了。
    登录成功后,如下显示:
    测试号

    公网配置前的准备

    在我们本地测试的时候,需要将我们的本地地址映射到公网,我们使用一个免费且非常方便的工具:natapp。下面的地址是natapp的官网和natapp的使用教程:
    natapp官网
    NATAPP 1分钟快速新手图文教程
    大家可以根据上面的教程来一步步做,我下面还会重新介绍一遍(因为在我跟着官网的教程做的时候后来因为自己的原因遇到了一些小问题)。

    免费隧道配置

    先注册,注册成功后登录。
    隧道购买
    购买
    注意上图:本地端口必须是要填8080的(这个购买后也是可以再修改的),因为微信公众平台接口的调用仅支持80。开发之间建议阅读微信公众平台技术文档
    隧道购买成功后,在我的隧道中就可以看到已拥有的隧道:
    我的隧道

    客户端下载

    我们访问到natapp的客户端下载,下载natapp客户端:
    客户端
    下载后,解压,会有一个natapp.exe的文件。

    运行natapp

    在运行natapp之前需要先配置,详细教程参考:使用本地配置文件config.ini。config.ini内容:
    authtoken
    注意:config.ini配置文件需要与natapp.exe在同一个目录下。

    在这两个文件的目录下,打开cmd命令窗口,输入:

    natapp -authtoken=你的authtoken

    回车,运行成功后是如下界面:
    这里写图片描述
    - Tunnel Status Online 代表链接成功
    - Version 当前客户端版本,如果有新版本,会有提示
    - Forwarding 当前穿透 网址 或者端口
    - Web Interface 是本地Web管理界面,可在隧道配置打- 开或关闭,仅用于web开发测试
    - Total Connections 总连接数
    - Avg Conn Time 0.00ms 这里不代表,不代表,不代表 延时,需要注意!
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这两个都是可以访问的,区别就是使用natapp是将本地映射到公网上了,别人也可以访问,但是别人就不能访问你的127.0.0.1:8080

    注意:用http://xxx.natappfree.cc 访问的时候运行natapp的cmd窗口要开着,也就是得运行着natapp,不然是找不到公网映射的。

    这样我们的微信本地开发调试环境就配好了。
    如果在操作过程中有问题,欢迎随时讨论^.^

    展开全文
  • 微信公众平台开发的所有流程的代码,包括接收xml数据、解析xml数据、调用图灵机器人api接口获取智能回复内容、封装结果xml数据等
  • (一)java微信授权登录

    万次阅读 2018-05-07 09:34:55
    最近工作中,接触到微信开发(公众号服务号开发)。由于第一次接触微信开发,所以第一步先去看微信开发文档。微信公众平台开发文档接下来,我们要使用微信来进行授权登录。微信授权的话,获取用户信息有两种:1.静默...

    最近工作中,接触到微信开发(公众号服务号开发)。

    由于第一次接触微信开发,所以第一步先去看微信开发文档。

    微信公众平台开发文档

    接下来,我们要使用微信来进行授权登录。

    微信授权的话,获取用户信息有两种:

    1.静默获取用户信息、

    2.弹出授权界面,用户确认之后获取用户信息(这种方法能够获取到更多信息)。

    开发准备,登录微信公众平台后台->基本配置->公众号开发信息:

    1.获取到AppID

    2.AppSecret

    3.设置IP白名单


    4.添加网页授权域名

    公众号设置->功能设置



    这一步,小伙伴本地开发的话没有域名,可以使用内网穿透软件,这里我用的是NATAPP,这样我们就能得到一个域名了,

    然后按照微信的流程来绑定授权域名就好了。

    获取用户信息,需要openid,然而获取openid的话要通过这个接口先获得一个code

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

    这里我们用的是弹出授权页面snsapi_userinfo

    后台授权接口代码

        @RequestMapping("/")
        public void login(HttpServletResponse response) {
                    //这里是回调的url
                    String redirect_uri = URLEncoder.encode("http://回调页面的路径", "UTF-8");
                    String url = "https://open.weixin.qq.com/connect/oauth2/authorize?" +
                            "appid=APPID" +
                            "&redirect_uri=REDIRECT_URI"
                            "&response_type=code" +
                            "&scope=SCOPE" +
                            "&state=123#wechat_redirect";
                    response.sendRedirect(url.replace("APPID","你的APPID").replace("REDIRECT_URL",redirect_url).replace("SCOPE","snsapi_userinfo"));
        }

    使用微信web开发工具访问该接口,会弹出授权确认界面



    用户点击确认登录之后跳转到我们的回调接口,并携带上code参数redirect_uri/?code=CODE&state=STATE,那我们就通过code来获取openid了。

    获取code后,请求以下链接获取access_token与openid:  https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code


    后台回调接口代码

        @RequestMapping("/index")
        public void index(String code) {
                    String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
                //开始请求url地址,第一次请求通过code获取openid与access_token     
                 UrlConnUtils.get(url.replace("APPID", "你的APPID").replace("SECRET", "你的SECRET")
                          .replace("CODE", code), new GetDataUrlConnListener() {                
                         @Override
                         public void onSuccess(HttpURLConnection connection) throws IOException {
                            String data = MyUtils.inputStreamToString(connection.getInputStream());
                            JSONObject jsonObject = JSONObject.parseObject(data);
                            if (jsonObject.getString("openid") != null) {
                                //拉取用户信息
                                String openid = jsonObject.getString("openid");
                                String access_token = jsonObject.getString("access_token");
                                String url = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";
                                 //第二次请求,用openid与access_token获取用户的信息
                                UrlConnUtils.get(url.replace("OPENID", openid).replace("ACCESS_TOKEN", access_token), new GetDataUrlConnListener() {
                                    @Override
                                    public void onSuccess(HttpURLConnection connection) throws IOException {
                                        String data = MyUtils.inputStreamToString(connection.getInputStream());                                   
                                        System.out.println(data);//输出微信返回的用户信息
                            }
                        }
                    });
        }


    第一次返回的数据:
    {
        "access_token":"9_zB3*****************w",
        "expires_in":7200,
        "refresh_token":"9_Uze***************9WTQ",
        "openid":"o*************ug",
        "scope":"snsapi_userinfo"
    }
    第二次返回的数据:(用户的信息)
    {
    "openid":"o***********g",
    "nickname":"Smile",
    "sex":1,
    "language":"zh_CN",
    "city":"厦门",
    "province":"福建",
    "country":"中国",
    "headimgurl":"http:\/\/thirdwx.qlogo.cn\/mmopen\/vi_32\/Q0j4TwGTfTLs8SZLLWjyib0Q\/132",
    "privilege":[]
    }

    这样就大功告成了!

    展开全文
  • JAVA 微信开发

    2019-07-30 14:40:18
    公司最近要搭建一个java微信系统,感觉自己没有记录的很多所以从今天开始每天开始更新一遍java微信文章记录。 如有兴趣的可以加入群463676190,一起交流交流 转载于:...

    公司最近要搭建一个java的微信系统,感觉自己没有记录的很多所以从今天开始每天开始更新一遍java的微信文章记录。

    如有兴趣的可以加入群463676190,一起交流交流

    转载于:https://www.cnblogs.com/cmzcheng/p/6099135.html

    展开全文
  • Java开发微信公众号。
  • 这里开发语言使用的是java,推荐使用认证过的微信公众号或者是微信公众平台测试账号。测试账号登录申请请访问:http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&...

    这里开发语言使用的是java,推荐使用认证过的微信公众号或者是微信公众平台测试账号。测试账号登录申请请访问:http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index

    一、开发环境的搭建

    这里提供两种开发环境:
    一是开发测试环境:

    1. 使用本地加算计作为服务器,安装好开发环境
    2. 通过内网穿透代理到外网上去,内网穿透可以使用花生壳等内网穿透工具。这里教大家一种免费的内网穿透工具:https://www.ngrok.cc

    二是正式的运行部署环境:

    1. 购买云服务器,搭建好运行环境
    2. 备案审核通过的域名
    3. nginx服务器

    二、查看服务器配置信息的介绍

    登录微信公众平台官网后,进入到公众平台后台管理页面。
    选择 公众号基本设置-》基本配置 ,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey。
    微信公众号配置信息:
    这里写图片描述
    微信公众部分接口权限需要认证之后才能开通,开发阶段建议实现用微信公众平台测试账号。

    测试账号配置信息:
    这里写图片描述

    可以看到需要的参数:

    1. URL:是开发者用来接收微信消息和事件 的接口URL。(必须以http://开头,目前支持80端口)
    2. Token:可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。注意必须为英文或数字,长度为3-32字符。
    3. EncodingAESKey:由开发者手动填写或随机生成,将用作消息体加解密密钥。(消息加密密钥由43位字符组成,可随机修改,字符范围为A-Z,a-z,0-9。)
      同时,开发者可选择消息加解密方式:明文模式、兼容模式和安全模式:
    4. 明文模式:不使用消息体加解密功能,安全系数较低
    5. 兼容模式:明文、密文将共存,方便开发者调试和维护
    6. 安全模式:消息包为纯密文,需要开发者加密和解密,安全系数高

    三、服务器开发

    查看微信公众号开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432
    在入门指引查看验证消息需要的参数,开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:

    参数          描述
    signature   微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp  
                参数、nonce参数。
    timestamp   时间戳
    nonce       随机数
    echostr     随机字符串

    开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:
    1. 将token、timestamp、nonce三个参数进行字典序排序
    2. 将三个参数字符串拼接成一个字符串进行sha1加密
    3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
    下面就可以进行开发了:
    首先创建一个web工程,博主使用的是SpringBoot框架,大家随意。
    springboot项目启动类

    package cc.feefox.wechat;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

    控制类

    package cc.feefox.wechat.main;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.beans.factory.annotation.Autowired;
    
    /**
     * 
     * @Package: cc.feefox.wechat.main 
     * @author: cc   
     * @date: 2018年8月18日 下午12:17:55
     */
    public class BaseController {
    
        protected static final String _CSRF_RANDOM_TOKEN = "_CSRF_RANDOM_TOKEN";
    
        @Autowired
        private HttpServletRequest request;
    
        @Autowired
        private HttpServletResponse response;
    
    
        public HttpServletRequest getRequest() {
            return request;
        }
    
        public void setRequest(HttpServletRequest request) {
            this.request = request;
        }
    
        public HttpServletResponse getResponse() {
            return response;
        }
    
        public void setResponse(HttpServletResponse response) {
            this.response = response;
        }
    
    }
    package cc.feefox.wechat.main;
    
    import java.io.IOException;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    import cc.feefox.wechat.common.util.SignatureUtil;
    
    /**
     * 微信消息入口
     * 
     * @Package: cc.feefox.wechat.main
     * @author: cc
     * @date: 2018年8月18日 下午12:18:39
     */
    @RestController
    @RequestMapping("/wechat")
    public class WeChatController extends BaseController {
    
        private static final Logger logger = LoggerFactory.getLogger(WeChatController.class);
    
        /**
         * 校验信息是否是从微信服务器发出,处理消息
         * 
         * @param request
         * @param out
         * @throws IOException
         */
        @RequestMapping(value = "/handler", method = { RequestMethod.GET, RequestMethod.POST })
        public void processPost() throws Exception {
    
            this.getRequest().setCharacterEncoding("UTF-8");
            this.getResponse().setCharacterEncoding("UTF-8");
    
            logger.info("开始校验信息是否是从微信服务器发出");
    
            // 签名
            String signature = this.getRequest().getParameter("signature");
            // 时间戳
            String timestamp = this.getRequest().getParameter("timestamp");
            // 随机数
            String nonce = this.getRequest().getParameter("nonce");
            // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
    
            if (SignatureUtil.checkSignature(signature, timestamp, nonce)) {
                // 随机字符串
                String echostr = this.getRequest().getParameter("echostr");
                logger.debug("接入成功,echostr {}", echostr);
                this.getResponse().getWriter().write(echostr);
            }
        }
    }

    签名验证

    package cc.feefox.wechat.common.util;
    
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Arrays;
    
    import cc.feefox.wechat.common.constant.WechatConstant;
    
    /**
     * 校验签名工具类
     * @Package: cc.feefox.wechat.common.util 
     * @author: cc   
     * @date: 2018年8月18日 下午12:17:19
     */
    public class SignatureUtil {
    
        // 此处的token即为微信接口配置填写的签名
        private static final String TOKEN = "weixin";
    
        /**
         * 验证签名
         * @param signature
         * @param timestamp
         * @param nonce
         * @return
         */
        public static boolean checkSignature(String signature, String timestamp, String nonce) {
    
            // 1.将token、timestamp、nonce三个参数进行字典序排序
            String[] arr = new String[] { TOKEN, timestamp, nonce };
            Arrays.sort(arr);
    
            // 2. 将三个参数字符串拼接成一个字符串进行sha1加密
            StringBuilder content = new StringBuilder();
            for (int i = 0; i < arr.length; i++) {
                content.append(arr[i]);
            }
            MessageDigest md = null;
            String tmpStr = null;
            try {
                md = MessageDigest.getInstance("SHA-1");
                // 将三个参数字符串拼接成一个字符串进行sha1加密
                byte[] digest = md.digest(content.toString().getBytes());
                tmpStr = byteToStr(digest);
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
    
            content = null;
            // 3.将sha1加密后的字符串可与signature对比,标识该请求来源于微信
            Boolean asd = tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
            return asd;
        }
    
        /**
         * 将字节数组转换为十六进制字符串
         *
         * @param byteArray
         * @return
         */
        private static String byteToStr(byte[] byteArray) {
            String strDigest = "";
            for (int i = 0; i < byteArray.length; i++) {
                strDigest += byteToHexStr(byteArray[i]);
            }
            return strDigest;
        }
    
        /**
         * 将字节转换为十六进制字符串
         * 
         * @param mByte
         * @return
         */
        private static String byteToHexStr(byte mByte) {
            char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
            char[] tempArr = new char[2];
            tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
            tempArr[1] = Digit[mByte & 0X0F];
            return new String(tempArr);
        }
    
    }

    三、接口配置

    这里写图片描述
    URL: http://域名:80/wechat/handler 或者是https://域名:443/wechat/handler
    TOKEN:weixin 与SignatureUtil类中定义的TOKEN常量一致。

    启动服务点击提交

    如有错漏请指出,欢迎加群 581817132
    这里写图片描述

    展开全文
  • 重点的话就是这里的授权页面的参数,文档的话希望自己去看和理解,比较这个方面的话,前辈已经写了很多了,我只是想把我自己...首先肯定的配置微信公众号里面的内容,这里就不多说了也就是域名,js域名,token,这...
  • Java微信公众号开发(附源码!!!)

    万次阅读 多人点赞 2019-02-21 15:17:44
    本人比较擅长Java开发,所以本文是基于Java语言的公众号开发。话不多说,直接进入正题。 准备工作: 一、在微信公众平台申请账号。 百度搜索微信公众平台,点击注册,通过邮箱注册成功后会看到如下画面。 在...
  • java微信开发全套视频教程-百度网盘
  • 微信开发实例,实现了大多数接口。可以直接用,也可以学习和研究,与君共勉!
  • JAVA微信开发-新手接入指南

    万次阅读 多人点赞 2016-01-28 14:28:09
    JAVA微信开发QQ群:211202664   相信很多人对微信开发已经不那么陌生,我也是从一个微信开发的菜鸟经过各种问题的折磨,然后去搜索引擎搜索各种文章阅读,但是基本都是零散的资料,没有一个统一、系统的阐述微信...
  • java微信开发API解析(七)-网页开发-微信网页授权全局说明* 详细说明请参考前两篇文章。 本文说明 本文主要完成获取用户基本信息的工作,包括(昵称、头像、地址、国家等基本信息) 对于snsapi_base和snsapi_userinfo...
  • 我们在做微信开发的时候,有一个很重要的就是通过openid获取用户的详细信息,包含昵称,头像,省,市,区的信息,但是现在移动时代,很多人追求个性,在名字当中大量使用火星文或者表情符。(本人实际测试过一个20w+...
  • java微信开发

    2016-12-16 16:20:32
    java微信开发  所谓的微信开发就是在微信开发模式之下,对微信进行公众号和企业号的扩展开发。  如果要让你的微信公众号有更多的功能,比如菜单支持,自动的信息服务,查询,消息推送等,就必须开启微信的开发...
  • 文章同步:http://blog.csdn.net/wgyscsf/article/details/51104855
  • 微信公众平台提供的接口文档 图文只能发图片和文字 视频只能发视频和一些简单的描述 我想发布视频和图文组合起来的消息到公众号 没有相关接口文档
  • 【课程内容】Java微信二次开发微信验证Java微信二次开发智能机器人java微信二次开发微信公众号平台基于java的微信订阅号自动回复接口基于java的微信二次开发必备要素基于java的微信二次开发智能机器人基于java的微信...
  • 相信做过或者正在学习JAVA微信开发的人,对新手接入是非常头疼的。 大家都知道,入门是最难的,相信那些已经搞定新手接入的大神们,肯定会说,微信开发其实一点也不难。 我在这里只能呵呵了~! 不过新手也不用...
  • Java微信开发-服务器配置等信息-

    千次阅读 2015-10-10 14:46:59
    直接一点哈,用的是Java开发的、SpringMvc。自己只是把自己遇到的东西 写下来 ,方便以后查看,大家也可以了解一下。有什么问题可以一起探讨! 如果启用“开发者中心”,则微信公众平台本身的自动回复,自定义菜单则...
  • java微信开发API解析(一)-服务器接入说明* 本示例根据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/2016 5:34:36 PM )进行开发演示。 * 编辑平台:myeclipse10.7+win32+jdk1.7+tomcat...
1 2 3 4 5 ... 20
收藏数 104,855
精华内容 41,942
关键字:

java微信开发