如今的开发感觉已经离不开微信了,虽然相关的文章已经比微信官网还要多了,但是别人家的再好也是别人家的,自己走一遍还是挺有意义的。
如果是开发环境,还没有审核的微信公众号,那自然是不能发送模板消息的,只能获取到微信用户信息。需要申请个测试的公众号,官网免费申请。申请好以后,需要在"网页服务"->"网页账号"里配置一下oauth2.0的授权回调地址。
后面的操作就跟下面我正式的开发者平台一样了。
作为前端小白,有机会从零开始申请公众号,开发公众号,自然要学到什么记录什么。
本篇记录下开发环境怎么获取openid并且发送模板消息的。
参考
微信网页开发授权官方文档
微信公众平台,微信网页授权,redirect_uri参数错误,解决方法
获取微信用户信息
1、关注微信公众号
2、绑定微信号称为网页开发者
3、修改微信网页授权
关于网页授权回调域名的说明
在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头;
授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com无法进行OAuth2.0鉴权
如果公众号登录授权给了第三方开发者来进行管理,则不必做任何设置,由第三方代替公众号实现网页授权即可。
先配置服务器,保证根域名下可以访问到微信提供的测试文件。
如果您没有可用的域名,或许这篇文章可以祝您一臂之力。
配置好以后是这样的:
配置授权域名
- 注意:这一步如果是tomcat做的容器,将txt文件放在tomcat/webapps/ROOT/下即可。
如果用的nginx转发的,将文件放在根目录即可。
比如:nginx如下:
location / {
root /opt/site/alk-patient;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
如果这一步没有配置,域名是加不上去的。
这一步要是有问题不会配,只能说这位后台适合去买庆丰包子。
4、获取code
回调url要用urlencode处理,比如我的回调地址是https%3a%2f%2fxhapp.3vyd.com%2fMP_verify_5J1FbKvfyqtzU26N.txt
设置在微信api里如下
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=https%3a%2f%2fxhapp.3vyd.com%2fMP_verify_5J1FbKvfyqtzU26N.txt&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect
将该URL用微信开发者工具访问后
同意授权,跳转成功后,想要的code在url里
5、获取微信用户信息
获取到了code以后,调用服务端的接口,获取用户信息:
服务端看微信官网API,出问题概率太小,不再贴代码。粘一下服务端打出来的log:
=============== REQUEST START ===============
request-id:d0ae146d-86fa-4dfb-8224-f0f90b234e4a
request-uri: /api/public/weixin/authorized/001g4LGs0ns6xf1qaPGs0kS1Hs0g4LG4
request-method: :get
request-query:
request-body:
2019-06-22 15:54:16,796 [XNIO-1 task-2] INFO alk-wxapi.routes.weixin - 请求微信access-token的 url: %s https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=001g4LGs0ns6xf1qaPGs0kS1Hs0g4LG4&grant_type=authorization_code
2019-06-22 15:54:17,056 [XNIO-1 task-2] INFO alk-wxapi.routes.weixin - ====== 请求微信access-token返回结果 ===== : {:access_token 22_laqOVUrxrg5URkqS18gzDqdvgsHlkl5tXxBU6pbaqI9kIqdAdDVMk7zw0gMmoUlR2F1uQnhyzfdlmyixsP3qLA, :expires_in 7200, :refresh_token 22_eHVuzmK9VGxgQsxQV0qwCx9eNoECv7506YXsaXQH9LxEMifD5KwXkTRKAG2WxdlIkj9ZthbSC2wFbtaYGfNClg, :openid oIzsW5sck7l9kmtwDb66_RAvdepY, :scope snsapi_userinfo}
2019-06-22 15:54:17,057 [XNIO-1 task-2] INFO alk-wxapi.routes.weixin - 请求微信用户信息的 url: %s https://api.weixin.qq.com/sns/userinfo?access_token=22_laqOVUrxrg5URkqS18gzDqdvgsHlkl5tXxBU6pbaqI9kIqdAdDVMk7zw0gMmoUlR2F1uQnhyzfdlmyixsP3qLA&openid=oIzsW5sck7l9kmtwDb66_RAvdepYlang=zh_CN
2019-06-22 15:54:17,256 [XNIO-1 task-2] INFO alk-wxapi.routes.weixin - ====== 请求微信用户信息user-info返回结果 ===== : {:sex 1, :nickname 马海强, :city Qingdao, :headimgurl http://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLqxGWwK3lTGAffuGickR7V1VjAiawaAicIsoxGGAD0yWf2toLUZGAiaFHwS8QDMvZ2vLW3QJloKTnIPQ/132, :openid oIzsW5sck7l9kmtwDb66_RAvdepY, :language zh_CN, :province Shandong, :country CN, :privilege []}
2019-06-22 15:54:38,673 [XNIO-1 task-2] INFO jdbc.sqlonly - SELECT * FROM `t_patient` p WHERE p.`deleted` = FALSE AND p.`openid` = 'oIzsW5sck7l9kmtwDb66_RAvdepY';
2019-06-22 15:54:38,834 [XNIO-1 task-2] INFO jdbc.sqlonly - batching 1 statements: 1: INSERT INTO `t_patient`(`patient_id`, `nick_name`, `gender`, `openid`,
`province`, `city`, `country`, `headimgurl`, `unionid`, `create_time`, `status`) values ('a8dfb64eb45549b0b109e7170ac131e0',
'马海强', '男', 'oIzsW5sck7l9kmtwDb66_RAvdepY', 'Shandong', 'Qingdao', 'CN', 'http://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLqxGWwK3lTGAffuGickR7V1VjAiawaAicIsoxGGAD0yWf2toLUZGAiaFHwS8QDMvZ2vLW3QJloKTnIPQ/132',
NULL, NOW(), 20);
2019-06-22 15:54:38,841 [XNIO-1 task-2] INFO alk-wxapi.routes.weixin - 微信公众号注册新用户,用户信息:%s {:sex 1, :nickname 马海强, :city Qingdao, :headimgurl http://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLqxGWwK3lTGAffuGickR7V1VjAiawaAicIsoxGGAD0yWf2toLUZGAiaFHwS8QDMvZ2vLW3QJloKTnIPQ/132, :openid oIzsW5sck7l9kmtwDb66_RAvdepY, :language zh_CN, :province Shandong, :country CN, :privilege []}
2019-06-22 15:54:38,843 [XNIO-1 task-2] INFO alk-wxapi.middleware.log-interceptor - response: {:code 1, :message "操作成功", :data {:sex 1, :nickname "马海强", :city "Qingdao", :headimgurl "http://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLqxGWwK3lTGAffuGickR7V1VjAiawaAicIsoxGGAD0yWf2toLUZGAiaFHwS8QDMvZ2vLW3QJloKTnIPQ/132", :openid "oIzsW5sck7l9kmtwDb66_RAvdepY", :language "zh_CN", :province "Shandong", :country "CN", :privilege []}}
request-id:d0ae146d-86fa-4dfb-8224-f0f90b234e4a
2019-06-22 15:54:38,853 [XNIO-1 task-2] INFO alk-wxapi.middleware.log-interceptor -
=============== response END ===============
到此,获得用户信息。
公众平台配置模板消息
1、从模板库中选择适合自己的模板,添加称为自己的模板,获取的模板id
2、查看模板消息详情,确认字段内容
3、公众号里基本配置->IP白名单配置当前网络外网地址IP
4、postman调用发消息
-
发送模板消息
收到的消息
完美!
收关!