精华内容
下载资源
问答
  • 主要介绍了微信公众号平台接口开发 获取微信服务器IP地址方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 主要介绍了 java 实现微信服务器下载图片到自己服务器的相关资料,需要的朋友可以参考下
  • 主要为大家详细介绍了Java微信公众平台开发第二步,微信服务器post消息体的接收,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 但是在我们本地测试过程中,请求微信服务器又很快响应。嗯,理论上微信服务器不会出问题的…… 试着在服务器上去 curl 微信的接口,确实挺慢的,我们代码里配置了超时是3秒,目测确实超过了3秒才返回!抱着侥幸的...
  • 类似微信服务器端源码
  • 如果公众号基于安全等考虑,需要获知微信服务器的IP地址列表,以便进行相关限制,可以通过该接口获得微信服务器IP地址列表或者IP网段信息。 (二)实例调用 接口说明 http请求方式:GET 接口调用地址: ...
  • 3 验证消息的确来自微信服务器 WxMessageController.java package com.torey.shxqgy.shxqgy.controller; import com.torey.shxqgy.shxqgy.service.WxService; import org.springframework.beans.facto...

    1 进入测试号
    在这里插入图片描述
    2 使用ngrok实现内网穿透
    3 验证消息的确来自微信服务器
    在这里插入图片描述
    WxMessageController.java

    package com.torey.shxqgy.shxqgy.controller;
    
    import com.torey.shxqgy.shxqgy.service.WxService;
    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;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    /**
     * @ClassName:WxMessage
     * @Description:
     * @author: Torey
     */
    @RestController
    public class WxMessageController {
        @Autowired
        private HttpServletRequest request;
        @Autowired
        private HttpServletResponse response;
        @RequestMapping(value = "/wx/wxRes",method = RequestMethod.GET )
        public void wxMessageGet(){
            System.out.println("GET");
            yanZhengWx();
        }
        @RequestMapping(value = "/wx/wxRes",method = RequestMethod.POST )
        public void wxMessagePost(){
            System.out.println("POST");
        }
    
        private boolean yanZhengWx() {
           String signature	=request.getParameter("signature");//微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
           String timestamp	=request.getParameter("timestamp");//时间戳
           String nonce	=request.getParameter("nonce");//随机数
           String echostr	=request.getParameter("echostr");//随机字符串
            //校验请求
            if(WxService.check(timestamp,nonce,signature)){
                PrintWriter writer = null;
                try {
                    writer = response.getWriter();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                //原样返回echost参数
                writer.print(echostr);
                writer.flush();
                writer.close();
                System.out.println("接入成功");
            }else {
                System.out.println("接入失败");
            }
            return  true;
        }
    }
    

    WxService.java

    package com.torey.shxqgy.shxqgy.service;
    
    import com.torey.shxqgy.shxqgy.config.WxConfig;
    import org.apache.commons.lang3.StringUtils;
    
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Arrays;
    
    /**
     * @ClassName:WxService
     * @Description:
     * @author: Torey
     */
    public class WxService {
        /**
         * @author: LiTaoFeng
         * @description:验证签名
         */
        public static boolean check(String timestamp,String nonce,String signature) {
            //1)将token、timestamp、nonce三个参数进行字典序排序
            // 2)将三个参数字符串拼接成一个字符串进行sha1加密
            // 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
            //1)将token、timestamp、nonce三个参数进行字典序排序
            String[] strs=new String[]{WxConfig.TOKEN,timestamp,nonce};
            Arrays.sort(strs);
            // 2)将三个参数字符串拼接成一个字符串进行sha1加密
            String str = StringUtils.join(strs, "");
            String shal = shal(str);
            System.out.println(shal);
            System.out.println(signature);
            return shal.equalsIgnoreCase(signature);
        }
        /**
         * @author: LiTaoFeng
         * @description:进行shal加密
         */
        private static String shal(String src){
            //获取一个加密对象
            MessageDigest md = null;
            try {
                md = MessageDigest.getInstance("sha1");
    
            char[] chars={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
            StringBuilder sb = new StringBuilder();
            //加密
            byte[] digest = md.digest(src.getBytes());
            //处理加密结果
            for (byte b : digest) {
                sb.append(chars[(b>>4)&15]) ;
                sb.append(chars[b&15]);
            }
            return sb.toString();
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    
    展开全文
  • Python校验请求是否来自微信服务器

    万次阅读 多人点赞 2020-05-16 10:40:58
    官方文档文档内容如下:验证消息的确来自微信服务器开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:参数描述signature微信加密签...

    官方文档文档内容如下:

    验证消息的确来自微信服务器

    开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:

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

    开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:

    1)将token、timestamp、nonce三个参数进行字典序排序 2)将三个参数字符串拼接成一个字符串进行sha1加密 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

    检验signature的PHP示例代码:

    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
    
        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr, SORT_STRING);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
    
        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
    

    可惜官网只提供了PHP的代码,我现在把它翻译成python代码:

    def checkSignature(data):
        signature = data.get('signature')
        timestamp = data.get('timestamp')
        nonce = data.get("nonce")
        if not signature or not timestamp or not nonce:
            return False
        tmp_str = "".join(sorted([TOKEN, timestamp, nonce]))
        tmp_str = hashlib.sha1(tmp_str.encode('UTF-8')).hexdigest()
        if tmp_str == signature:
            return True
        else:
            return False
    

    在Flask web框架中使用以下代码测试,已经测试通过:

    @app.route('/test', methods=['GET'])
    def test():
        if checkSignature(request.args):
            return "校验成功"
        else:
            return "校验失败"
    

    不过我个人觉得这个校验运算也是一笔计算资源的开销,我用来公众号开发的测试服务器配置了nginx反向代理,python web程序本身只接收nginx服务器转发的请求,如果微信公众号提供了让nginx只接收微信服务器请求的方法就好了(当然也可能已经有现成的实现我不知道,望知道的大佬能够指导我一下)。

    展开全文
  • 1. 开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示: 参数 描述 signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timest...

    https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319

     

     

    1. 开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:

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

     

    2.

    开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:

    1)将token、timestamp、nonce三个参数进行字典序排序

    2)将三个参数字符串拼接成一个字符串进行sha1加密

    3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

    java代码

    1.创建servlet 

    2.验证代码

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		/*开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:
    		参数	描述
    		signature	微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
    		timestamp	时间戳
    		nonce	随机数
    		echostr	随机字符串*/
    		String signature = request.getParameter("signature");
    		String timestamp = request.getParameter("timestamp");
    		String nonce = request.getParameter("nonce");
    		String echostr = request.getParameter("echostr");
    		System.out.println(signature);
    		System.out.println(timestamp);
    		System.out.println(nonce);
    		System.out.println(echostr);
    		boolean checkSignature = WxUtils.CheckSignature(signature,timestamp,nonce);
    		if (checkSignature) {
    			System.out.println("success");
    			//
    			PrintWriter writer = response.getWriter();
    			writer.print(echostr);
    			writer.flush();
    			writer.close();
    		}else {
    			System.out.println("failed");
    		}
    	}

     WxUtils代码

    public class WxUtils {
    
    	private static final  String Token="shxx";
    	private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5',  
                '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};  
    	public static boolean CheckSignature(String signature, String timestamp, String nonce) {
    		
    //		1)将token、timestamp、nonce三个参数进行字典序排序 
    //		2)将三个参数字符串拼接成一个字符串进行sha1加密 
    //		3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
    		String[] strs=new String[]{Token,timestamp,nonce};
    		
    		Arrays.sort(strs);
    		
    		String str=strs[0]+strs[1]+strs[2];
    		
    		String mysignature=sha1(str);
    		return mysignature.equals(signature);
    	}
    	
    	private static String sha1(String str) {
    		
    		  
            if (str == null) {  
                return null;  
            }  
            try {  
                MessageDigest messageDigest = MessageDigest.getInstance("SHA1"); 
                messageDigest.update(str.getBytes());  
                return getFormattedText(messageDigest.digest());  
            } catch (Exception e) {  
                throw new RuntimeException(e);  
            } 
    	}
    
    	private static String getFormattedText(byte[] bytes) {
    		  
            int len = bytes.length;  
            StringBuilder buf = new StringBuilder(len * 2);  
            // 把密文转换成十六进制的字符串形式  
            for (int j = 0; j < len; j++) {  
                buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);  
                buf.append(HEX_DIGITS[bytes[j] & 0x0f]);  
            }  
            return buf.toString(); 
    	}
    
    		
    }
    

     

    3.在测试公众号中进行配置

    展开全文
  • 我们在做网络安全测试时,首先要知道目标服务器的地址,否则一切都是空谈,今天我们就找一下微信服务器IP地址;废话不多说,直接开始搞。 首先,让微信客户端在pc端运行,在任务管理器--详细信息中,找到WeChat....

    我们在做网络安全测试时,首先要知道目标服务器的地址,否则一切都是空谈,今天我们就找一下微信的服务器IP地址;废话不多说,直接开始搞。

    首先,让微信客户端在pc端运行,在任务管理器--详细信息中,找到WeChat.exe的进程,找到PID 就是微信进程的ID号

    打开一个命令行窗口,cmd或者powershell窗口都可以,我这里习惯使用powershell,看着舒服一些

    输入命令 netstat -ano|findstr 14596  #这里使用我们上面找到的PID号,进行查找

    我们这里就找到了服务器的ip地址。ping一下试试

    没问题地址是通的,端口号是443,安全网络web端口。

    展开全文
  • 下载微信服务器上的图片到自己的服务器 微信上传图片后 单张图片将返回serverId 多张图片将返回serverId数组,后续只需遍历下载即可 下载微信服务器上的图片 工具类   。。。 import java.io.File; ...
  • 微信非常笃定:由于聊天记录涉及用户隐私,微信服务器不会保存用户任何聊天记录。按照微信的说法,微信服务是不会保存用户聊天记录的;这句话出自腾讯客服的回复,如果真的是这样,微信确实是真的为用户考虑的。我们...
  • java中什么方法可以在微信服务器上面把图片下载到本地服务器并保存(知道微信服务器上面图片的链接)
  • 最近项目中有从微信服务器下载图片到服务器端展示的功能,但是偶尔会出现下载的图片无法显示,打开图片发现格式已损坏,跟踪代码也并没有发现问题,直到出现了格式损坏图片的时候,发现在请求微信服务器返回文件流的...
  • 微信服务器接入流程

    千次阅读 2017-11-03 22:39:35
    微信服务器接入流程 1. 创建django项目,创建app,创建wechat路由 2. 写路由对应的视图函数,不能使用csrf_token验证,两种方式:  1)取消该项目所有视图函数csrf_token的验证 2)使用@csrf_...
  • 内容: 微信服务器向公众号推送消息或事件后,开发者5秒内没有返回 次数: 5分钟 80次 错误样例: [OpenID=xxxxxx][Stamp=1616565412][3rdUrl=https://xxxxxx/wechat][IP=114.80.187.67][Event=Template Send Job ...
  • 微信公众号开发,小程序开发服务器端验证代码(PHP)
  • 主要介绍了Python 通过微信控制实现app定位发送到个人服务器,再转发微信服务器接收位置信息,本文给出了实例代码,代码简单易懂,非常不错具有一定的参考借鉴价值,需要的朋友可以参考下
  • 内容: 微信服务器向公众号推送消息或事件后,得到的回应不合法 次数: 5分钟 33次 错误样例: [OpenID=ocKxit_eN1kHNvjFeR3svjaL23mU][Stamp=1489985160][3rdUrl=http://sjjxgl.top/springmvc_mybatis/wx/index.do]...
  • 微信公众号获取微信服务器IP地址

    千次阅读 2019-02-19 11:33:30
    如果公众号基于安全等考虑,需要获知微信服务器的IP地址列表,以便进行相关限制,可以通过该接口获得微信服务器IP地址列表或者IP网段信息。 http请求方式: GET...
  • 初次接触微信服务器配置真的不知怎么弄。所以记录下来。 1、理解微信服务器配置原理 在配置的时候,当你点击提交的时候,微信会校验你的服务器是否通畅,关键问题是: 微信会发什么数据到我指定服务器? 服务器...
  • 微信小程序媒体文件上传到微信服务器官方给出的事例如下: curl -F media=@test.jpg "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&amp;type=TYPE" 网上找了半天,...
  • 如果公众号基于消息接收安全上的考虑,需要获知微信服务器的IP地址列表,以便识别出哪些消息是微信官方推送给你的,哪些消息可能是他人伪造的,可以通过该接口获得微信服务器IP地址列表。 接口调用请求说明 http...
  • 微信公众平台—— 获取微信服务器IP地址 const ServerIpUrl = 'https://api.weixin.qq.com/cgi-bin/getcallbackip?&amp;access_token=%s'; procedure GetServerList(out List: TStringList; AccessToken: String...
  • 之前直接写了怎么开发,忘了写怎么知道验证消息来自微信服务器,否则无法进行开发,先来看一下官方的开发文档怎么描述的 接入微信公众平台开发,开发者需要按照如下步骤完成: 1、填写服务器配置 2、验证服务器...
  • 微信服务器IP地址

    千次阅读 2016-02-23 08:47:04
    微信服务器IP地址会更新,2616年2月22日,如下 101.226.62.77-86 101.226.103.59-73 140.207.54.73-80 182.254.11.198-203 59.37.97.100-118 112.90.78.158-167 140.207.54.19 140.207.54.76-80 180.163.15.14...
  • 1、准备接口配置信息 A、服务器URL B、Token 2、编写微信GET请求代码 A、判断GET请求 B、验证微信签名有效性 C、 3、配置页面提交申请
  • 通过Apache反向代理实现微信服务器80端口访问由于微信公众平台需要的80端口已经被apache占用,所以需要基于apache配置反向代理。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 196,284
精华内容 78,513
关键字:

微信服务器