目录
- 笔记-微信订阅号开发流程
- 创建菜单
- 网页授权:
- js-sdk
笔记-微信订阅号开发流程
创建菜单
先进入:https://mp.weixin.qq.com/ 创建一个小程序订阅号:
订阅号和服务号的区别:
- 订阅号相当于一个群里面的一个用户,他发的消息需要打开订阅号助手里面才能查看,个人就能申请。
- 服务号相当于一个好友,可以“单独”发消息给你,但是需要企业认证才能申请 。
所以我们这里做的是订阅号开发
订阅号有可视化操作界面,怎么设置看微信文档就行了,我们这里讲一些程序员怎么用代码来写订阅号:
首先进入微信公众号文档的 开发 选项的 开发者工具 里面的 公众平台测试号,登录
首先 给测试号加一个菜单,先使用我们的appid 和 appsecret(密码) 获取 access_token;
获取到access_token后,就可以用access_token来创建我们的菜单了:
其中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解析
- 展示结果
将步骤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>
仅代表个人笔记