目录

  • 笔记-微信订阅号开发流程
  • 创建菜单
  • 网页授权:
  • js-sdk


笔记-微信订阅号开发流程

创建菜单

先进入:https://mp.weixin.qq.com/ 创建一个小程序订阅号:
订阅号和服务号的区别:

  • 订阅号相当于一个群里面的一个用户,他发的消息需要打开订阅号助手里面才能查看,个人就能申请。
  • 服务号相当于一个好友,可以“单独”发消息给你,但是需要企业认证才能申请 。

所以我们这里做的是订阅号开发
订阅号有可视化操作界面,怎么设置看微信文档就行了,我们这里讲一些程序员怎么用代码来写订阅号:
首先进入微信公众号文档的 开发 选项的 开发者工具 里面的 公众平台测试号,登录

首先 给测试号加一个菜单,先使用我们的appid 和 appsecret(密码) 获取 access_token;

微信开发者工具订阅设置 微信订阅号功能开发_php

获取到access_token后,就可以用access_token来创建我们的菜单了:

微信开发者工具订阅设置 微信订阅号功能开发_公众号_02


其中body填你的菜单,具体怎么创建可以查看微信公众号文档:

//这是我随便建的的菜单
{
  "button": [
    {
      "type": "view",
      "name": "小米商城系统",
      "url": "http://47.117.121.44:3000/dist/index.html#/"
    },
    {
      "type": "click",
      "name": "按钮",
      "key": "图书管理系统"
    },
    {
      "name": "大菜单",
      "sub_button": [
        {
          "type": "view",
          "name": "小米商城后台",
          "url": "http://47.117.121.44:3000/object_admin/index.html"
        },
        {
          "type": "click",
          "name": "图书管理系统",
          "key": "图书管理系统"
        }
      ]
    }
  ]
}

网页授权:

访问地址:(转二维码扫码。或者放到菜单中点击)

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx0c72fc5efe593f65&redirect_uri=http%3A%2F%2F1.sswmouse.applinzi.com%2Fb.php&response_type=code&scope=snsapi_userinfo&state=123&connect_redirect=1#wechat_redirect

配置b.php文件:
前往文件查看
配置域名:

**https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index** 下可以修改的地方配置域名

获取微信普通access_token:

**https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx0c72fc5efe593f65&secret=302fc9886039a87c37c25795476716d2**

创建微信菜单

https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95&form=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E5%88%9B%E5%BB%BA%E6%8E%A5%E5%8F%A3%20/menu/creat

关于网页授权的两种scope(域)的区别:

  • snsapi_base 用来获取进入页面的用户的openid 是静默授权
  • snsapi_userinfo 是用来获取用户的基本信息的 授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

网页授权access_token和普通access_token的区别:(二者有效期均为二个小时)

  • 在用户授权给公众号后,公众号可以获取到一个网页授权特有的接口调用凭证(网页授权access_token),通过网页授权access_token可以进行授权后接口调用,如获取用户基本信息;
  • 其他微信接口,需要通过基础支持中的“获取access_token”接口来获取到的普通access_token调用。

三种id的区别:

  • openid 用户关注公众号产生的 用户在不同公众号中的openid不一样
  • UnionID 如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为同一用户,对同一个微信开放平台下的不同应用(移动应用、网站应用和公众帐号),unionid是相同的。
  • appid 开发者发布的公众号id 每个公众号id不一样

用户授权步骤:

1.用户同意授权,获取code(code有效期为五分钟,同时只能有一个有效,一个code只能使用一次)

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx0c72fc5efe593f65&redirect_uri=http%3A%2F%2F1.sswmouse.applinzi.com%2Fb.php&response_type=code&scope=snsapi_userinfo&state=123&connect_redirect=1#wechat_redirect
 appid //公众号id
 redirect_uri // 重定向 写你同意授权后跳转的界面 即 新浪云的b.php (地址需要url转码)
 response_type // 返回值类型 写 code 
 scope // 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 ) 
 state // 附带的参数 可以随便写 开发者可以填写a-zA-Z0-9的参数值,最多128字节

2.通过code换取网页授权access_token

$code = $_GET["code"]; //获取code
$appid = 'wx0c72fc5efe593f65'; //填自己的appid 
$secret = '302fc9886039a87c37c25795476716d2'; //填自己的appid密码
//写一个 php版本的网络请求,这里叫curl请求
$url_str = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$secret."&code=".$code."&grant_type=authorization_code";
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url_str);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch); // 获取输出 包含网络版access_token
curl_close($ch); 
$res1 = json_decode($output , true); //将获取的信息进行json解析

3.拉取用户信息(需scope为 snsapi_userinfo)

$access_token = $res1["access_token"]; //从上一步网络请求中获取 网络授权的access_token
$openid = $res1["openid"]; // 获取openid
// 通过 网络版 access_token ---> 用户的信息
$url_str = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url_str);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output2 = curl_exec($ch); // 获取输出 即用户信息
curl_close($ch);
$res2 = json_decode($output2 , true); //将获取的信息进行json解析
  1. 展示结果
    将步骤2,3的配置放到b.php中 用 <?php 内容 ?>
    下面展示:
    //放到 b.php 中
<!DOCTYPE html>
<html lang="en">
  <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
  </head>
  <body>
      <h1>姓名: <?php echo($res2["nickname"]); ?></h1>
      头像: <img style="width: 100px;" src="<?php echo($res2["headimgurl"]); ?>" alt="">
  </body>
</html>

5.配置域名:
在微信测试账号管理界面下
有一个为修改的按钮 点击修改域名
6.测试:
将步骤1配置的网络链接放到公众号的按钮上
或者将其转变成二维码 扫码测试

js-sdk

第一步 获取access_token 需要用到appid 和 appid的密码 (获取方法见文档或者上一次笔记)

第二步 获取票据
https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi //ACCESS_TOKEN 替换成自己的access_token

第三步 配置域名
去测试和界面 JS接口安全域名 配置
第四步 编写js-sdk

<?php 
//获取当前页面的url 
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
//生成随机数,长度16位 
$nonce_str = "lkioj8uy675tgfr4";
//获取票据 
$jsapi_ticket = "LIKLckvwlJT9cWIhEQTwfB0awuSrbj0cp6gq3Ey43FWkzgNtpLoZ_Mbf_NuS5u9Q8bbm5pgKDSOVgg5ms22smg";
//获取时间戳 
$time = time();
//拼接singnature--签名
$row_string = "jsapi_ticket=$jsapi_ticket&noncestr=$nonce_str×tamp=$time&url=$url";
//singnature加密--签名
$singnature = sha1($row_string);
?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
</body>
<script src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script>
	  wx.config({
    	debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
      	appId: 'wx0c72fc5efe593f65', // 必填,公众号的唯一标识
      	timestamp: '<?php echo $time; ?>', // 必填,生成签名的时间戳
      	nonceStr: '<?php echo $nonce_str; ?>', // 必填,生成签名的随机串
      	signature: '<?php echo $singnature; ?>',// 必填,签名
      	jsApiList: [] // 必填,需要使用的JS接口列表
  	});
</script>
</html>

仅代表个人笔记