微信服务号调研

2020-02-14  本文已影响0人  Bocad

微信服务号

1)申请服务号

申请公众号网页

image.png

邮箱激活后,选择公众号类型,这里选择服务号


image.png

2)开发者配置

1) 公众平台官网登录之后,找到“基本配置”菜单栏


image.png

2) 填写配置

url填写:http://外网IP/wx 。外网IP请到腾讯云购买成功处查询。 http的端口号固定使用80,不可填写其他。

Token:自主设置,这个token与公众平台wiki中常提的access_token不是一回事。这个token只用于验证开发者服务器。

3)用户故事

某产品做工人考试,那么这三个工人要关注你的服务号,你还要获取这三个工人的openID,同时openID与产品数据库对应的工人信息绑定,这样就可以遍历工人数组提取出openID,这时就可以创建模版消息对openID进行群发

4)对应技术点分析

获取openID

1、配置回调域名
进入公众号,接口权限,找到网页服务,网页获取用户基本信息


image.png

点进去设置REDIRECT_URI


image.png

2、拼接授权地址
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。

REDIRECT_URI1中设置的重定向地址

尤其注意:由于授权操作安全等级较高,所以在发起授权请求时,微信会对授权链接做正则强匹配校验,如果链接的参数顺序不对,授权页面将无法正常访问

参考链接(请在微信客户端中打开此链接体验
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_base&state=123#wechat_redirect

参数说明

参数 是否必须 说明
appid 公众号的唯一标识
redirect_uri 授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理
response_type 返回类型,请填写code
scope 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
state 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
#wechat_redirect 无论直接打开还是做页面302重定向时候,必须带此参数

3、获取返回结果
对应工人用微信访问2的拼接网址,页面将跳转至 redirect_uri/?code=CODE&state=STATE。获取code后,请求以下链接获取access_token,openID: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
参数说明

参数 是否必须 说明
appid 公众号的唯一标识
secret 公众号的appsecret
code 填写第一步获取的code参数
grant_type 填写为authorization_code

返回说明
正确时返回的JSON数据包如下

{
  "access_token":"ACCESS_TOKEN",
  "expires_in":7200,
  "refresh_token":"REFRESH_TOKEN",
  "openid":"OPENID",
  "scope":"SCOPE" 
}
参数 描述
access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
scope 用户授权的作用域,使用逗号(,)分隔

发送模版消息

创建模版消息


image.png

模版消息发送样式


image.png
发送模版消息代码
<?php
$ACCESS_TOKEN = "替换你的ACCESS_TOKEN";
//OpenID数组
$touser = [
    'ouD7BuHpIKRXPIz7pdrwI9IwDRCU',
    'ouD7BuI36wSUZgteyiydmDrldQLU',
    'ouD7BuLejq7R4Vbuyh41bH778cg0'];

//发送模板消息URL
$url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" . $ACCESS_TOKEN;

//遍历发送微信消息
foreach ($touser as $value) {
    $data = getDataArray($value);
    $json_data = json_encode($data);//转化成json数组让微信可以接收
    $res = https_request($url, urldecode($json_data));//请求开始
    $res = json_decode($res, true);
    if ($res['errcode'] == 0 && $res['errcode'] == "ok") {
        echo "发送成功!<br/>";
    }
}

//获取发送数据数组
function getDataArray($value)
{
    $data = array(
        'touser' => $value, //对应接收消息的工人OpenID
        'template_id' => "mfopDNUlvoBGGsPLB-d_nrfL8Je92xnTq5vk5ZBxL-w",//改成自己创建的模板消息id,在微信后台模板消息查看
        'url' => "http://消息点击后跳转的地址", //自己网站链接
        'data' => array(
            'first' => array(
                'value' => "亲爱的同学,您有考试提醒,请查阅。",
                'color' => "#000"
            ),
            'keyword1' => array(
                'value' => "2019下半年从业资格证考试",
                'color' => "#f00"
            ),
            'remark' => array(
                'value' => "\n点击链接地址开始考试>>>",
                'color' => "#3d3d3d"
            ),
        )
    );
    return $data;
}


//curl请求函数
function https_request($url, $data = null)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    if (!empty($data)) {
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
}
?>

5)已知的受限条件

1)多个服务器多个地址
可以统一使用一个开发者账号,公众号开发者使用中控服务器统一获取和刷新access_token,其他业务逻辑服务器所使用的access_token均来自于该中控服务器。

2)消息限制
每个开发者账号可以同时使用25个模板消息,当前每个账号的模版消息日调用上限是10万次(该数字会随着关注者数量增长儿增长,当账号粉丝数超过10W/100W/1000W时,模板消息的日调用上限会相应提升具体以后台数字为准),模版消息有固定的样式头,并且为纯文本消息,消息字数限制为200

上一篇 下一篇

猜你喜欢

热点阅读