mini-jsdk
Version:
NNW小程序jsdk统一
857 lines (780 loc) • 18.3 kB
JavaScript
/* main.min.js@0.1.1 - ES2015 - dev */
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly) symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
if (i % 2) {
ownKeys(Object(source), true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
}
return target;
}
const UA = window.navigator.userAgent;
const isAliPay = (() => /alipay/gi.test(UA))();
const isWeChat = (() => /MicroMessenger/gi.test(UA))();
/*
* @Date 2020-03-23
* @Author gt333
* @description 支付宝webview jsdk
* 支付宝jsdk: https://myjsapi.alipay.com/alipayjsapi/index.html
* 支付宝小程序jsdk: https://opendocs.alipay.com/mini/component/web-view
* ====
* @update_date
* @update_author
* @update_desc
* ====
*/
const miniHomePage = '/pages/invoice/invList/invList';
/**
* 支付宝APP H5方法,非小程序调用 (废弃)
* @func 扫一扫
* @param {Object} param0
*/
// export const scanQRCode = ({
// scanType,
// success = () => undefined,
// fail = () => undefined
// }) => {
// const type = {
// qrCode: "qr",
// barCode: "bar"
// };
// ap.scan(
// {
// type: type[scanType]
// },
// function(res) {
// callback(res, success, fail);
// }
// );
// };
/**
* 支付宝APP H5方法,非小程序调用 (废弃)
* 选择图片
* @param {Object} param0
*/
// export const chooseImage = ({
// count = 9,
// sizeType = ["original", "compressed"],
// sourceType = ["camera", "album"]
// }) => {
// ap.chooseImage({ count, sourceType }, function(res) {
// callback(
// res,
// () => {
// const { apFilePaths } = res;
// success(res);
// },
// fail
// );
// });
// };
// postmessage 统一监听
const onMessage = (success, fail) => {
// if (!window.NUOMY.onMessage) {
window.NUOMY.onMessage = function (res) {
if (res && res instanceof Object) {
try {
for (var keys in res) {
if (String(keys).toLocaleLowerCase().indexOf('success') > -1) {
success(res[keys]);
}
if (String(keys).toLocaleLowerCase().indexOf('fail') > -1) {
fail(res[keys]);
}
}
} catch (error) {}
} else {
console.warn('小程序传入参数非对象,拒绝访问');
fail({
err: '小程序传入参数非对象,拒绝访问'
});
}
}; // }
};
/**
* 获取小程序环境
* @param {Function} callback
*/
const getEnv = callback => {
window.NUOMY.getEnv(callback);
};
/**
* 支付宝扫码 postmessage 处理
* @param {*} param0
*/
const scanQRCode = ({
scanType,
success: _success = () => undefined,
fail: _fail = () => undefined
}) => {
onMessage(_success, _fail);
window.NUOMY.postMessage({
eventName: 'openScan'
});
};
/**
* @func 获取支付宝发票抬头 postmessage 处理
* @param {*} param0
*/
const chooseInvoiceTitle = ({
success: _success2 = () => undefined,
fail: _fail2 = () => undefined
}) => {
onMessage(_success2, _fail2);
window.NUOMY.postMessage({
eventName: 'chooseInvoiceTitle'
});
};
/**
* @func 获取支付宝授权 postmessage 处理
* @param {*} param0
*/
const getAuthCode = ({
success: _success3 = () => undefined,
fail: _fail3 = () => undefined
}) => {
onMessage(_success3, _fail3);
window.NUOMY.postMessage({
eventName: 'getAuthCode'
});
};
/**
* desc: https://opendocs.alipay.com/mini/api/navigatetoalipaypage
* 跳转支付宝内置小程序页面 postmessage 处理
* @param {*} param0
*/
const navigateToAlipayPage = ({
appCode: _appCode = null,
appParams: _appParams = null,
path: _path = '',
extraParam: _extraParam = null,
success: _success4 = () => undefined,
fail: _fail4 = () => undefined
}) => {
onMessage(_success4, _fail4);
if (_path) {
window.NUOMY.postMessage({
eventName: 'navigateToAlipayPage',
data: {
path: _path,
appCode: _appCode,
appParams: _appParams
},
extraParam: _extraParam
});
} else {
_fail4({
err: '请输入跳转地址'
});
}
};
/**
* webview 跳转小程序
* @param {} param0
*/
const navigateToMiniProgram = ({
appId: _appId = '',
path: _path2 = '',
extraData: _extraData = null,
success: _success5 = () => undefined,
fail: _fail5 = () => undefined
}) => {
onMessage(_success5, _fail5);
if (_path2 && _appId) {
window.NUOMY.postMessage({
eventName: 'navigateToMiniProgram',
data: {
path: _path2,
appId: _appId
},
extraData: _extraData
});
} else {
_fail5({
err: '请输入跳转地址path或者appId'
});
}
};
/**
* @func 支付宝实名认证
*/
const startAPVerify = ({
certno: _certno = '',
certname: _certname = '',
extraData: _extraData2 = null,
success: _success6 = () => undefined,
fail: _fail6 = () => undefined
}) => {
onMessage(_success6, _fail6);
if (_certno && _certname) {
window.NUOMY.postMessage({
eventName: 'startAPVerify',
data: {
certno: _certno,
certname: _certname
},
extraData: _extraData2
});
} else {
_fail6({
err: '请输入实名认证用户姓名和身份证号码'
});
}
};
/**
* 支付宝APP 小程序调用
* 选择图片
* @param {*} param0
*/
const chooseImage = ({
count: _count = 1,
// 默认1
sizeType: _sizeType = ['original', 'compressed'],
sourceType: _sourceType = ['camera', 'album'],
success: _success7 = () => undefined,
fail: _fail7 = () => undefined,
complete: _complete = () => undefined
}) => {
window.NUOMY.chooseImage({
sourceType: _sourceType,
count: _count,
success: _success7,
fail: _fail7,
complete: _complete
});
};
/**
* webview 返回
*/
const navigateBack = () => {
window.NUOMY.navigateBack({
fail(err) {
// 支付宝小程序返回失败执行此方法。统一回到小程序首页
// PS:此处区别与微信小程序,微信小程序返回失败也不会执行fail
window.NUOMY.switchTab({
url: miniHomePage,
fail(es) {
// 再失败就没救了
console.log('err', es);
}
});
}
});
};
/**
* webview tabbar 跳转
* @param {*} param0
*/
const switchTab = ({
url: _url = miniHomePage,
success,
fail,
complete
}) => {
window.NUOMY.switchTab({
url: _url,
success,
complete,
fail(es) {
// 失败就没救了
console.log('err', es);
}
});
};
/**
* webview 跳转页面
* @param {*} param0
*/
const navigateTo = ({
url,
success,
fail,
complete
}) => {
window.NUOMY.navigateTo({
url,
success,
fail,
complete
});
};
/**
* webview 重定向
* @param {Object} param
*/
const redirectTo = ({
url,
success,
fail,
complete
}) => {
window.NUOMY.redirectTo({
url,
fail,
success,
complete
});
};
/**
* webview 关闭当前所有页面,跳转到应用内的某个指定页面。
* @param {Object} param
*/
const reLaunch = ({
url,
success,
fail,
complete
}) => {
window.NUOMY.reLaunch({
url,
success,
fail,
complete
});
};
/**
* @func 支付宝支付
* @param {Object} param0
*/
const tradePay = ({
tradeNO: _tradeNO = '',
payStr: _payStr = '',
success: _success8 = () => undefined,
fail: _fail8 = () => undefined
}) => {
const payNo = _payStr || _tradeNO;
if (!payNo) {
_fail8();
console.warn('请输入支付交易号');
return;
}
window.NUOMY.tradePay({
tradeNO: payNo,
success: _success8,
fail: _fail8
});
};
/**
* @func 支付宝定位
* @param {Object} param0
*/
const getLocation = ({
type: _type = 0,
cacheTimeout: _cacheTimeout = 30,
success: _success9 = () => undefined,
fail: _fail9 = () => undefined
}) => {
window.NUOMY.getLocation({
type: _type,
cacheTimeout: _cacheTimeout,
success: _success9,
fail: _fail9
});
};
var alipaySDK = /*#__PURE__*/Object.freeze({
__proto__: null,
getEnv: getEnv,
scanQRCode: scanQRCode,
chooseInvoiceTitle: chooseInvoiceTitle,
getAuthCode: getAuthCode,
navigateToAlipayPage: navigateToAlipayPage,
navigateToMiniProgram: navigateToMiniProgram,
startAPVerify: startAPVerify,
chooseImage: chooseImage,
navigateBack: navigateBack,
switchTab: switchTab,
navigateTo: navigateTo,
redirectTo: redirectTo,
reLaunch: reLaunch,
tradePay: tradePay,
getLocation: getLocation
});
/*
* @Date 2020-03-23
* @Author gt333
* @description 微信webviewjsdk
* ====
* @update_date
* @update_author
* @update_desc
* ====
*/
const miniHomePage$1 = "/pages/invoice/invList/invList";
/**
* 获取小程序环境
* @param {Function} callback
*/
const getEnv$1 = callback => {
window.NUOWX.miniProgram.getEnv(callback);
};
/**
* 微信jsdk扫一扫功能
* @param {*} param0
*/
const scanQRCode$1 = ({
needResult: _needResult = 0,
scanType: _scanType = "qr",
success: _success = () => undefined,
fail: _fail = () => undefined
}) => {
window.NUOWX.scanQRCode({
needResult: _needResult,
// 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
scanType: _scanType,
// 可以指定扫二维码还是一维码,默认二者都有
success: _success,
fail: err => {
console.log(err);
_fail(err);
}
});
};
/**
* 选择图片
* @param {*} param0
*/
const chooseImage$1 = ({
count: _count = 1,
// 默认1
sizeType: _sizeType = ["original", "compressed"],
// 可以指定是原图还是压缩图,默认二者都有
sourceType: _sourceType = ["album", "camera"],
// 可以指定来源是相册还是相机,默认二者都有
success: _success2 = () => undefined,
fail: _fail2 = () => undefined
}) => {
window.NUOWX.chooseImage({
count: _count,
sizeType: _sizeType,
sourceType: _sourceType,
success: res => {
var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
},
fail: err => {
console.log(err);
_fail2(err);
}
});
};
/**
* webview 跳转小程序
* @param {} param0
*/
const navigateToMiniProgram$1 = ({
appId: _appId = "",
path: _path = "",
extraData: _extraData = null,
success: _success3 = () => undefined,
fail: _fail3 = () => undefined,
complete: _complete = () => undefined
}) => {
if (_appId && _path) {
window.NUOWX.miniProgram.postMessage({
data: {
eventName: "navigateToMiniProgram",
data: {
path: _path,
appId: _appId
},
extraData: _extraData
}
}); // 微信小程序跳转其它小程序需要,跳转到首页再打开小程序
window.NUOWX.miniProgram.switchTab({
url: miniHomePage$1,
success: _success3,
fail: _fail3,
complete: _complete
});
} else {
_fail3({
err: "请输入跳转地址或者APPID"
});
console.warn("请输入跳转地址或者APPID");
}
};
/**
*
* 此API只为兼容 支付宝小程序中跳转到支付宝官方业务或运营活动页面。 my.ap.navigateToAlipayPage.
* web-view 跳转小程序请使用 navigateToMiniProgram
* @param {*} param0
*/
const navigateToAlipayPage$1 = ({
appCode: _appCode = null,
appParams: _appParams = null,
path: _path2 = "",
success: _success4 = () => undefined,
fail: _fail4 = () => undefined,
complete: _complete2 = () => undefined
}) => {
if (_appParams && _appCode) {
window.NUOWX.miniProgram.postMessage({
data: {
eventName: "navigateToAlipayPage",
path: _path2,
appId: _appCode,
extraData: _appParams
}
}); // 微信小程序跳转其它小程序需要,跳转到首页再打开小程序
window.NUOWX.miniProgram.switchTab({
url: miniHomePage$1,
success: _success4,
fail: _fail4,
complete: _complete2
});
} else {
_fail4({
err: "请输入跳转地址或者APPID"
});
}
};
/**
* webview 返回
*/
const navigateBack$1 = () => {
window.NUOWX.miniProgram.navigateBack({
fail(err) {
console.log("err", err);
},
complete(err) {
// 微信小程序 webview 跳转成功此方法不会执行,失败才会执行
// 容错,防止公众号直接跳入webview调用返回出错
window.NUOWX.miniProgram.switchTab({
url: miniHomePage$1
});
}
});
};
/**
* webview tabbar 跳转
* @param {*} param0
*/
const switchTab$1 = ({
url: _url = miniHomePage$1,
success,
fail,
complete
}) => {
window.NUOWX.miniProgram.switchTab({
url: _url,
fail,
success,
complete
});
};
/**
* webview 跳转页面
* @param {*} param0
*/
const navigateTo$1 = ({
url,
success,
fail,
complete
}) => {
window.NUOWX.miniProgram.navigateTo({
url,
fail,
success,
complete
});
};
/**
* webview 重定向
* @param {Object} param
*/
const redirectTo$1 = ({
url,
success,
fail,
complete
}) => {
window.NUOWX.miniProgram.redirectTo({
url,
fail,
success,
complete
});
};
/**
* webview 关闭当前所有页面,跳转到应用内的某个指定页面。
* @param {Object} param
*/
const reLaunch$1 = ({
url,
success,
fail,
complete
}) => {
window.NUOWX.miniProgram.reLaunch({
url,
success,
fail,
complete
});
};
/**
* 微信支付
* @param {Object} param0
*/
const tradePay$1 = ({
payStr: _payStr = "",
tradeNO: _tradeNO = "",
orderStr: _orderStr = "",
callbackUrl: _callbackUrl = "",
// 支付回调跳转地址
success: _success5 = () => undefined,
fail: _fail5 = () => undefined
}) => {
if (_orderStr) {
navigateTo$1({
url: `/pages/pay/pay?payParams=${window.encodeURIComponent(_orderStr)}&callbackUrl=${window.encodeURIComponent(_callbackUrl)}&tradeNO=${_tradeNO}`
});
} else if (_payStr) {
navigateTo$1({
url: `/pages/pay/pay?payParams=${window.encodeURIComponent(_payStr)}&callbackUrl=${window.encodeURIComponent(_callbackUrl)}&tradeNO=${_tradeNO}`
});
} else {
_fail5({
err: "支付参数不可为空, 微信小程序需要orderStr或者payStr"
});
}
};
/**
* webview 定位
* @param {Object} param
*/
const getLocation$1 = ({
type: _type = "wgs84",
// 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
success: _success6 = () => undefined,
fail: _fail6 = () => undefined
}) => {
window.NUOWX.getLocation({
type: _type,
success: _success6,
fail: _fail6
});
};
var wxSDK = /*#__PURE__*/Object.freeze({
__proto__: null,
getEnv: getEnv$1,
scanQRCode: scanQRCode$1,
chooseImage: chooseImage$1,
navigateToMiniProgram: navigateToMiniProgram$1,
navigateToAlipayPage: navigateToAlipayPage$1,
navigateBack: navigateBack$1,
switchTab: switchTab$1,
navigateTo: navigateTo$1,
redirectTo: redirectTo$1,
reLaunch: reLaunch$1,
tradePay: tradePay$1,
getLocation: getLocation$1
});
/**
* @func jsdk 初始化
* @param {Function} callback
* @param {Object} params npm 搭配weixin-js-sdk 引入 需要传递jWeixin即weixin-js-sdk对象
*/
function ready(callback, platformObject) {
if (isAliPay) {
if (platformObject) {
// npm 形式引入miniSDK
window.NUOMY = platformObject;
return alipaySDK;
} else {
// 在html直接引入miniJSDK 运行
if (window.my) {
window.NUOMY = window.my;
callback && callback(alipaySDK);
} else {
console.warn("正在加载支付宝:https://appx/web-view.min.js"); // TODO:支付宝需要加载两JSDK,
loadScript("https://appx/web-view.min.js", () => {
window.NUOMY = window.my;
callback && callback(alipaySDK);
});
}
}
}
if (isWeChat) {
if (platformObject) {
window.NUOWX = platformObject;
return wxSDK;
} else {
if (!window.WeixinJSBridge || !WeixinJSBridge.invoke) {
const wxInit = () => {
window.NUOWX = window.wx;
if (!window.WeixinJSBridge || !WeixinJSBridge.invoke) {
document.addEventListener("WeixinJSBridgeReady", () => {
callback(wxSDK);
}, false);
} else {
callback(wxSDK);
}
};
if (!window.wx) {
loadScript("https://res2.wx.qq.com/open/js/jweixin-1.6.0.js", () => {
wxInit();
});
} else {
wxInit();
}
} else {
callback(wxSDK);
}
}
}
}
/**
* @func 动态加载js
* @param {String} url js url地址
* @param {Function} cb js加载成功回调
*/
function loadScript(url, cb) {
const script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", url);
script.onload = script.onreadystatechange = function () {
if (!this.readyState || this.readyState == "loaded" || this.readyState == "complete") {
cb && cb();
}
script.onload = script.onreadystatechange = null;
};
document.querySelector("head").appendChild(script);
}
var main = ready(sdk => {
window.miniSDK = _objectSpread2({}, sdk);
});
export default main;
//# sourceMappingURL=calculate.dev.js.map