微信公众号入手开发

(基于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:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

 

各参数含义:

 

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>

(更多的被动回复消息的类型就不展示了,可以在微信公众平台得到更多想要的信息)

(文章还会完善,相应功能或步骤的图片在之后会加上。初次撰写,望以后会越来越好!!!加油!!!!)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值