(基于ruby on rails 的,基于其他编程也可以看看其步骤,大致相似。)
1. 反向代理工具(ngrok)
1.1 ngrok的定义
1.2 开启代理服务
2. 微信接口接入项目
2.1 公众号基本信息与服务器配置
2.2 微信接口与项目交互
3. 自定义菜单
3.1 菜单的基本介绍
3.2 详细说明type = ‘view’链接类型菜单的授权(获取openid或用户基本信息)
4. 消息推送
4.1 客服接口-发消息
4.2 根据openid列表群发消息
5. 被动回复消息
1. 反向代理工具(ngrok)
1.1 ngrok的定义
ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。(有利于我们开发的调试。)
1.2 开启代理服务(选择合适的代理,我这里是本公司内部搭建的)
①下载解压ngrok (ngrok_yolanda.rar);
②运行命令(./yolanda -config=ngrok.cfg -subdomain 自定义的子域名 端口号);
如:./yolanda -config=ngrok.cfg -subdomain xwk 3000
③运行命令后得到一串网址。可以通过此网址就可以访问本地的Web服务了。
2. 微信接口接入项目
2.1 公众号基本信息与服务器配置
公众号开发信息: appid 开发者ID、
AppSecret 开发者密码、
ip 白名单(调用获取 access_token 接口时需要(允许当前设备调用微信接口))。
以GET方式获取access_token请求接口:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential
&appid=APPID&secret=APPSECRET
服务器配置:服务器地址(代理得到的网址)、
token(自定义)、
消息加解密密钥(随机生成)
2.2微信接口与项目交互
启动配置好后的服务器,微信会访问你配置的服务器地址,进入create方法。
本地web服务的create方法可获取来自微信的参数:
timestamp(时间戳)、nonce(随机数)、signature(微信加密签名)、echostr(随机字符串)
SHA1 加密(token(服务器配置的token)、timestamp、nonce) => 匹配 signature =>成功原样返回 echostr => 此时项目就可以调用微信的各个接口了。
3. 自定义菜单
3.1 菜单的基本介绍
button: 一级菜单数组,个数应为1-3个
sub_button:二级菜单数组,个数应为1-5个
type:菜单相应类型
name:菜单标题
key:菜单key值(click事件必须)
url:网页链接(view、miniprogram类型必须)
将自定义菜单以json类型数据传递到相应微信创建菜单的接口:
(例:){:button => [
{
:type => “view”
:name => “菜单标题”
:url => “”
}
]
}
以Post方式请求接口:
https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
在代码中提取微信菜单事件的各属性值:
param_xml=REXML::Document.new(request.body.read)
param_xml.root.elements['FromUserName'].text #微信用户 openid
(ToUserName(开发者)、MsgType(text、even)(消息类型)、Event(事件类型)、EventKey))
3.2 详细说明type = ‘view’链接类型菜单的授权(获取openid或用户基本信息)
授权问题:由于菜单类型为一个链接,但并不确保当前链接的安全性,需要通过用户在授权页面同意之后方可获取到用户的基本信息。
①首先需要在公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权用户基本信息”的配置选项中,修改授权回调域名。
②同意授权,获取 code:
各参数含义:
appid(开发者 ID,公众号的唯一标识) & redirect_uri(回调链接) & response_type=code & scope=snsapi_base(不弹出授权页面。只能获取用户 openid)snsapi_userinfo(可通过 openid拿到昵称、性别、所在地) #wechat_redirect(重定向必带)
由于授权操作安全等级较高,发起授权请求时,微信会对授权链接做正则强匹配校验,如果链接的参数顺序不对,授权页面将无法正常访问
授权后重定向的回调链接地址,需要使用 urlEncode 编码对链接进行处理
如:http://xwk.ddns.yolanda.hk => http%3a%2f%2fxwk.ddns.yolanda.hk
③得到code后获取 openid或用户基本信息:
url="https://api.weixin.qq.com/sns/oauth2/access_token?
appid=APPID&secret=APPSECRET&code=#{code}&grant_type=authorization_code"
authorization_code(授权码)
④成功返回的JSON数据:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
4. 消息推送
3.1 客服接口-发消息(举例)
post_url =
"https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=
#{access_token}"
post_hash = {
:touser => openid, #需要推送到的用户的 openid
:msgtype => "text", #推送类型 (voice、image 等)
:text => { :content => content} #文本信息 (voice音频素材、image图片素材等)
}
result = Base.http_request(post_url,'Post',post_hash)
3.2 根据openid列表群发消息
http请求方式:POST
https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=ACCESS_TOKEN
与推送单条消息需要传递的数据类似(touser中为需要推送用户的openid列表):
{
:touser => [
"OPENID1",
"OPENID2"
],
:msgtype => "text",
:text => { :content => "hello from boxer."}
}
5. 被动回复消息
回复消息的类型有:文本、图片、语音、视频、音乐、图文等。
只需要返回对应格式字符串:
如:
文本消息:
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>
图片:
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image>
<MediaId>
<![CDATA[media_id]]> #通过素材管理中的接口上传多媒体文件所得 的id。
</MediaId>
</Image>
</xml>
(更多的被动回复消息的类型就不展示了,可以在微信公众平台得到更多想要的信息)
(文章还会完善,相应功能或步骤的图片在之后会加上。初次撰写,望以后会越来越好!!!加油!!!!)