微信小程序----API、获取openid、消息订阅
文章目录
- 微信小程序二
- 小程序API
- 基础:
- 外部 api 的引用示例:
- 订阅消息实战
- 1. 搭配环境,建目录
- 2. 获取openid
- 3.获取用户授权
- 4. 调用接口下发订阅消息
- 5.其他问题:
微信小程序二
小程序API
https://www.w3xue.com/mobile/wxminiapp/hpm41q8p.html
基础:
API,全称Application Programming Interface,即应用程序编程接口。
API 是一些预先定义函数,目的是用来提供应用程序与开发人员基于某软件或者某硬件得以访问一组例程的能力,并且无需访问源码或无需理解内部工作机制细节。
API 就是操作系统给应用程序的调用接口,应用程序通过调用操作系统的 API而使操作系统去执行应用程序的命令(动作)。在 Windows 中,系统API是以函数调用的方式提供的。
说明:
wx.on 开头的 API 是监听某个事件发生的API接口
如:接受一个CALLBACK函数作为参数,当该事件触发时,会调用CALLBACK函数。
如未特殊约定,其他API接口都接受一个OBJECT作为参数。
OBJECT中可以指定success,fail,complete来接收接口调用结果。
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
success | Function | 否 | 接口调用成功的回调函数 |
fail | Function | 否 | 接口调用失败的回调函数 |
complete | Function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
外部 api 的引用示例:
js文件:
// pages/demo02/demo02.js
const app = getApp()
Page({/*** 页面的初始数据*/data: {code:'',testList:[],dreamCode:'',dreamResult:[]},/*** 生命周期函数--监听页面加载*/onLoad(options) {self=this;},test1:function() {//访问外部api需请求:wx.request({url: 'http://api.tianapi.com/starinfo/index',method:'GET',//请求参数:data:{key:'9b46f4069f578a5808847c85ce6b93eb',name:'刘德华'},//接口调用成功的回调函数:success:function(res){console.log(res.data);self.setData({testList:res.data.code,testList:res.data.newslist})}})},test2:function() {wx.request({url: 'http://api.tianapi.com/dream/index',method:'GET',data:{key:'9b46f4069f578a5808847c85ce6b93eb',num:5,word:'西瓜'}, success: function(res) {console.log(res.data)//页面获得数据/*self.setData({dreamCode:res.data.code,dreamResult: res.data.newslist})*/} })}
})
wxml文件:
<!--pages/demo02/demo02.wxml-->
<text>pages/demo02/demo02.wxml</text>
<button open-type="share" bindtap="test2">周公解梦</button>-
<view wx:for="{{dreamResult}}" ><view>梦到{{dreamResult[index].title}}------{{dreamResult[index].result}}</view>
</view><button type="primary" bindtap="test1">明星百科大全</button>
<view wx:for="{{testList}}" ><view>名字:{{testList[index].nationality}}</view>
</view>
订阅消息实战
1. 搭配环境,建目录
注意:创建项目时先不要使用云开发,避免不必要的目录
在app.js文件中初始云环境
onLaunch() {wx.cloud.init({env:"cloud1-0gdcaicsce323e0e"})},
在project.config.json文件中,创建云函数
"cloudfunctionRoot": "cloud1/",
在目录处新建文件夹命名(出现小云朵成功)
右键选自己的一个环境,如果只有一个环境的话,就是当前环境。
创建云函数,右键cloud1(自己的那个云函数目录),选择—>新建Node.js云函数,创建云函数(先获得openid),此文件中的inde.js的 cloud.init() 中初始化,可以用常量cloud.DYNAMIC_CURRENT_ENV
cloud.init({env:cloud.DYNAMIC_CURRENT_NV //默认取当前云环境ID })
2. 获取openid
在pages目录的-----index.wxml中
<button bindtap="getOpenid">获取用户openID</button>
在pages目录的-----index.js的代码中
Page({//获取用户openIDgetOpenid(){wx.cloud.callFunction({name:"getOpenid"}).then(res=>{console.log("获取Openid成功",res)}).catch(res=>{console.log("获取Openid失败",res)})}
})
保存后需要再次上传并部署,内容修改就得部署一次
3.获取用户授权
每次订阅消息的时候都需要获取授权
一次性订阅消息、长期订阅消息,详见接口 wx.requestSubscribeMessage
设备订阅消息,详见接口 wx.requestSubscribeDeviceMessage
- 定义按钮:
<button bindtap="shouquan" >2.获取用户授权</button>
授权,绑定模板ID
//pages目录的-----index.js的Page({})中 shouquan(){wx.requestSubscribeMessage({tmplIds: ['3PlhCeepxyLBh7SziJ_BCc3Eyg5GOy313bJYATK3EHA'], //此处添加申请的模板ID,多个用英文逗号隔开success(res){console.log('授权成功-----',res)},fail(res){console.log('授权失败-----',res)}})}
【当有多个模板的时候可以通过真机调试,手机进行模板的选择—>
真机调试–>手机扫码(模拟器与手机同步)—>点击获取授权,选择模板】
4. 调用接口下发订阅消息
新建云函数 (getMessages) 初始化步骤同上---->略
- getMessages下的index.js文件中
//getMessages下的index.js文件中
// 云函数入口函数
exports.main = async (event, context) => {try{//发送订阅消息给用户const result = await cloud.openapi.subscribeMessage.send({touser:event.openid, //获取当前环境的openidpage:"pages/index/index", //要跳转到哪个页面data:{ //推送的内容thing1:{value:"小程序编程"},name2:{value:'Aurora'},date3:{value:'2022/09/15 14:00'},thing4:{value:'大教室01'}},//模板idtemplateId:'3PlhCeepxyLBh7SziJ_BCc3Eyg5GOy313bJYATK3EHA' //与前面模板ID相同})console.log(result)return result.errcode}catch(err){console.log(err);return err}
}
申请的模板,点击详情中的部分与代码中的名称相对应
在pages目录的-----index.js和index.wxml中
按钮:3.发送订阅消息给单个用户
//发送消息给单个用户sendOne(){wx.cloud.callFunction({name:"sendMessages"}).then(res=>{console.log("发送一条信息成功-----",res)}).catch(res=>{console.log("发送一条信息失败~~~",res)})}
【此时运行整个过程,控制台全部成功,但是手机并不能获取到信息】
解决:
openid没有上传
在pages目录的index.js中添加传入openid
sendOne(){wx.cloud.callFunction({name:"sendMessages",data:{//此处openid与touser:event.openid的相同,将第一步获取的openid复制openid:"oMKZh4zYY0j7X-DYLAQa2ngdlpfg" } }).then(res=>{console.log("发送一条信息成功-----",res)}).catch(res=>{console.log("发送一条信息失败-----",res)})}
5.其他问题:
模板ID中的参数名莫错,模板ID莫复制错
手机未收到消息去控制台找错来源:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
errMsg会出现40003(openid有误)等等的错误,可以去官方文档的社区中,将错误信息或者错误代码复制,看他人如何解决或者官方文档提示的错误
- 授权一次只能发送一次消息
微信小程序----API、获取openid、消息订阅相关推荐
- 微信小程序 - 登录获取openid和用户信息(适配getUserProfile)
GitHub Demo 地址: jh-weapp-demo 实现一些常用效果.封装通用组件和工具类 小程序码 微信小程序中如果需要使用微信的用户信息建立自己的用户体系,需拿到唯一标识openid,然后 ...
- 微信小程序API——获取定位
在微信小程序中,我们可以很方便的通过API接口来获取我们当前的位置,接下来我讲告诉大家微信获取定位的API-wx.getLocation的用法,以及我们通过获取定位,得到当地的位置,天气等信息. &l ...
- 利用微信小程序API获取所在位置周围的WIFI信息
前言 这是我的第一篇博客,内心有点激动紧张. 为什么要写这一篇呢? 因为最近在跟老师做一个基于WIFI的室内定位的项目,里面需要获取周围WIFI信息,这困惑了我很长一段时间,查了很多百度,看了很多博客 ...
- 微信小程序中获取用户微信公众号授权(openid)用来发送模板消息
需求: 由于小程序不能直接向用户发送模板消息,所以需要用公众号向用户发送模板消息. 于是需要将小程序的openid和公众号的openid绑定在一起.提供两种思路: 方法一: 1.微信小程序和公众号都绑 ...
- 微信小程序之发送通知消息(通过openid推送消息给用户)
微信小程序之发送通知消息(通过openid推送消息给用户) 一.获取access_token access_token是接口调用的凭证,目前有效期为两个小时,需要定时刷新,重复获取将导致上次获取的ac ...
- php获取微信uninoid_PHP微信小程序之获取并解密用户数据获取openId和unionId,,小程序登陆...
前言 微信小程序API文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html 在实际的小程序开发中,往往需要用户授权登陆并获取用 ...
- 微信小程序联盟:微信小程序之获取并解密用户数据(获取openId、unionId)
前言 微信小程序API文档:开放接口 · 小程序 在实际的小程序开发中,往往需要用户授权登陆并获取用户的数据,快速对接用户系统. openId : 用户在当前小程序的唯一标识 unionId : 如果 ...
- php微信发送客服消息,微信小程序API 发送客服消息
微信小程序API 发送客服消息 发送客服消息 当用户和小程序客服产生特定动作的交互时(具体动作列表请见下方说明),微信将会把消息数据推送给开发者,开发者可以在一段时间内(目前修改为48小时)调用客服接 ...
- PHP微信小程序之获取并解密用户数据获取openId和unionId
前言 微信小程序API文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html 在实际的小程序开发中,往往需要用户授权登陆并获取用 ...
- 微信小程序下获取公众号openId
微信小程序下获取公众号openId 一.为什么我们需要在小程序下面获取公众号的openId呢? 微信公众号和微信小程序我们一般都会开发,有一种场景我们经常会遇到,公众号的消息推送以较成熟,我们希望把小 ...
最新文章
- Linux的epoll
- JAVA 第五周学习总结
- 各大网站CSS代码初始化集合
- Android移植的Box2D
- 快来看,大数据两地三中心的容灾也可以如此省心!
- 万能高品质PSD分层促销海报,电商美工必备
- 使用Spring容器最简单的代码姿势
- 第 2 章 MybatisPlus 通用 CRUD
- hdu1403(后缀数组模板)
- WIN计算机左侧没有桌面,电脑桌面没有计算机图标!三步解决!
- p2p服务器系统,先锋P2P高清点播服务器(XfServer)
- nRF51822 官方 Blinky 工程(多彩 LED)
- 计算机视觉————理解彩色图片
- DT算法(暗像元法)在C6.1中的改进:Aerosol Dark Target (10km 3km) Collection 6.1 Changes
- Python 加密文件与解密文件
- 低速常温离心机S400
- 同时买票是怎么实现的_候补购票和抢票有什么不同 候补购票和抢票可以同时进行吗...
- 《TT语音》用户体验分析报告
- 51nod 1326 遥远的旅途
- uniapp 联级选择器uni-data-picker
热门文章
- 华为C/C++笔试题(附答案,华为面试题系列)
- 一键如何完成多张静态图合成GIF图?
- 基于51单片机密码锁-舵机开锁-CXM
- iphone忘记密码了怎么开锁
- 如何切换到老版本的IE浏览器
- 彻底卸载MySQL8.0
- 我的企业使用虚拟信用卡支付有什么优势
- Git 错误 Unable to create 'E:/xxx/.git/index.lock': File exists.的解决办法
- 爬虫实战项目--优信二手车--天眼
- 数据结构5 :DataFrame(Pandas库)