From d8490c4a3db83ca8b9dbc43bb8e60544d78fbdc5 Mon Sep 17 00:00:00 2001 From: magic Date: Mon, 21 May 2018 14:50:41 +0800 Subject: [PATCH] fix bug --- mds/data/wechat_app/develop_doc.md | 148 ++++++++--------- mds/data/wechat_app/example.md | 2 + mds/data/wechat_app/index.md | 6 +- mds/data/wechat_app_new/index.md | 244 +++++++++++++++++++++++++---- 4 files changed, 284 insertions(+), 116 deletions(-) diff --git a/mds/data/wechat_app/develop_doc.md b/mds/data/wechat_app/develop_doc.md index 0e8be570..88801405 100644 --- a/mds/data/wechat_app/develop_doc.md +++ b/mds/data/wechat_app/develop_doc.md @@ -565,8 +565,20 @@ var res = { ## 小程序付款到零钱 +**简介:** + 付款到零钱目前已经支持,常见使用场景是用户小程序里面提现,由于此接口用的人少,如需要使用可提交工单联系工作人员。 +**注意事项:** + +此功能先看下自己微信支付支付有开通,默认是没开通的,微信18年的开通条件是 + +开通条件 +需同时满足两个条件,才有开通该功能入口: +1、T+0 (T日结算至基本账户),结算商户需满足两个条件:1、入驻满90天,2、截止今日往回推30天连续不间断保持有交易。 +2、其余结算周期的商户无限制,可立即前往【商户平台】->【产品中心】申请开通。 +注:连续30天交易无金额限制,请保持正常交易。 + ## 添加数据 添加数据非常简单,任何`Bmob.Object`子类都有`save`方法可以用于将当前对象的内容保存到服务端。示例代码如下: @@ -1750,7 +1762,26 @@ collection.reset([ `userData`:每个微信用户的唯一标识,包括用户openId、expires_in、session_key(可选,自行创建,Object类型) 我们会在下面的用例中详细介绍细节 -### 注册一(使用用户账号密码进行注册) +### 注册一 + +**登录注册集合类,接口默认第一次注册,否则返回用户信息** + +首先要在_User表新建一个用来存用户唯一标识的字段,例如:userData(Object类型),然后在js中插入以下代码: + +V3.5 版本优化上面代码登陆只需在app.js 加入2行代码 + +``` +onLaunch: function() { + var user = new Bmob.User() //实例化用户对象 + user.auth() + }, +``` + +> 2018-5-10号以后微信废除了`wx.getUserInfo` 方法,如需数据库保存用户昵称与头像,请看微信官方就教程更新到用户表。 + +### 注册二 + +**使用用户账号密码进行注册** 通常你的app第一件要做的事情就是让用户进行注册,这里把用户密码设置为`Openid`,下面的代码展示了怎样进行微信注册的过程(包括获取用户的唯一标识): @@ -1803,87 +1834,9 @@ wx.login({ 你也可以使用`email`来作为用户名,只要求你的用户输入他们的`email`但是同时自动填充好`username`属性就可以了,`Bmob.User`会跟原来一样工作,我们会在下面的重设密码环节再次说明这个细节。 -### 注册二(登录注册集合类,接口默认第一次注册,否则返回用户信息) - -首先要在_User表新建一个用来存用户唯一标识的字段,例如:userData(Object类型),然后在js中插入以下代码: - -``` - -var user = new Bmob.User();//实例化 - -wx.login({ - - success: function (res) { - user.loginWithWeapp(res.code).then(function (user) { - var openid = user.get("authData").weapp.openid; - console.log(user, 'user', user.id, res); - if (user.get("nickName")) { - - // 第二次登录,打印用户之前保存的昵称 - console.log(user.get("nickName"), 'res.get("nickName")'); - - //更新openid - wx.setStorageSync('openid', openid) - } else {//注册成功的情况 - - var u = Bmob.Object.extend("_User"); - var query = new Bmob.Query(u); - query.get(user.id, { - success: function (result) { - wx.setStorageSync('own', result.get("uid")); - }, - error: function (result, error) { - console.log("查询失败"); - } - }); - - - //保存用户其他信息,比如昵称头像之类的 - wx.getUserInfo({ - success: function (result) { - - var userInfo = result.userInfo; - var nickName = userInfo.nickName; - var avatarUrl = userInfo.avatarUrl; - - var u = Bmob.Object.extend("_User"); - var query = new Bmob.Query(u); - // 这个 id 是要修改条目的 id,你在生成这个存储并成功时可以获取到,请看前面的文档 - query.get(user.id, { - success: function (result) { - // 自动绑定之前的账号 - - result.set('nickName', nickName); - result.set("userPic", avatarUrl); - result.set("openid", openid); - result.save(); +> - } - }); - } - }); - - - } - - }, function (err) { - console.log(err, 'errr'); - }); - - } - }); - } - - -``` -V3.5 版本优化上面代码登陆只需在app.js 加入2行代码 -``` -onLaunch: function() { - var user = new Bmob.User() //实例化用户对象 - user.auth() - }, -``` ### 登录(自有账户密码登录,适合APP迁移过来的用户) @@ -1948,6 +1901,41 @@ Bmob.User.logOut(); var currentUser = Bmob.User.current(); // this will now be null ``` +### 修改当前用户信息 + +修改本地缓存信息 + +``` +var User = Bmob.Object.extend("_User"); +var query = new Bmob.Query(User); +// 这个 id 是要修改条目的 id,你在生成这个存储并成功时可以获取到,请看前面的文档 +query.get(objectId, { + success: function (result) { + // 回调中可以取得这个 diary 对象的一个实例,然后就可以修改它了 + result.set('mobilePhoneNumber', phone); + result.save().then(function (res) { + // 修改本地缓存 + var currentUser = Bmob.User.current(); + if (currentUser) { + currentUser.set("mobilePhoneNumber", phone); + Bmob.User._saveCurrentUser(currentUser); + } + // The object was retrieved successfully. + common.showTip("修改手机号成功", "success", function () { + setTimeout(function () { + wx.navigateBack(); + }, 1000) + }); + }, function (err) { + // The object was retrieved successfully. + console.log(err) + }); + }) +}) +``` + + + ### 用户对象的安全 `Bmob.User`类默认就是受保护的,在`Bmob.User`中保存的数据只能被那个用户所修改。默认地,数据仍然可以被任意客户端所读取。这样就是说,有些`Bmob.User`对象被认证后是可以修改的,其他的仍然是只读的。 diff --git a/mds/data/wechat_app/example.md b/mds/data/wechat_app/example.md index 24af08a2..3c26ae6a 100644 --- a/mds/data/wechat_app/example.md +++ b/mds/data/wechat_app/example.md @@ -4,4 +4,6 @@ wechatApp快速入门相关源码:[http://www.bmob.cn/sdk/bmob-wechatApp-v0.3.zi +2018年起建议开发使用全新混合SDK +https://github.com/bmob/hydrogen-js-sdk/ \ No newline at end of file diff --git a/mds/data/wechat_app/index.md b/mds/data/wechat_app/index.md index 6d00b07e..38bfe31f 100644 --- a/mds/data/wechat_app/index.md +++ b/mds/data/wechat_app/index.md @@ -29,8 +29,6 @@ 在你的微信小程序后台配置你的服务器域名 -![](image/1.png) - 在应用设置->配置里面把这几个域名填写到上图微信后台,设置https域名 ![](image/2.png) @@ -246,7 +244,7 @@ Bmob示例包含常用接口(学习示例):[https://github.com/magic007/we - 16.点点英语学堂 - 17.朝露时刻 -------音频类 - 18.青岛一起秀科学俱乐部 -- 19.纸塘 -------17年6月最热门的小程序 + 19.纸塘 -------17年6月最热门的小程序 - 20.雷湖古琴艺术 - 21.皋城文明随手拍 -----政府 - 22.阅后即焚图片分享 @@ -280,7 +278,7 @@ Bmob示例包含常用接口(学习示例):[https://github.com/magic007/we - 48.美味面包lite - 51.幸福的5班 - 52.大武汉公交 交通 -- 53.Buy优选 淘客 + 53.Buy优选 淘客 - 54.码赚 - 55.附近的圈子 - 56.吴忠意大利冰淇淋 实体店点餐 diff --git a/mds/data/wechat_app_new/index.md b/mds/data/wechat_app_new/index.md index 80cf5cfb..623b96e8 100644 --- a/mds/data/wechat_app_new/index.md +++ b/mds/data/wechat_app_new/index.md @@ -168,7 +168,63 @@ Bmob.User.signOrLoginByMobilePhone(phone,smsCode).then(res => { {"code":207,"error":"code error."} ``` -###查询用户 + + +### 更新用户缓存 + +**简介:** + +通过用户名密码登陆,登陆成功后会在本地缓存保存用户的信息 + + **参数说明:** + +| 参数 | 类型 | 必填 | 说明 | +| -------- | ------ | ---- | -------- | +| objectId | string | 是 | objectId | + +**请求示例:** + +``` + Bmob.User.updateStorage('objectId').then(res => { + console.log(res) + }).catch(err => { + console.log(err) +}); +``` + +**返回示例:** + +``` +成功: +{ + "createdAt":"2018-04-19 17:26:45", + "objectId":"X43SIIIH", + "sessionToken":"cc4fbcfd40583af980f4e6e52085adbf", + "updatedAt":"2018-04-19 17:26:48", + "username":"aaaaaa" +} +``` + + + +### 用户表权限 + + **简介: ** + +用户表属于系统表,默认情况下,接口只能查询。如需修改或删除,请登录当前用户,即可修改或删除当前用户资料。 + +当然了,你也可以直接把`MasterKey`传入到`X-Bmob-Master-Key`中, 这个就可以实现在不需要提供`SessionToken`的情形下更新和删除用户了,但希望只在开发环境下使用,不要把`MasterKey`发布出去。 + +传入MasterKey方式: + +``` +//初始化时,多传入一个参数 +Bmob.initialize("你的Application ID", "你的REST API Key", "你的MasterKey"); +``` + + + +### 查询用户 **简介:** @@ -523,6 +579,17 @@ query.get('objectId').then(res => { **请求示例:** ``` + 方式一: + const query = Bmob.Query('tableName'); + query.set('id', 'objectId') //需要修改的objectId + query.set('nickName', 'Bmob后端云') + query.save().then(res => { + console.log(res) + }).catch(err => { + console.log(err) + }) +或者 +方式二: const query = Bmob.Query('tableName'); query.get('objectId').then(res => { console.log(res) @@ -651,7 +718,55 @@ query.find().then(res => { 表中数据 -### 条件查询 + + +### 字段数组操作 + +为了帮你存储数组类数据,有三种操作你可以原子性地改动一个数组,这需要一个给定的 key: + +- `add`在一个数组的末尾加入一个给定的对象。 +- `addUnique`只会把原本不存在的对象加入数组,所以加入的位置没有保证。 + 比如, 我们想在数组"DiaryType"中加入日记类型: + +**添加数组:** + +``` +const query = Bmob.Query('tableName') +query.add("DiaryType", ["public"]); +query.addUnique("DiaryType", ["secret"]); +query.save(); + + +``` + +**更新数组:** + +``` +const query = Bmob.Query('tableName') +query.get('ObjectId').then(res => { + res.add("DiaryType", ["public"]); + res.addUnique("DiaryType", ["secret"]); + res.save(); +}) + + +``` + +**删除数组:** + +``` +const query = Bmob.Query('tableName') +query.get('ObjectId').then(res => { + res.remove("DiaryType", ["secret"]); + res.save(); +}) + + +``` + +## + +## 条件查询 **参数说明:** @@ -697,7 +812,7 @@ query.find().then(res => { }); ``` -**或查询** +### **或查询** 你可以使用`or`方法操作或查询,示例代码如下: @@ -713,7 +828,8 @@ query.find().then(res => { }); ``` -**查询指定列** +### **查询指定列** + ``` const query = Bmob.Query("tableName"); // 只返回select的字段值 @@ -724,7 +840,7 @@ query.find().then(res => { }); ``` -**复杂查询** +### **复杂查询** 如果你想查询某一字段值在某一集合中的记录的话,可以使用`containedIn`方法,如获取`"Bmob"、"Codenow"、"JS"`这三位玩家的记录信息,那么示例代码如下 ``` @@ -742,8 +858,7 @@ query.exists("score"); query.doesNotExist("score"); ``` - -**分页查询** +### **分页查询** 有时,在数据比较多的情况下,你希望查询出的符合要求的所有数据能按照多少条为一页来显示,这时可以使用`limit`方法来限制查询结果的数据条数来进行分页。默认情况下,Limit的值为10,最大有效设置值1000(设置的数值超过1000还是视为1000)。 ``` @@ -754,9 +869,10 @@ query.limit(10); ``` query.skip(10); // skip the first 10 results ``` -**结果排序** +### **结果排序** 我们可以对返回的结果进行排序(只支持`number`,`date`,`string`类型的排序),示例代码如下: + ``` // 对score字段升序排列 query.order("score"); @@ -768,16 +884,18 @@ query.order("-score"); query.order("-score","name"); ``` -**统计记录数量** +### **统计记录数量** 如果你只是想统计满足`query`的结果集到底有多条记录,你可以使用`count`方法。如为了获得diary表的记录数量,示例代码如下: ``` const query = Bmob.Query('diary'); query.count().then(res => { - console.log(`公有${res}条记录`) + console.log(`共有${res}条记录`) }); ``` +## + ## 数据库批量操作 **温馨提示: ** 为保障数据安全,此处所有批量操作数据库,单次最多为50条。 @@ -995,7 +1113,7 @@ query.get('c02b7b018f').then(res => { ``` -###Relation的使用 +### Relation的使用 **简介:** @@ -1044,44 +1162,70 @@ query.relation('_User').then(res => { }) ``` +## 地理位置 +### 创建地理位置对象 -## 数组操作 +``` +const point = Bmob.GeoPoint({ latitude: 23.052033,longitude: 113.405447 }) +``` -为了帮你存储数组类数据,有三种操作你可以原子性地改动一个数组,这需要一个给定的 key: +### 查询地理位置 -- `add`在一个数组的末尾加入一个给定的对象。 -- `addUnique`只会把原本不存在的对象加入数组,所以加入的位置没有保证。 - 比如, 我们想在数组"DiaryType"中加入日记类型: +为了限定搜索的最大距离范围,需要加入 `公里` 参数来限定,如果不加,则默认是100KM的半径。比如要找的半径在10公里内的话 -**添加数组:** ``` -const query = Bmob.Query('tableName') -query.add("DiaryType", ["public"]); -query.addUnique("DiaryType", ["secret"]); -query.save(); +const query = Bmob.Query("tableName"); +query.withinKilometers("字段名", point, 10); //10指的是公里 +query.find().then(res => { + console.log(res) +}); ``` -**更新数组:** +同样作查询寻找在一个特定的范围里面的对象也是可以的,为了找到在一个矩形区域里的对象,按下面的格式加入一个约束 + ``` -const query = Bmob.Query('tableName') -query.get('ObjectId').then(res => { - res.add("DiaryType", ["public"]); - res.addUnique("DiaryType", ["secret"]); - res.save(); +const point = Bmob.GeoPoint({ latitude: 23.052033,longitude: 113.405447 }) +const point1 = Bmob.GeoPoint({ latitude: 23.052033,longitude: 113.405447 }) +const query = Bmob.Query("tableName"); +query.withinGeoBox("字段名", point, point1); //制造一个矩形区域 +query.find().then(res => { + console.log(res) +}); +``` + + + +### 添加地理位置 + +``` +const point = Bmob.GeoPoint({ latitude: 23.052033,longitude: 113.405447 }) +const query = Bmob.Query('tableName'); +query.set("字段名称",point) +query.save().then(res => { + console.log(res) +}).catch(err => { + console.log(err) }) ``` -**删除数组:** + +### 修改地理位置 + + + ``` +const point = Bmob.GeoPoint({ latitude: 23.052033,longitude: 113.405447 }) const query = Bmob.Query('tableName') -query.get('ObjectId').then(res => { - res.remove("DiaryType", ["secret"]); - res.save(); +query.get('c02b7b018f').then(res => { + res.set('字段名称',point) + res.save() }) ``` + + ## 云函数使用 **简介:** @@ -1136,7 +1280,7 @@ Bmob.functions(params.funcName,params.data).then(function (response) { ``` -##文件 +## 文件 ### WEB文件上传 @@ -1259,6 +1403,18 @@ del.destroy(val).then(res => { ## 小程序操作 ## +### 授权操作 + +如小程序使用微信登陆、生成二维码、支付等需要微信的操作,请在Bmob授权后使用。 + +登陆Bmob控制台->应用设置->应用配置 + +> 如小程序只是操作数据库,不关联微信用户,无需授权即可使用。 + +### 域名配置 + +登陆Bmob控制台->应用设置->应用配置,把显示的域名填写到微信小程序平台 + ### 小程序一键登录 **简介:** @@ -1458,14 +1614,38 @@ Bmob.generateCode 参数列表 ### 小程序付款到零钱## +**简介:** + 付款到零钱目前已经支持,常见使用场景是用户小程序里面提现,由于此接口用的人少,如需要使用可提交工单联系工作人员。 +**注意事项:** + +此功能先看下自己微信支付支付有开通,默认是没开通的,微信18年的开通条件是 + +**开通条件** +需同时满足两个条件,才有开通该功能入口: +1、T+0 (T日结算至基本账户),结算商户需满足两个条件:1、入驻满90天,2、截止今日往回推30天连续不间断保持有交易。 +2、其余结算周期的商户无限制,可立即前往【商户平台】->【产品中心】申请开通。 +注:连续30天交易无金额限制,请保持正常交易。 + +**使用条件:** + +1. 需企业用户微信支付提前开通付款到零钱功能 + +2. 填写支付商户密匙到Bmob控制台 + + + + + ### 小程序支付 **简介:** 微信小程序支付,用户付款到微信支付账户。 + + **使用条件:** 1. 需企业用户提前开通微信支付