获取微信公众号的openid并发送模板消息之前后端


微信公众号获取授权,获取微信用户信息,并且发送模板消息。

简书地址

如今的开发感觉已经离不开微信了,虽然相关的文章已经比微信官网还要多了,但是别人家的再好也是别人家的,自己走一遍还是挺有意义的。

如果是开发环境,还没有审核的微信公众号,那自然是不能发送模板消息的,只能获取到微信用户信息。需要申请个测试的公众号,官网免费申请。申请好以后,需要在”网页服务”->”网页账号”里配置一下oauth2.0的授权回调地址。

测试号

后面的操作就跟下面我正式的开发者平台一样了。

作为前端小白,有机会从零开始申请公众号,开发公众号,自然要学到什么记录什么。
本篇记录下开发环境怎么获取openid并且发送模板消息的。

参考
微信网页开发授权官方文档
微信公众平台,微信网页授权,redirect_uri参数错误,解决方法

获取微信用户信息

1、关注微信公众号
2、绑定微信号称为网页开发者
设置开发者
3、修改微信网页授权
关于网页授权回调域名的说明

先配置服务器,保证根域名下可以访问到微信提供的测试文件。
如果您没有可用的域名,或许这篇文章可以祝您一臂之力。
配置好以后是这样的:
配置好授权后
配置授权域名
设置授权域名

设置好授权域名

  • 注意:这一步如果是tomcat做的容器,将txt文件放在tomcat/webapps/ROOT/下即可。
    如果用的nginx转发的,将文件放在根目录即可。
    比如:nginx如下:
      location / {
          root   /opt/site/alk-patient;
          index  index.html index.htm;
          try_files $uri $uri/ /index.html;
      }
    
    nginx代理网站目录

域名访问设置成功

如果这一步没有配置,域名是加不上去的。
无法配置授权域名

这一步要是有问题不会配,只能说这位后台适合去买庆丰包子。

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
设置ip白名单

4、postman调用发消息

获取access token

  • 发送模板消息
    发送模板消息

收到的消息
收到消息

完美!
收关!


评论
  目录