微信企业号回调模式验证与发送消息

最近放假闲着无聊,研究了一下微信企业号, 打算通过企业号做一个运维报警信息发送的功能,记录自己的操作

第一步

注册企业号,网上一搜一大把的教程,这里略过  微信企业号登录地址  https://qy.weixin.qq.com/

第二步  登录后 点左侧 应用中心 -新建应用

第三步  在第二步第一图中的自建应用下面找到刚刚新建的应用 拉到最下面有一个模式选择,点击回调模式 会看到下图界面

Token 和EncodingAESKey 点击随机获取即可,上面的url需要你有自己的服务地址  你的服务接口需要跟据微信规则对请求信息加解密,然后返回一个明文字符串,后面会上代码   url先留空,等下服务弄好再回来填写    ,此时微信端就设置完成  页面不要关闭

第四步  先上验证url代码  python版本实现  本人是java程序员,用python来搞这个也是一时兴趣,用起来到是比java方便些

# -*- coding:utf-8 -*-
from SimpleHTTPServer  import SimpleHTTPRequestHandler
import httpserver
from SocketServer  import ThreadingMixIn
from SocketServer  import ThreadingTCPServer
import SocketServer
from SocketServer  import BaseRequestHandler
import urlparse
from WXBizMsgCrypt import WXBizMsgCrypt
import xml.etree.cElementTree as ET

hostIP = ‘‘
portNum = 8080

serverMessage = "msg_signature"

sToken = "第三步中的token"
sEncodingAESKey = "第三步中的EncodingAESKey"
sCorpID = "这个是你的企业id 在企业号主页面设置中账号信息里有"

class mySoapServer(SimpleHTTPRequestHandler ):
    def do_head(self):
        pass

    def do_GET(self):
        try:
            if self.path.find(serverMessage) == -1:
                self.send_error(404, message=None)
                return

            # 解析请求
            result = urlparse.urlparse(self.path)
            params = urlparse.parse_qs(result.query,True)
            print params
            sVerifyMsgSig = params[‘msg_signature‘][0]
            sVerifyTimeStamp =params[‘timestamp‘][0]
            sVerifyNonce =params[‘nonce‘][0]
            sVerifyEchoStr =  params[‘echostr‘][0]

            wxcpt = WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID)
            ret, sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp, sVerifyNonce, sVerifyEchoStr)

            print "ret=",ret
            self.send_response(200, message=None)
            self.send_header(‘Content-type‘, ‘text/html‘)
            self.end_headers()

            if ret == 0:
                res = sEchoStr.decode("utf8")
            else:
                res = "%s" % ret
            print  res
            self.wfile.write(res.encode(encoding=‘utf_8‘, errors=‘strict‘))
        except IOError:
            self.send_error(404, message=None)

def GetQuery(str):
    params = str[str.index("?") + 1:]

    parsed_result = {}

    list = [param for param in params.split(‘&‘)]

    for item in list:
        if item.find("=") > -1:
            name = item[:item.index("=")]
            value = urlparse.urlparse(item[item.index("=") + 1:])
        else:
            name = item
            value = ""

        if name in parsed_result:
            parsed_result[name].append(value)
        else:
            parsed_result[name] = [value]

    return parsed_result  

class ThreadingHttpServer(ThreadingMixIn, ThreadingTCPServer):
    pass

myServer = ThreadingHttpServer((hostIP, portNum), mySoapServer)
print("Server Started ....")
myServer.serve_forever()
myServer.server_close()

把上面代码保存为server.py     把代码中的 sToken ,sEncodingAESKey sCorpID 换成你自己的,其它不用动

在服务器上运行

python server.py 

建议使用python2.6.*版本  其它版本未测试 不保证运行正常

其中 WXBizMsgCrypt包为微信提供 下载地址 http://qydev.weixin.qq.com/download/python.zip此包依赖 pycrypto第三方库 请自行google安装 

第五步   返回第三步中填写url       http://你的ip:8080  点击验证  不出意外验证通过

当然,本人python小白到是出了很多意外,坑还比较多, 不过做的过程没有记录问题,只记下了最终正确的过程

第六步  上面过程验证通过后创建一个管理组,这里貌似至少有两个人关注公众号,因为管理组要求至少有一个非企业号创建人

添加好后应该就会拿到CorpID 和 Secret  这两个记录下来,之后发消息需要

第七步 发送消息  上代码

#!/usr/bin/python
# encoding: utf-8
# -*- coding: utf8 -*-

import urllib
import urllib2
import json
import datetime

class WeiXinSendMsgClass(object):
    def __init__(self):
        self.access_token = get_token()
        self.to_user = ""
        self.to_party = ""
        self.to_tag = "2"
        self.msg_type = "text"
        self.agent_id = 1
        self.content = ""
        self.safe = 0

        self.data = {
            "touser": self.to_user,
            "toparty": self.to_party,
            "totag": self.to_tag,
            "msgtype": self.msg_type,
            "agentid": self.agent_id,
            "text": {
                "content": self.content
            },
            "safe": self.safe
        }

    def send(self, to_user, content):
        if to_user is not None and content is not None:
            self.data[‘touser‘] = to_user
            self.data[‘text‘][‘content‘] = content
        else:
            print
            raise RuntimeError
        import requests
        import json

        url = "https://qyapi.weixin.qq.com/cgi-bin/message/send"
        querystring = {"access_token": self.access_token}

        payload = json.dumps(self.data, encoding=‘utf-8‘, ensure_ascii=False)

        headers = {
            ‘content-type‘: "application/json",
            ‘cache-control‘: "no-cache",
        }

        response = requests.request("POST", url, verify=False,data=payload, headers=headers, params=querystring)

        return_content = json.loads(response.content)
        if return_content["errcode"] == 0 and return_content["errmsg"] == "ok":
            print "Send successfully! %s " % return_content
        else:
            print "Send failed! %s " % return_content

def get_token():
    parameters = {
        "corpid": "上一步中记录的CorpID",
        "corpsecret": "上一步记录的Secret"
    }
    url_parameters = urllib.urlencode(parameters)
    token_url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?"
    url = token_url + url_parameters
    response = urllib2.urlopen(url)
    result = response.read()
    token_json = json.loads(result)
    token_json = token_json[‘access_token‘]
    return  token_json

上面代码只需要把 corpid 和 corpsecret 换成自己的就可以了   保存为wx_sendMessage.py

然后就可以在你需要发送消息的地方调用 啦

# -*- coding:utf-8 -*-
import wx_sendMessage
msg = wx_sendMessage.WeiXinSendMsgClass()
msg.send("目标用户账号", "这里是发送的消息")

大功告成,到此为止已经可以完成对某一个关注企业号的用户发送消息啦,可是还不够,群发是必须滴

群组发送的话就再扩展一下send方法  再加一个参数totag  就是标签id

可以在通讯录新建标签,然后把相应的人员加进去    见下图   右侧标签id就是需要传的参数值

修改如下,前后代码省略

    def send(self, to_user, totag,content):
        if to_user is not None and content is not None:
            self.data[‘touser‘] = to_user
            self.data[‘totag‘] = totag
            self.data[‘text‘][‘content‘] = content
        else:
            print
            raise RuntimeError        

好啦,这篇文章到这里就结束 了,如果有同学们正好也在做着跟我同样的事情并且看到我这篇文章的话,有不明白的话可以在文章下面留言,本人看到的话会及时回复的!!!

时间: 2024-10-17 22:06:04

微信企业号回调模式验证与发送消息的相关文章

微信企业号回调模式配置讲解 Java Servlet+Struts2版本 echostr校验失败解决

微信企业号回调模式配置讲解 Java Servlet+Struts2版本 echostr校验失败解决 echostr校验失败,请您检查是否正确解密并输出明文echostr 异常java.security.InvalidKeyException:illegal Key Size 也就是echostr校验失败,请您检查是否正确解密并输出明文echostr这个错误 企业微信登陆地址http://qy.weixin.qq.com/ 配置成功以后 Servlet public void doGet(Htt

python 微信企业号-回调模式接收微信端客户端发送消息并被动返回消息

说明:此代码用于接收手机微信端发送的消息 #-*- coding:utf-8 -*- from flask import Flask,request from WXBizMsgCrypt import WXBizMsgCrypt import xml.etree.cElementTree as ET import sys app = Flask(__name__) @app.route('/index',methods=['GET','POST']) def index():         s

微信企业号-- OAuth2.0验证.net开发

在做企业号 OAuth2.0验证 的时候走了一些弯路,在这里记录一下. 当我查官方的接口文档的时候就给了一下代码: 企业应用中的URL链接(包括自定义菜单或者消息中的链接),可以通过OAuth2.0验证接口来获取成员的身份信息. 通过此接口获取成员身份会有一定的时间开销.对于频繁获取成员身份的场景,建议采用如下方案: 1.企业应用中的URL链接直接填写企业自己的页面地址 2.成员跳转到企业页面时,企业校验是否有代表成员身份的cookie,此cookie由企业生成 3.如果没有获取到cookie,

微信企业号开发php版2-文本消息

返回用户发送的文本消息,修改sample.php <?php //企业号返回用户的文本消息,替换模板的sample.php //@author 易伟 //@date 2014-12-13 //更改corpID,token和encodingAesKey include_once "WXBizMsgCrypt.php"; $encodingAesKey = "H8Ycg6SOGJbrBlfpZlLXe5cREFdzZhts5S0ZjKsbQrV"; $token

微信企业号验证

微信企业号回调模式验证机制官方文档有说明,也是解密字符串后返回解密内容,下面是一个调试通过的接口验证: <?php //添加腾讯提供的接口文件 include_once "WXBizMsgCrypt.php"; //设置自己企业号的相关参数 $encodingAesKey=""; $corpId=""; $token=""; //获取待验证的参数 $sVerifyMsgSig = $_GET["msg_sign

微信公众平台企业号开发—开启回调模式

2014年9月17日,微信发布了期待已久的企业号.网上关于企业号的教程几乎还是0,所以这里分享一下的我的开发经验. 对比于订阅号和服务号的开发,企业号的开发显得更加复杂一点.这大概也是腾讯考虑到企业信息安全性要求比较高的缘故,在消息的收发和一些验证上都增加了加密解密的操作.这就需要开发者认真去阅读官方说明(其实通过官方说明你可以解决几乎所有问题),接下来我开启回调模式的步骤: 1.申请企业号:这个步骤这里就不详细赘述了,可以参考 http://jingyan.baidu.com/article/

我是企业号体验账户 我发送消息:微信错误 errcode=60011,

http://qydev.weixin.qq.com/qa/index.php?qa=3197&qa_1=%E6%88%91%E6%98%AF%E4%BC%81%E4%B8%9A%E5%8F%B7%E4%BD%93%E9%AA%8C%E8%B4%A6%E6%88%B7-%E6%88%91%E5%8F%91%E9%80%81%E6%B6%88%E6%81%AF%EF%BC%9A%E5%BE%AE%E4%BF%A1%E9%94%99%E8%AF%AF&show=3197#q3197 我是企业号

C#开发微信门户及应用(21)-微信企业号的消息和事件的接收处理及解密

原文:C#开发微信门户及应用(21)-微信企业号的消息和事件的接收处理及解密 在上篇随笔<C#开发微信门户及应用(19)-微信企业号的消息发送(文本.图片.文件.语音.视频.图文消息等)>介绍了有关企业号的消息发送,官方特别声明消息是不用加密发送的.但是在回调的服务器上,也就是我们网站的服务器上,微信传过来的消息是加密的,需要我们调用类库对消息和事件进行解密操作,由于官方的例子不全,因此摸索了不少时间,最终顺利解密收到的各种消息和事件.本文主要介绍 微信企业号的消息和事件的接收处理及解密操作.

微信主动发送消息到客户端

微信开发者通过接口给粉丝发送消息: URL链接: https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN 参数: { 'touser' : openid. 'msgtype' : text 'text' : { 'content' => message } } 通过这个可以封装好消息去通知用户.