2020-11-10

微信转支付宝小程序的坑记录


this.data的大坑:

切记不要用修改this.data的方式修改引用类型的值

初始化数据里面

data: {

xxx: {a:0},

},

如果直接先用this.data.xxx.a=1的方式改了一次数据,那么不仅只能修改初始化的数据,更严重的是,初始化数据已经被破坏了。

因为这之后,再用this.setData({xxx:{a:2}}),可以看到页面上xxx.a 虽然等于2了,但实际只是页面渲染的数据发生了变化而已,初始化数据并没有变,且无论你再操作几次setData,xxx.a都依然等于1。

具体表现为,当你跳出当前页面再跳回来,会发现xxx.a一直是1

这就是官方文档提到的数据不一致的问题


网络请求:

wx.request 改成 my.request 之后注意:

header =》headers

statusCode =》 status

支付宝这边success() 仅包含请求正常(状态码status== 200)的结果。如果要处理请求出错(状态码status != 200) 的结果,需改在fail(){}里面做处理。


手动支付接口:

与上文网络请求接口继续相反,支付宝这边success() 不仅包含请求正常的结果,也包含了用户取消的结果,不像微信,将用户取消放在了fail()里面。


获取手机号接口:

与微信差异很大,而且支付宝这边明显混乱一点,button莫名其妙的单独用onError属性来处理“拒绝”,如果按照微信的习惯去理解,则很容易跟 my.getPhoneNumber的fail()用法搞混。关键支付宝这边目前还不支持模拟器调试此功能。


组件对象:

组件的属性设置

properties=》props

方法内使用:

this.data =》this.props

that.triggerEvent 废弃,改用this.props直接调用

https://opendocs.alipay.com/mini/framework/component_object


input控件:

不支持 click、tap、touchstart,可以套一个view

focus属性的值如果多次通过setData设置为true时,会发现第二次setData无效,需要同时给input加入onBlur事件或者通过其他方法将focus属性的值设为false(重置/刷新input),才能再次让focus=true生效。