@antmove/wx-alipay
Version:
transform wechat miniprogram to alipay miniprogram tool.
144 lines (132 loc) • 2.9 kB
JavaScript
const myApi = require('./my')
const utils = require('./utils.js')
const globalVar = require('./config').global
const hasProxy = typeof Proxy !== 'undefined'
let _Proxy = function() { }
if (hasProxy) { _Proxy = Proxy }
let myProxy = null
/**
* runtime error catch
*/
function warnApi(api) {
const iscanIuse = globalVar.canIUse(api)
// my下有此方法,但目前不可用
if (!iscanIuse || api === 'getFileSystemManager') {
utils.warn(
`支付宝暂不支持${api}`,
{
apiName: api,
errorType: 0,
type: 'api',
},
)
return function() {
console.error(`支付宝暂不支持${api}`)
}
}
}
module.exports = function(obj = {}) {
if (myProxy) {
return myProxy
}
const _obj = Object.assign({}, obj, myApi)
if (!hasProxy) {
Object.keys(myApi)
.forEach((attr) => {
Object.defineProperty(_obj, attr, {
get() {
let ret
if (myApi[attr]) {
ret = function(o = {}, args = '') {
if (args) {
return myApi[attr].fn(o, args)
}
return myApi[attr].fn(o)
}
} else {
const helpFn = warnApi(attr)
ret = obj[attr] || helpFn
}
return ret
},
})
})
return _obj
}
myProxy = new _Proxy(_obj, {
get(target, attr) {
let ret
if (typeof attr === 'string' && myApi[attr]) {
if (typeof myApi[attr].fn === 'function') {
ret = function(opts = {}, args = '') {
if (args) {
return myApi[attr].fn(opts, args)
}
return myApi[attr].fn(opts)
}
} else {
ret = myApi[attr]
}
} else {
const helpFn = warnApi(attr)
ret = target[attr] || helpFn
}
return ret
},
})
return myProxy
}
/**
* for bindgetuserinfo open-type of button
*/
myApi.getUserInfoWrap = {
fn(e = {}, fn) {
globalVar.getAuthCode({
scopes: 'auth_user',
success: () => {
globalVar.getAuthUserInfo({
success(userInfo) {
fn && fn({
...e,
detail: {
userInfo,
},
})
},
})
},
fail(res) {
fn && fn({
...e,
detail: res,
})
},
})
},
}
/**
* for bindgetphonenumber open-type of button
*/
myApi.getPhoneNumberWrap = {
fn(e = {}, fn) {
globalVar.getPhoneNumber({
success: (res) => {
const encryptedData = res.response
e = {
...e,
detail: encryptedData,
res,
}
fn && fn(e)
},
fail: (res) => {
e = {
...e,
detail: {},
res,
}
fn && fn(e)
},
})
},
}