解决微信公众号accessToken白名单问题

获取微信公众号accessToken需要服务器ip配置白名单,但部分客户服务器没有固定ip,因而经常会出现因为ip白名单问题而获取不到公众号的accessToken。

解决办法:proxy代理

public String sendGet(String url, String param) {
        String result = "";
        BufferedReader in = null;
        try {
            String urlNameString = url + "?" + param;

            URL realUrl = new URL(urlNameString);

            //proxy代理服务
            String host = "www.baidu.com";//代理服务器域名
            String port = "8080";//端口号
            //InetAddress.getByName(host),通过域名获得ip地址
            InetSocketAddress socketAddress = new InetSocketAddress(InetAddress.getByName(host), port);
            Proxy proxy = new Proxy(Proxy.Type.HTTP,socketAddress);

            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();
            if (proxy != null) {
                conn = realUrl.openConnection(proxy);
            }
            // 设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("Charset", "utf-8");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 建立实际的连接
            conn.connect();

            // 获取所有响应头字段
            Map<String, List<String>> map = conn.getHeaderFields();
            /*
             * // 遍历所有的响应头字段 for (String key : map.keySet()) { log.debug(key +
             * "--->" + map.get(key)); }
             */
            // 定义 BufferedReader输入流来读取URL的响应
            // out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            log.debug("发送GET请求失败:" + ExceptionHelper.GetErrInfo(e));
        }
        // 使用finally块来关闭输入流
        finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                log.info(e2.getMessage());
            }
        }
        return result;
    }

补充:

407 Proxy Authentication Required

与401响应类似,只不过客户端必须在代理服务器上进行身份验证。代理服务器必须返回一个 Proxy-Authenticate 用以进行身份询问。客户端可以返回一个 Proxy-Authorization 信息头用以验证。参见RFC 2617。

If your proxy requires authentication it will give you response 407.

In this case you‘ll need the following code:

    Authenticator authenticator = new Authenticator() {

        public PasswordAuthentication getPasswordAuthentication() {
            return (new PasswordAuthentication("user",
                    "password".toCharArray()));
        }
    };
    Authenticator.setDefault(authenticator);

原文地址:https://www.cnblogs.com/TSHHENLIHAI/p/10826441.html

时间: 2024-08-29 18:19:32

解决微信公众号accessToken白名单问题的相关文章

ios 最新系统bug与解决——微信公众号中弹出键盘再收起时,原虚拟键盘位点击事件无效

最近ios发布新版本系统12.1,随着部分用户的系统更新,一些问题也渐渐暴露出来... 公司用户反映微信公众号出现了点击无效的bug!!测试调查发现,只有iphonex.iphone6,ihpone7等部分机型会出现该问题 我当时就是一惊,一般出现在事件上的问题都是疑难杂症.何况是跟键盘相关的. 我们都知道在H5端是没法监控键盘的弹出与收起的,resize事件触发的机型极其有限,何况我在ios中实测没有触发,安卓反而可以.因为安卓弹起键盘时会修改视窗的大小,但是ios并不会,如果你在ios上设置

利用nat123解决微信公众号对接服务器必须为80端口的问题

背景:最近公司接到做一个微信公众号的项目,需要我们提前做一个demo,好做项目的整体评估:我们公司本身有个云服务器,但没有备案,所以80端口还被电信屏蔽着,就想到利用nat123做80端口的映射:(外网80端口访问服务器上非80端口的应用) 前提:存在对接微信服务器的服务,云服务器本地访问地址为:http://localhost:8080/wxtest/WechatServlet 目标:外网通过80端口访问上述地址: 一:下载nat123 1:地址:http://www.nat123.com/P

利用NATAPP隧道解决微信公众号开发之本地调试难题

一.问题 众所周知,微信公众号开发需要公网的有效域名和80端口,本机当然互联网是访问不了的.那么我们难道去一个公网的服务器去开发吗?那样是不是太土了. 答案当然是,NO 当然我们在做微信支付的时候,有些URL需要域名进行备案了,那么我们首先需要准备一个域名,并且通过的备案,我这里是阿里的一个域名smartbi.club 已经个人备案成功,ICP可查 二.解决问题 2.1.准备条件 硬件:笔记本 软件:Tomcat+NATAPP软件https://natapp.cn+通过备案的域名 注册一个nat

微信公众平台IP白名单问题

在开发使用微信公众平台时,目前遇到有三处需要配置IP白名单. 1.微信公众平台,“获取access_token”接口新增IP白名单保护,官网:https://mp.weixin.qq.com/cgi-bin/announce?action=getannouncement&key=1495617578&version=1&lang=zh_CN&platform=2 2.微信商户平台,开通企业付款到零钱时,需要设置IP白名单 3.微信开放平台中,第三方平台开发调用相关接口时,需

thinkphp整合系列之微信公众号支付

thinkphp整合系列之微信公众号支付 白俊遥 2016-07-17 11:26:52 PHP thinkphp 公众号支付是指在微信app中访问的页面通过js直接调起微信支付:因此页面必须是在微信中打开的:示例项目:https://github.com/baijunyao/thinkphp-bjyadmin一:设置域名登录微信公众平台:微信支付中设置支付授权目录:把域名改为自己的:注意最后是有一个斜线的 / 设置授权域名:二:导入sdk/ThinkPHP/Library/Vendor/Wei

微信公众号弹出框在IOS最新系统中点击键盘上的“完成”导致事件无法触发问题

微信公众号弹出框在IOS最新系统中点击键盘上的"完成"导致事件无法触发问题 问题描述 微信公众号中有项功能是弹框模态框,输入信息后保存操作.但是在IOS系统中发现,当输入内容后,点击键盘上的"完成"后,再点击"提交"无反应:跳过"完成"直接点击"提交"就可以正常保存 问题原因 当键盘弹出后,会将body向上弹起:但是点击"完成"后并没有将body拉回,导致点击事件不在body内而无法触发

pc端引入微信公众号文章

最近做了一个小需求,结果坑特别多..... 需求是这样的,要给公司内部做一个微信公众号广告投票系统,整个项目就不多赘述了,有个小功能,要求是这样的: 点击某条记录后的“投票”按钮,在当前页面弹出弹窗显示文章内容(读取文章url,需要正确展示文字.图片.排版等),保持3分钟,这期间在当前页面上不可进行任何操作,不可投票也不可关闭文章.3分钟后,文章下方的投票区域可用,点击“提交”按钮时,校验所有项目是否都已选择,如果没有,则弹窗提示.提交完成后,状态更改为“已投票”(只是针对该用户,不针对该公众号

shell使用微信公众号发送模板消息

1.配置微信公众号 由于没有认证的公众号,只能通过自己申请的个人订阅号(可以自行申请),并到开发者工具中开通公众平台测试帐号实现该功能. 1.获取测试公众号appID和appsecret *2.关注测试号二维码获取用户openid 3.新增模板获取模板ID 得到模板id: OA0PX8pqc2X7t_y05y5GxZ8LutBpu341FIYSeQOkno 2.通过脚本实现消息发送 #!/bin/sh # 微信消息发送脚本 zhutw #全局配置-- #微信公众号appID appID=wxe1

微信公众号基础02_获取accessToken和用户信息

上一篇分享了搭建微信公众号服务器,本文分享一下如果获取access_Token和用户信息,工具还是新浪云SAE 1.获取access_Token 相见开发文档:https://mp.weixin.qq.com/wiki/14/9f9c82c1af308e3b14ba9b973f99a8ba.html accesstoken是公众号的全局唯一票据,公众号调用各接口时都需使用accesstoken.开发者需要进行妥善保存.accesstoken的存储至少要保留512个字符空间.accesstoken