好久没写文章了,最近正好把公司的微信小程序移植到支付宝,期间遇到的问题总结一下。
首先:使用这个工具https://github.com/foxitdog/wx2ali
将微信小程序转阿里小程序,期间工具会帮我们替换掉绝大部分的名称。
接下来就是要调试我们的支付宝小程序了。
- xx.js的问题
xx.js的文件,一般是在js中引入并使用,这里主要需要注意的是两边引入方式的不同。
- 微信
var xx = require("../../xx.js")
- 支付宝
import xx from '../../utils/xx.js'
- xx.wxs的问题
一般项目中我们都会封装xx.wxs这个工具文件在wxml中处理一些数据,支付宝也是支持的,
但是,它的后缀是xx.sjs
然后就是引入的问题,
- 微信
在wxml文件中是这样<wxs src="../../xx.wxs" module="xx" />引入的。
- 支付宝
在axml文件中需要改为<import-sjs name="xx" from="../../xx.sjs"/>
- str.match is not a function报错
这个是我遇到最大的坑了,因为微信小程序一开始是后台写的,
wx:for='{{xxArray}}' wx:key
这种写法在微信里不会报错,但是到了支付宝中
a:for="{{xxArray}}" a:key
会导致程序无法运行,而且报错提示不准确,无法定位问题,
网上也没找到问题,解决全靠蒙的【😓】,改为下面这种就行了,
a:for="{{xxArray}}" a:key='key'
4.rem的坑
还是因为微信项目是后台写的,后台还是根据h5改的,
导致项目中同时存在了,px,rpx,rem,三种单位,
在微信中显示是没有问题的,在支付宝中会导致极大的差别,
我粗略的转换了一下,1px=2rpx;1rem=32rpx;
效果最后和微信差不多,也就不追究啦
5.wx.showModal与my.showToast
工具转换,好像是忽略掉了这两个的区别,只是把外面名称换了,
内部没有换,在wx.showModal里的titile,
my.showToast需要换成content,否则提示信息显示不完整
5.statusCode需要替换为status
项目中有可能使用statusCode判断了接口返回的状态,在支付宝中需要替换为status
5.支付的问题
- 微信
wx.requestPayment
- 支付宝
my.tradePay
它们两个的区别是,参数多少,以及对成功的判定,微信是没支付就不会走sucess的方法,支付宝是
只要不是异常都会走sucess,但是会在sucess的返回值里做区分,别的没有太大坑
然后,吐槽下支付宝的坑
它的console输出区域,连第几行打印都显示的不准确。
每编辑一个文件都要单独保存一下,很容易忘记。
真机调试不方便
命名不能有@
xx.sjs页面中使用,如果数据出问题,可能导致整个页面不加载,也不报错
......
网友评论