odoo后台实现微信公众号验证

在微信公众号开发的其中一个步骤是微信服务器调用我们自己的网站验证身份,这一步微信服务器会传递过来4个参数,可是按照官方的写法,却无法验证通过,下面是官方的验证方法

import hashlib
import web

class Handle(object):
    def GET(self):
        try:
            data = web.input()
            if len(data) == 0:
                return "hello, this is handle view"
            signature = data.signature
            timestamp = data.timestamp
            nonce = data.nonce
            echostr = data.echostr
            token = "xxxx" #请按照公众平台官网\基本配置中信息填写

            list = [token, timestamp, nonce]
            list.sort()
            sha1 = hashlib.sha1()
            map(sha1.update, list)
            hashcode = sha1.hexdigest()
            print "handle/GET func: hashcode, signature: ", hashcode, signature
            if hashcode == signature:
                return echostr
            else:
                return ""
        except Exception, Argument:
            return Argument

网上有网友写的专门的模块,经过实际验证可行,现将这部分的代码单独抽取如下:

    @http.route(‘/wechat_public_account_auth/validate‘, type=‘http‘, auth="none", methods=["GET"])
    def validate_auth(self, signature, timestamp, nonce, echostr, **kw):
        token = "guoodoo"  # 请按照公众平台官网\基本配置中信息填写
        list = [token, timestamp, nonce]
        list_data = []
        for data in list:
            list_data.append(self.to_binary(data))
        list_data.sort()
        _delimiter = self.to_binary(b‘‘)
        str_to_sign = _delimiter.join(list_data)
        hashcode = hashlib.sha1(str_to_sign).hexdigest()
        if hashcode == signature:
            return echostr
        else:
            return ""

    def to_binary(self, value, encoding=‘utf-8‘):
        """Convert value to binary string, default encoding is utf-8
        :param value: Value to be converted
        :param encoding: Desired encoding
        """
        if not value:
            return b‘‘
        if isinstance(value, six.binary_type):
            return value
        if isinstance(value, six.text_type):
            return value.encode(encoding)

        return self.to_text(value).encode(encoding)

    def to_text(self, value, encoding=‘utf-8‘):
        """Convert value to unicode, default encoding is utf-8
        :param value: Value to be converted
        :param encoding: Desired encoding
        """
        if not value:
            return ‘‘
        if isinstance(value, six.text_type):
            return value
        if isinstance(value, six.binary_type):
            return value.decode(encoding)

        return six.text_type(value)

经过比较发现,主要的不同是对token,timestap,nonce字符串进行了编码,代码写好之后,在微信公众平台上填写相关信息进行测试,如下图所示.

全部源代码可以访问这个地址

如果通过,微信开放平台会记录下我们的信息,如果失败无法保存。

原文地址:https://www.cnblogs.com/crazyguo/p/9780657.html

时间: 2024-08-30 04:21:05

odoo后台实现微信公众号验证的相关文章

微信公众号验证TOKEN

服务端验证微信token header('Content-type:text'); define("TOKEN", "weixin"); $signature = $_GET['signature'];//微信待验证参数 $timestamp = $_GET['timestamp'];//时间戳 $nonce = $_GET['nonce'];//随机数 $token = TOKEN;//token 公众号后台配置的 $tmpArr = array($timesta

asp源码微信公众号验证消息真实性

<%Openid = Wx.Get_OpenidResult = Wx.Get_UserInfo(Openid)Function sex(v) if v=1 then sex = "男" else sex = "女" end ifEnd Function%><!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8&quo

微信公众号接入

1.如何申请一个微信测试公众号 点击进入微信公众帐号测试号申请系统用微信扫码登录,就申请到一个微信测试公众号了,就是这么简单. 记录一下appID和appsecret,微信开发的时候会用到,本人的是: appID:wx4cff8e15a7a0801dappsecret:4d7cb4b8b54412d9ef0c6a7c011cd570 2.进行微信公众号验证 <?php define("APPID","wx4cff8e15a7a0801d");//填写自己的AP

微信公众号 $GLOBALS[&#39;HTTP_RAW_POST_DATA&#39;]数据问题

公司的微信公众号最近出现问题,所有的功能都不能用,一开始以为是微信公众号验证的问题,经过排查才发现是$GLOBALS['HTTP_RAW_POST_DATA']这里的问题,微信公众号会把用户的一些操作和输入已数据的格式发送到在微信公众号中配置的url地址(一般是项目的服务器),因为是数据所以就用$GLOBALS['HTTP_RAW_POST_DATA']接收,然后在做数据转换,但是在日志中发现这个值是null,然后经过排查发现不知道什么时候在php.ini中禁掉了这个函数 always_popu

自己的服务器通过微信公众号Token验证测试的代码(Python版)

我在阿里云租了一个云服务器,然后想把这个作为我的微信公众号的后台,启用微信公众号开发者需要正确的响应微信服务器的Token验证,为此把这个验证的Python代码贴出来,只要在服务器上运行这段代码,注意把Token的值改成你自己的值,然后在微信后台填对你的服务器的公网IP,提交就可以通过验证了 #coding=utf-8 html = '''True ''' import socket import signal import errno import re import os import ha

PHP微信公众号后台开发(Yii2实现)

本文内容较多,包括微信接入.获取微信用户信息.微信支付.JSSDK配置参数获取等部分.如果读者对微信开发没有一个主观上的认识,那么建议读者先研读微信公众平台开发者文档,然后再阅读本文,效果更佳! 微信开发的完整例子已经整理在Github,欢迎查看: yii2-wechat-demo.[八宝粥的博客] 接入微信 Yii2后台配置 1.在app/config/params.php中配置token参数 return [ //微信接入 'wechat' =>[ 'token' => 'your tok

微信公众号开发(3)---使用开源组件开发进行接口验证

在经过一系列的微信开发后,关于微信的开发确实内容很庞大,一些基础的组件都要有我们开发者进行编写,有没有简单的方法呢? 哈哈----在开源社区中无意中找到了关于微信全套开发的sdk,里面包含了微信开发中所有的功能实现,作者是binarywang,也是一直在更新,社区还是挺活跃的. 献上 github地址: https://github.com/Wechat-Group/weixin-java-tools   !里面有一些开发的文档,大大便利我们的开发-- 接口配置(无需我们的工具类,一些验证已经帮

总想自己动动手系列&#183;3&#183;如何让微信公众号和外网服务交互之通过TOKEN验证(准备篇&#183;1)

一.准备工作 (1)准备一个微信公众号(对私的订阅号或者对公的服务号). (2)准备一台部署了web应用,并且已经发布出去的Linux服务器(需要说明的是:微信公众号强烈建议使用80端口,使用其他自定义端口貌似根本不通,后面会有说明). 先科普说明一下: 1.微信公众号的注册分为2种类型,这个很简单,按照官方注册流程按部就班地填写基本不会出现问题. 2.刚注册的订阅号和公众号是"非认证"状态的(本人注册的是对私的订阅号,目前处于非认证状态). 3.微信官方将认证审核流程托管到了第三方机

Spring Boot 开发微信公众号后台

Hello 各位小伙伴,松哥今天要和大家聊一个有意思的话题,就是使用 Spring Boot 开发微信公众号后台. 很多小伙伴可能注意到松哥的个人网站(http://www.javaboy.org)前一阵子上线了一个公众号内回复口令解锁网站文章的功能,还有之前就有的公众号内回复口令获取超 2TB 免费视频教程的功能(免费视频教程),这两个都是松哥基于 Spring Boot 来做的,最近松哥打算通过一个系列的文章,来向小伙伴们介绍下如何通过 Spring Boot 来开发公众号后台. 1. 缘起