1. 获取微信小程序的应用令牌
eyJhbGciOiJSUzI1NiIsImtpZCI6ImI1MGIxZWZmZGMwMzVlMjg2OWI2YzQ1ZjMzYmRmNWQ3In0.eyJpYXQiOjE2ODU0MTE0NzksIm5iZiI6MTY4NTQxMTQ3OSwiaXNzIjoieGR1YS5jb20iLCJleHAiOjIwMDA3NzE0NzksImF1ZCI6Ild4YU1hbkh1Iiwic3ViIjoiQW5vTnltdVMiLCJqdGkiOiIxMjM0NTY3OCIsInNhcCI6IlN2S2VybmVMIiwiY2xyIjoiUiIsInRpZCI6IlcxQXpuMEZmIiwidHlwIjoiTCIsInpvbmUiOiJFbGRyQ2FSRSIsImNvcnAiOiJFbGRyQ2FSRSIsInNob3AiOiJFbGRyQ2FSRSIsInJvbGUiOiIqIiwicnVsZSI6IioifQ.DWJUtkikxkHEkDtg3kihpMhX2_8X2L-TG6xr74rflfEhctZYNnOoaCzUC96Ja7ONxxfi_fEz7gc8yQMTLUCucOrr9u3NBuQuFtxSOXt4Q0PSno0TbX3uN389BNzPzCWb2L0YWpoJe--vEo-ZrIzBPK6XgYQf7vp7dduJ8DwPmTJjSEtoINB4cRXvAFT6ixDcSwk_zL592-zda45xyJ5dPIVcjFuplPDdndCKiNaD6THEdtEqQAo_Btbp-7hQzzsh9iibR3WZxr3rBRxWu3drwkTm4QubqsBXSX9yHynwGKKqytbUNlARbgPLJxhPKHl0Vj7lJz4maeZ-ND0nikH81A
这个令牌规定了如下音素,从过期时间可以看出,这个令牌在2033年过期,是一个长达10年的令牌。
{
"iat": 1685411479,
"nbf": 1685411479,
"iss": "xdua.com",
"exp": 2000771479,
"aud": "WxaManHu",
"sub": "AnoNymuS",
"jti": "12345678",
"sap": "SvKerneL",
"clr": "R",
"tid": "W1Azn0Ff",
"typ": "L",
"zone": "EldrCaRE",
"corp": "EldrCaRE",
"shop": "EldrCaRE",
"role": "*",
"rule": "*"
}
2. 小程序启动,进入LOGO页面
LOGO页面,就是一个有LOGO的空白页。
- 通过wx.login()获取code
- 拿着code通过POST:/Aoginr接口获取返回值
它返回的字段如下(这是微信小程序特有的登录字段):
{ "apis": "AddAoginr", "apid": "93D6604A-4B6D-4D91-AF45-75A2791699EA", "roles": "Zoon", "session_key": "tsPRbiFpXVbG59GsavR8FQ==", "id": "KqkkOc10", "isnew": 0, "message": "message", "token": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImI1MGIxZWZmZGMwMzVlMjg2OWI2YzQ1ZjMzYmRmNWQ3In0.eyJpYXQiOjE2ODQ4MjQxNTYsIm5iZiI6MTY4NDgyNDE1NiwiaXNzIjoieGR1YS5jb20iLCJleHAiOjE3MjA4MjQxNTYsImF1ZCI6Ild4YU1hbkh1Iiwic3ViIjoiS3Fra09jMTAiLCJqdGkiOiIxMjM0NTY3OCIsInR5cCI6IlUiLCJ0YWciOiI_IiwiY2xyIjoiUiIsImlwbSI6IioiLCJkdm0iOiIqIiwib3duIjoiS3Fra09jMTAiLCJzYXAiOiJTdktlcm5lTCIsImFwaSI6IioiLCJ6b25lIjoiRWxkckNhUkUiLCJjb3JwIjoiRWxkckNhUkUiLCJzaG9wIjoiRWxkckNhUkUiLCJyb2xlIjoiKiIsInJ1bGUiOiIqIiwidGlkIjoiampKckZNMXkiLCJsZ24iOiJidlU1SmtuWCJ9.hIUVUGOtPr6jY5gZODrNvcn9NsN8-OGimdS2uFTn0cJ0Bd6rHxMCPtYteJiNCqKJtNngC9Mvk2xyp6Vkk2ipPJ8O8n0sLM83teC1zds4FSw1xnaHlTQbGzWz8XrJHd8iPF1uw4DR1qqxh_ID_quGdQmAHYyAABCmOjEclRkOvh3evcFjRjXpQ-a-eIgSPlYApTJoDzgPMp9SHsOwU-jEkF5J-fh5JDdMeFauuX_-vqojaTAYXJVteoTRadjWPO0ZKPWR8lMaScrQx7DODQpNKlYmSRg37a1kbWVcvltdafa8ASmBIbI7aMjctetuJbQpDfpz9frGFvgR196IinYWvw" }
字段 | 说明 | 举例 |
---|---|---|
apis | 接口名称 | AddAoginr |
apid | 接口调用ID,用来追溯接口错误原因 | 93D6604A-4B6D-4D91-AF45-75A2791699EA |
roles | 登录机制返回来的角色列表 | Zoon |
session_key | 微信小程序特有的用来解析的key | |
id | 本次登录的用户id | KqkkOc10 |
isnew | 是否是首次在平台登录的用户 | 0:不是新用户 1:新用户 |
message | 接口返回消息,只有错误的时候,消息才有意义 | ok |
token | 本次登录产生的用户令牌,登录后的所有操作都必须以这个token进行 |
- 如果isnew==0,那么直接跳到电话授权页
- 小程序端要妥善保存上面返回的token,它是用户令牌,以后非匿名访问的API都需要这个令牌。
接下来要去GET:/usrai接口获取想要的微信用户属性(包含头像,昵称等) 他请求的where字段如下举例:
{"attr":"WXUserProfile_Nickname,WXUserProfile_Tel,WXUserProfile_Headimgurl,WXUserProfile_Unionid,WXUserProfile_Openid"}
上面这个请求后台返回:昵称,头像,电话号码,Unionid,Openid。注意,维信小程序不允许客户端保存unionid,openid,session_key的,一旦它审核时候发现,客户端有知晓和保存这些属性的代码,它会拒绝通过审核。 它返回的字段如下:
{"WXUserProfile_Unionid":"xxxxxxxx","WXUserProfile_Openid":"xxxxxx","WXUserProfile_Expire":"0"}
如果
WXUserProfile_Tel
属性不存在,或者为空,那么说明我们后台没有拿到电话号码,那么跳到电话授权页,否则继续往下走。如果
WXUserProfile_Headimgurl
或WXUserProfile_Nickname
字段有一个为空或者不存在,那么跳到头像昵称填入页
3. 电话授权页
电话授权页是一个空页面,一个logo加一个“维信授权登录”的按钮,点击这个按钮时,会获取一个phone_number的code,注意,这个code
需要将 button 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumber 事件回调获取到动态令牌code,然后把code传到开发者后台,并在开发者后台调用微信后台提供的 phonenumber.getPhoneNumber 接口,消费code来换取用户手机号。每个code有效期为5分钟,且只能消费一次。
注:getPhoneNumber 返回的 code 与 wx.login 返回的 code 作用是不一样的,不能混用。
拿到这个code后要发到后台POST:http://api.svkernel.xdua.com/wxapp_phonenumber
接口获取电弧号码,这是一个单独的阿里云网关-函数计算服务,它主要是调用https://api.weixin.qq.com/cgi-bin/token
接口获取acess_token,然后通过https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=
接口换成电话号码
换成电话号码的格式如下:
{
"reason": "success",
"debug": [],
"apis": "GetWxappPhoneNumber",
"apid": "C315EC89-1060-4573-88CC-BFFCBF302782",
"phone_info": {
"phoneNumber": "15336412970",
"watermark": {
"appid": "wxb00499186bdf2e8e",
"timestamp": 1685416180
},
"purePhoneNumber": "15336412970",
"countryCode": "86"
},
"error": 0,
"message": "ok"
}
通过POST:/usrasi接口把用户的电话号码属性上传
{
"atto":"WXUserProfile",
"upserts":JSON.stringify({WXUserProfile_Tel:"+86-15336412970"})
}
4. 头像昵称页
- 接下来要去POST:/usrasi接口把用户的属性上传
{
"atto":"WXUserProfile",
"upserts":JSON.stringify({WXUserProfile_Gender:"F",WXUserProfile_Headimgurl:"http://test.png",WXUserProfile_Nickname:"快乐火龙果"})
}
5. 在微信小程序里上传用户头像
上传老人的头像第一步:获取上传的令牌.
参考接口令牌接口 POST:/osts
发送 { okey: 'user/a906449d5769fa7361d7ecc6aa3f6d27.png', objr_id: 'ObR00013', }
[!note|label:okey的规则] okey是要上传的文件的URL后半部分,上传用户头像,其okey必须是仪"user/"开头. 并且以32个字符的md5码作为文件名,文件的后缀暂不做要求,png,jpg两者都可以。
Objr_id是"ObR00013",这个使我们专门规定的一个入口,它的policy如下,从这个policy可以看出,这个只能给avatar-xdua-com/user/
(也就是根目录下的user目录)上传文件。
{
"skma": "ossram",
"policy": {
"Version": "1",
"Statement": [{
"Action": ["oss:PutObject"],
"Effect": "Allow",
"Resource": ["acs:oss:*:*:avatar-xdua-com/user/*"]
}]
}
}
所以,我们上传的file的key必须是"user/"开头,这个权限其实就隐藏在获取的SecurityToken
和AccessKeySecret
里了。下面我特意摘抄了后台根据预设的"ObR00013"查询的policy然后到阿里云的OSS授权中心获取临时credentials
$stsResult = AlibabaCloud::rpc()
->product('Sts')
->scheme('https') // https | http
->version('2015-04-01')
->action('AssumeRole')
->method('POST')
->host('sts.aliyuncs.com')
->options([
'query' => [
'RegionId' => "cn-beijing",
'RoleArn' => $arn,
'RoleSessionName' => $token_user_id.".".$token_user_id,
'DurationSeconds' => $timeout,
'Policy' => json_encode($objr_policy),
],
])
->request();
$stsResultArray = $stsResult->toArray();
[!note|label:关于objr_id] 这个必须是'ObR00013',这是地球号平台专门分配给慢护微信小程序上传用户头像的。
可获取
{
"Expiration":"2021-05-08T03:56:49Z",
"AccessKeyId":"STS.NT3136gAnG4jiLscCVwuv8c2e",
"SecurityToken":"CAISngJ1q6Ft5B2yfSjIr5eGeomCip5P8PaBa2rCh0MDe/pa16aZhzz2IHlFeHRgBuActfownWtV5/cclrhfV8JAW1bYQI1c8slS7xm9TtI1HV8NEftW5qe+EE2/VjTkvqaLEf+bIfrZfvCyER+m8gZ43br9cxi7QlWhKufnoJV7b9MRLG7aCD1dH4VuOxdFos0XPmerHZTLCBPxhXfKB0dFoxd1jXgFiZ6y2cqB8BHT/hGYgOYevNb2OYP2LZsubp5hWsu8xqlmerfIlSVX7l9X76psy+5mmWya5onDWwEO2XjcbbqIqO8IBRRie603F5RDqPXBjvBisoTR7d+umkoQbb4FCX+BG9n7nZqVRvnMMc0ieKzlOn/AyNeLO4kqF7NcGoABAHj48RRoOQsUqCKBmeNOr9rBLcIV5NTnx2B41nbQPKDu0CbEl5iVxTBOspuY6aohvLMI5aYN5hySVkHzTXBx1l0sYFq4Yxjt3ApTB3mzzn5BxUD3SzY8HnMqQY2RW/ghfQCu8+aj6m1/jNkOKjGBPMXFa28sIFvUbbywckm3kUw=",
"AccessKeySecret":"313jJEhaVbTdXUE7cZUSmRSo2pBvcwQnEEXy76EfEtKo"
},
小程序上传代码必须注意模拟环境和真机的区别
这里特意介绍一下微信小程序本地头像上传到OSS的特别之处,微信小程序本地头像在模拟器和真实手机上是有区别的,举例如下: 不仅后缀不一样,一个是jepg,一个是jpg
真实手机上的本地头像地址:{"avatarUrl":"wxfile://tmp_17650296e8b0f400fa053908170162f528c6a0ef08164da5.jpg"}
在模拟器上的本地头像地址:http://tmp/EM7gpmD4aTGzb5273d95666c5cbf1066750daa2e3429.jpeg
下面的代码是张秀林提取小程序头像本地地址的代码,可以看出,它特意对模拟环境和真实地址使用了不同的提取方式。
var keyString;
// 微信小程序模拟器地址:http://tmp/EM7gpmD4aTGzb5273d95666c5cbf1066750daa2e3429.jpeg
// 真机地址:wxfile://tmp_17650296e8b0f400fa053908170162f528c6a0ef08164da5.jpg
// 这里做了各个平台的兼容
if (config.platform == "devtools") {
keyString = path.substr(path.indexOf("//") + 2).replace(/tmp/, "user")
} else {
keyString = path.substr(path.indexOf("//") + 2).replace(/tmp_/, "user/")
}
这里你会疑问,如果提取算法出错了会怎么?如果提取算法错了,提取到的文件上传OSS的key不是"user/"开头的,那么上传就会出现被拒绝的错误,下面就是一个例子。
{
"data": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error>\n <Code>AccessDenied</Code>\n <Message>Access denied by authorizer's policy.</Message>\n <RequestId>647710E11675E73530C670E4</RequestId>\n <HostId>avatar-xdua-com.oss-cn-beijing.aliyuncs.com</HostId>\n <EC>0003-00000301</EC>\n</Error>\n",
"header": {
"x-oss-request-id": "647710E11675E73530C670E4",
"x-oss-server-time": "11",
"Server": "AliyunOSS",
"Connection": "keep-alive",
"x-oss-ec": "0003-00000301",
"Content-Length": "281",
"Date": "Wed, 31 May 2023 09:18:25 GMT",
"Content-Type": "application/xml",
"protocol": "http/1.1"
},
"statusCode": 403,
"cookies": [],
"errMsg": "uploadFile:ok"
}
对本地头像进行裁剪位移
慢护小程序头像,上传前必须裁剪到512x512大小。
然后借助OSS工具上传头像
参考本链接微信小程序直传实践
字段 | 说明 | 举例 |
---|---|---|
host | 填写存储空间的访问域名,例如https://test.oss-cn-zhangjiakou.aliyuncs.com。若您的存储空间已绑定自定义域名,建议填写您的自定义域名。 | https://avatar.xdua.com |
signature | 客户端自己计算的签名 | |
ossAccessKeyId | 临时令牌变量 | 通过POST:/osts接口获取的credentials.AccessKeyId |
policy | 客户端自己通过Base64.encode(JSON.stringify(policyText))计算的policy | |
key | 上传的头像名,这个必须同获取osts是的okey一致 | 'user/a906449d5769fa7361d7ecc6aa3f6d27.png' |
securityToken | 临时令牌变量 | 通过POST:/osts接口获取的credentials.securityToken |
filePath | 填写待上传文件的文件路径,在小程序里,这个path好像是"https://tmp/***.jpeg" |
const host = '<host>';
const signature = '<signatureString>';
const ossAccessKeyId = '<accessKey>';
const policy = '<policyBase64Str>';
const key = '<object name>';
const securityToken = '<x-oss-security-token>';
const filePath = '<filePath>'; // 待上传文件的文件路径。
wx.uploadFile({
url: host, // 开发者服务器的URL。
filePath: filePath,
name: 'file', // 必须填file。
formData: {
key,
policy,
OSSAccessKeyId: ossAccessKeyId,
signature,
// 'x-oss-security-token': securityToken // 使用STS签名时必传。
},
success: (res) => {
if (res.statusCode === 204) {
console.log('上传成功');
}
},
fail: err => {
console.log(err);
}
});
我们使用的是客户端生成签名的方式上传文件。 有下面几点需要关注
policy的生成方式:
const policyText = {
expiration: date.toISOString(), // 设置policy过期时间。
conditions: [
// 限制上传大小。我们设置头像上线是1M,不鼓励用户使用超大图片当头像
["content-length-range", 0, 1 * 1024 * 1024],
],
};
credentials变量的获取,正是从上段所述的POST:/osts接口获取credentials变量。
如何判断头像上传成功
如果上传的key是'user/a906449d5769fa7361d7ecc6aa3f6d27.png',那么上传成功后的图片地址是'https://avatar.xdua.com/user/a906449d5769fa7361d7ecc6aa3f6d27.png'
如果这个路径能成功,那必然是正确的。
6. 创建照料对象
参考接口创建一个虚拟用户并关注它
POST:/caree
发送一个body 如下示例
const api_param = {
name:"我的爸爸",
avatar:"https://avatar.xdua.com/user/a906449d5769fa7361d7ecc6aa3f6d27.png",
height:178,
weight:56,
gender:"f",
age:32
}
7. 查询自己关注的老人
通过GET:/careei 发送body{"type":"F"}来获取如下结果
{
"status": 200,
"apid": "3E1FE8D4-1950-4EA7-BEC3-D219247B25B4",
"apis": "QriCaree",
"error": 0,
"result": {
"total": 11,
"pages": 1,
"offset": 0,
"count": 11,
"format": "raw",
"limit": 20,
"where": {
"carer_id": "Dt5mvrtE",
"state[!]": 3
},
"page": 1,
"sort": {
"inc": "DESC"
},
"list": [{
"caree_id": "bl2sJ6G6",
"carer_id": "Dt5mvrtE",
"XduaUserProfile_Gender": "f",
"cstamp": "2021-05-11 19:50:26",
"id": "d31ZJDI1",
"XduaUserProfile_Name": "我的哥哥",
"XduaUserProfile_Avatar": "https://avatar.xdua.com/user/test.png"
}, {
"caree_id": "bl2sJ6G6",
"carer_id": "Dt5mvrtE",
"XduaUserProfile_Gender": "f",
"cstamp": "2021-05-11 19:50:26",
"id": "CMmMwOCD",
"XduaUserProfile_Name": "我的哥哥",
"XduaUserProfile_Avatar": "https://avatar.xdua.com/user/test.png"
}, {
"caree_id": "gDA3Vqim",
"carer_id": "Dt5mvrtE",
"XduaUserProfile_Gender": "f",
"cstamp": "2021-05-11 19:48:39",
"id": "yGGcNghc",
"XduaUserProfile_Name": "我的妈妈",
"XduaUserProfile_Avatar": "https://avatar.xdua.com/user/test.png"
}, {
"caree_id": "gDA3Vqim",
"carer_id": "Dt5mvrtE",
"XduaUserProfile_Gender": "f",
"cstamp": "2021-05-11 19:48:39",
"id": "gxvtcJMM",
"XduaUserProfile_Name": "我的舅舅",
"XduaUserProfile_Avatar": "https://avatar.xdua.com/user/test.png"
}, {
"caree_id": "aMu9vls2",
"carer_id": "Dt5mvrtE",
"XduaUserProfile_Gender": "f",
"cstamp": "2021-05-11 19:46:12",
"id": "hf62WMaU",
"XduaUserProfile_Name": "我的爷爷",
"XduaUserProfile_Avatar": "https://avatar.xdua.com/user/test.png"
}, {
"caree_id": "cuhJt5PD",
"carer_id": "Dt5mvrtE",
"XduaUserProfile_Gender": "f",
"cstamp": "2021-05-10 00:27:55",
"id": "Hse9HSa4",
"XduaUserProfile_Name": "我的奶奶",
"XduaUserProfile_Avatar": "https://avatar.xdua.com/user/test.png"
}]
},
"debug": [],
"event": "{\"headers\":{\"XduaApiAudience\":\"*\",\"CaOpenId.corp\":\"EldrCaRE\",\"CaOpenId.bug\":\"DE\",\"CaOpenId.zone\":\"EldrCaRE\",\"XduaApiValidQueryFilters\":\"*\",\"XduaApiValidQueryFields\":\"@all,*\",\"CaOpenId.iss\":\"xdua.com\",\"XduaApiShop\":\"*\",\"XduaApiEnable\":\"true\",\"CaOpenId.own\":\"Dt5mvrtE\",\"XduaApiAction\":\"QueriCaree\",\"XduaApiRule\":\"QueriCaree\",\"XduaApiTokenType\":\"U\",\"XduaApiAstates\":\"0\",\"XduaApiResource\":\"care\",\"XduaAcceptLang\":\"zh\",\"CaOpenId.lgn\":\"Cf39Gmqr\",\"XduaApiMethod\":\"QRI\",\"XduaClientDev\":\"null\",\"CaStage\":\"RELEASE\",\"CaOpenId.sap\":\"SvKerneL\",\"CaOpenId.jti\":\"12345678\",\"XduaApiValidQueryFormats\":\"raw\",\"XduaApiValidQueryWheres\":\"attr\",\"CaOpenId.iat\":\"1620736732\",\"CaHttpSchema\":\"HTTP\",\"CaOpenId.aud\":\"WxaManHu\",\"CaOpenId.nbf\":\"1620736732\",\"XduaApiRoles\":\"*\",\"Authorization\":\"eyJhbGciOiJSUzI1NiIsImtpZCI6ImI1MGIxZWZmZGMwMzVlMjg2OWI2YzQ1ZjMzYmRmNWQ3In0.eyJpYXQiOjE2MjA3MzY3MzIsIm5iZiI6MTYyMDczNjczMiwiaXNzIjoieGR1YS5jb20iLCJleHAiOjE2MjA3MzczMzIsImF1ZCI6Ild4YU1hbkh1Iiwic3ViIjoiRHQ1bXZydEUiLCJqdGkiOiIxMjM0NTY3OCIsInR5cCI6IlUiLCJ0YWciOiJQcmltYXJ5IiwiY2xyIjoiUiIsImlwbSI6IioiLCJkdm0iOiIqIiwib3duIjoiRHQ1bXZydEUiLCJzYXAiOiJTdktlcm5lTCIsImFwaSI6IioiLCJ6b25lIjoiRWxkckNhUkUiLCJjb3JwIjoiRWxkckNhUkUiLCJzaG9wIjoiRWxkckNhUkUiLCJyb2xlIjoiKiIsInJ1bGUiOiIqIiwiYnVnIjoiREUiLCJ0aWQiOiJjNGR5YkkxcSIsImxnbiI6IkNmMzlHbXFyIn0.Uu2J3L5e6qAv4yv9a4o4vQQz0or5krkUht__c_xxuqz3UgXrqrfc84XWav6fDP7tiCA9Atsy3qWMNhU7e8yVtMVTCcKxDWvTFLL24RXS32bghXhup60_w2bYhVqDCigV91FhglLsB32FOhh3p5W8TY8zOjZZwDR3Rv6a_bx6NMbTrI8oOKTBd5uCNg6_Zzzh50vTYIdgpVP1QHgjnI523uxsPfddi9f_xH49AQaZHNzcSMilXFB_n0GpYxraMtKnWguMiW3dFnMWx98Ckozybs3wFs-39hsAW4VEQ2Np6VtK-Ex1tML-pQKSiXndwjgMi9G7dfZPNgb6O1yqMepItA\",\"CaRequestId\":\"3E1FE8D4-1950-4EA7-BEC3-D219247B25B4\",\"CaRequestHandleTime\":\"2021-05-11T12:38:52Z\",\"CaClientIp\":\"39.97.224.240\",\"CaOpenId.sub\":\"Dt5mvrtE\",\"CaApiName\":\"QriCaree\",\"CaOpenId.tag\":\"Primary\",\"CaDomain\":\"api.svkernel.xdua.com\",\"CaOpenId.api\":\"*\",\"XduaApiHttpSchema\":\"HTTPS\",\"CaOpenId.tid\":\"c4dybI1q\",\"XduaApiKparam\":\"state+.+expire\",\"CaOpenId.typ\":\"U\",\"CaOpenId.clr\":\"R\",\"XduaApiSubject\":\"*\",\"CaClientUa\":\"axios/0.18.1\",\"CaProxy\":\"AliCloudApiGateway\",\"CaOpenId.ipm\":\"*\",\"XduaApiVersion\":\"1.0.0\",\"CaOpenId.shop\":\"EldrCaRE\",\"CaOpenId.role\":\"*\",\"CaOpenId.exp\":\"1620737332\",\"XduaApiColor\":\"*\",\"CaOpenId.dvm\":\"*\",\"CaOpenId.rule\":\"*\",\"XduaApiValidQuerySchemas\":\"*\"},\"httpMethod\":\"GET\",\"isBase64Encoded\":false,\"path\":\"/careei\",\"pathParameters\":{},\"queryParameters\":{\"filter\":\"*\",\"schema\":\"*\",\"offset\":0,\"limit\":20,\"format\":\"raw\",\"where\":\"{}\",\"page\":0,\"sort\":\"inc:DESC\",\"fields\":\"@all,*\"}}",
"message": "message",
"reason": "success"
}
8. 关注某个老人
参考创建关注
9. 通过设备的序列号获取设备的ID
用扫一扫的方式,获取设备的序列号sn,然后通过sn获取id.sn变id的接口如下》
通过GET请求向:/dev 发送
"/dev/snid:WFMC.D0BAE4504530"
其中"snid:"前缀表示这是一个序列号。
如果返回的error==200001,那么就是设备不存在。
否则
获得如下结果
{
id: 'wJderfRw', //设备的id
data:
{
brief: '自主开发的压电薄膜床带', //设备对应产品的简介
vgtw: '无', //设备桥接网关
owner_name: '无', //设备有没有主人
shop_name: '中科慢护', //设备从属的店铺
type: '睡眠床带', //产品的类型
devp_name: '睡眠床带', //产品的名字
bat: '未知', //设备的电量
name: 'WFMC.D0BAE4504530', //设备的名字
model: 'MM-103K', //设备的型号
id: 'wJderfRw', //设备的id
sn: 'WFMC.D0BAE4504530', //设备的序列号
man: '上海绵绵', //设备制造商
firmware: '' //设备的固件信息
bm:"C", //设备的BM
},
},
10. 认领一个设备
当一个用户购买了一个床带传感器,他要通过扫码权认领这个床带。首先它通过上面的接口获取了dev_id,然后经过如下接口完成认领
POST:"/udevo" body字段如下 { "user_id":"就是用户自己的8个字符的id", "dev_id":"设备的8个字符的id" }
11. 查询自己关联的所有设备
"result":{
"total":3,
"pages":1,
"offset":0,
"count":2,
"format":"raw",
"limit":20,
"where":{
"user_id":"Dt5mvrtE",
"state[!]":3
},
"page":1,
"sort":{
"inc":"DESC"
},
"list":[
{
"devp_id":"BcgBeltX",
"devp_name":"睡眠床带",
"snid":"WFMC.D0BAE4505D06",
"user_id":"Dt5mvrtE",
"name":"WFMC.D0BAE4505D06",
"id":"Bt8eCldE",
"dev_id":"AZawUFHF"
},
{
"devp_id":"BcgBeltX",
"devp_name":"睡眠床带",
"snid":"WFMC.D0BAE4504530",
"user_id":"Dt5mvrtE",
"name":"WFMC.D0BAE4504530",
"id":"pmTF9O6T",
"dev_id":"wJderfRw"
}
]
},