平常我们有些写各种网站, 个人博客系统, 物流管理系统, 通信录管理系统, 校园二手网站. 我们都知道, 只需要租用一个服务器, 再配置一个备案好的域名, 就可以在浏览器上进行访问了.
不知大家, 不知大家有没有想过, 将你搭的网站对接微信公众号, 利用微信这个大用户软件, 来为你引流呢?


本文环境 版本
操作系统 Ubuntu 16.04.03
运行方式 VMware虚拟机
编程语言 PHP
项目局域网地址 http://192.168.253.1/audit

enter description here

Q: 你在搞笑吗? 不是直接在微信里面打开的吗?

A: 直接用微信打开是可以, 然后你在微信里面让用户再注册一个账号? 对于大部分不想麻烦的小伙伴来说, 他们会对此忘而却步. 其实微信是提供接口, 让你可以获取到微信的用户名,和用户头像的.

一般来说分为三种情况

  1. 使用通过的微信开放平台( 注意,不是微信公众平台)

    需要开发者认证

  2. 使用认证过的订阅号.

    需要微信认证

  3. 使用认证过的服务号

需要微信认证

额, 那其实不是没认证就没得玩?

好吧, 实际是的确如此, 不过. 如果你真的只是想玩玩. 你可以去这儿. https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

enter description here

微信测试号

优点

  • 拥有几乎所有接口,
  • 以及享受局域网IP回调(意思就是说,可以支持局域网, 这是正式微信平台号所不具备的)
  • 发送模板消息, 不用审核.

    缺点

  • 只支持最多100个用户
  • 不能设置名称, 头像.

对于一些只是想玩玩, 或者小规模用户的是没有问题的.

跟我一起操作

登录

扫码登录就好了;

微信token

新建php文件(啥语言都可以,自行修改)

public function token()
{
$nonce = $_GET['nonce'];
$token = 'weixin';
$timestamp = $_GET['timestamp'];
$echostr = $_GET['echostr'];
$signature = $_GET['signature'];
//形成数组,然后按字典序排序
$array = array();
$array = array($nonce, $timestamp, $token);
sort($array);
//拼接成字符串,sha1加密 ,然后与signature进行校验
$str = sha1(implode($array));
if ($str == $signature && $echostr) {
//第一次接入weixin api接口的时候
echo $echostr;
exit;
}
}

然后在测试号里填写路径和token, 认证成功后就可以继续操作了

enter description here

TIP: 这个链接并不需要一直可访问,只需要第一次认证通过就OK, 甚至认证过可以直接删掉.

修改回调域名, 接口> 网页授权获取用户基本信息 > 修改

enter description here

只有测试号支持ip

微信的接口

接口详情可在https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141013里查看

注意:

  1. 这些接口不是简单的对接就好了, 每次请求都需要携带access_token,
  2. 而获取access_token, 每天有获取上限.
  3. access-token具有有效期(7200s) , 过期需要重新获取.

获取access_token的方法https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E5%9F%BA%E7%A1%80%E6%94%AF%E6%8C%81&form=%E8%8E%B7%E5%8F%96access_token%E6%8E%A5%E5%8F%A3%20/token

获取用户信息, 实现免登录的效果

enter description here

在这儿我们需要三个接口

所用接口:

接口一:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
接口二:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
接口三:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
接口四: 刷新access_token
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

接口返回数据, 详见https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

  1. 第一步:用户同意授权,获取code
    示例:( 注意appid, redirect_url是变量)
    $str = 'http://open.weixin.qq.com/connect/oauth2/authorize?appid=wx20874ebf2ea1fc7f&redirect_uri=' . urlencode("http://192.168.253.1/audit/client/") . '&response_type=code&scope=snsapi_base&state=123#wechat_redirect';

enter description here

  1. 第二步:通过code换取网页授权access_token

    示例

    $data = json_decode(file_get_contents("https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $this->appid . "&secret=" . $this->secret . "&code=" . $_GET['code'] . "&grant_type=authorization_code"));

注意: 此处的access_token与上面的access_token不是同一个东西

  1. 第三步: 通过access_token换取userinfo
    示例
    $userInfo = json_decode(file_get_contents("https://api.weixin.qq.com/sns/userinfo?access_token=" . $data->access_token . "&openid=" . $data->openid . "&lang=zh_CN"));
  1. 刷新access_token, 如果需要

这是我画的一个请求过程图, 可以帮助理解

enter description here

测试演示

1. 将授权url发给手机

非必需, 也可以在电脑上, 也可以写到公众号子菜单中点击进入.

2. 关注测试号

不然会这样

enter description here

关注后点击

enter description here

enter description here

测试号访问成功.

额, 关于后台代码原理就不讲了.
类似于一个从微信服务器发来的表单, 登录进了系统, 然后再把这些数据存入数据库就好了.

正式号运行效果

enter description here

enter description here