UNPKG

mini-jsdk

Version:

NNW小程序jsdk统一

373 lines (352 loc) 7.38 kB
/* * @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' /** * @func 统一处理调用支付宝API 回调 * @param {Object} res 支付宝API返回结果 * @param {Function} success 成功回调 * @param {Function} fail 失败回调 */ function globalCallback (res, success, fail) { const { code } = res if (code === 10 || code === 11) { fail && fail(code) } else { success(code) } } /** * 支付宝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 */ export const getEnv = callback => { window.NUOMY.getEnv(callback) } /** * 支付宝扫码 postmessage 处理 * @param {*} param0 */ export const scanQRCode = ({ scanType, success = () => undefined, fail = () => undefined }) => { const type = { qrCode: 'qr', barCode: 'bar' } onMessage(success, fail) window.NUOMY.postMessage({ eventName: 'openScan' }) } /** * @func 获取支付宝发票抬头 postmessage 处理 * @param {*} param0 */ export const chooseInvoiceTitle = ({ success = () => undefined, fail = () => undefined }) => { onMessage(success, fail) window.NUOMY.postMessage({ eventName: 'chooseInvoiceTitle' }) } /** * @func 获取支付宝授权 postmessage 处理 * @param {*} param0 */ export const getAuthCode = ({ success = () => undefined, fail = () => undefined }) => { onMessage(success, fail) window.NUOMY.postMessage({ eventName: 'getAuthCode' }) } /** * desc: https://opendocs.alipay.com/mini/api/navigatetoalipaypage * 跳转支付宝内置小程序页面 postmessage 处理 * @param {*} param0 */ export const navigateToAlipayPage = ({ appCode = null, appParams = null, path = '', extraParam = null, success = () => undefined, fail = () => undefined }) => { onMessage(success, fail) if (path) { window.NUOMY.postMessage({ eventName: 'navigateToAlipayPage', data: { path, appCode, appParams }, extraParam }) } else { fail({ err: '请输入跳转地址' }) } } /** * webview 跳转小程序 * @param {} param0 */ export const navigateToMiniProgram = ({ appId = '', path = '', extraData = null, success = () => undefined, fail = () => undefined }) => { onMessage(success, fail) if (path && appId) { window.NUOMY.postMessage({ eventName: 'navigateToMiniProgram', data: { path, appId }, extraData }) } else { fail({ err: '请输入跳转地址path或者appId' }) } } /** * @func 支付宝实名认证 */ export const startAPVerify = ({ certno = '', certname = '', extraData = null, success = () => undefined, fail = () => undefined }) => { onMessage(success, fail) if (certno && certname) { window.NUOMY.postMessage({ eventName: 'startAPVerify', data: { certno, certname }, extraData }) } else { fail({ err: '请输入实名认证用户姓名和身份证号码' }) } } /** * 支付宝APP 小程序调用 * 选择图片 * @param {*} param0 */ export const chooseImage = ({ count = 1, // 默认1 sizeType = ['original', 'compressed'], sourceType = ['camera', 'album'], success = () => undefined, fail = () => undefined, complete = () => undefined }) => { window.NUOMY.chooseImage({ sourceType, count, success, fail, complete }) } /** * webview 返回 */ export const navigateBack = () => { window.NUOMY.navigateBack({ fail (err) { // 支付宝小程序返回失败执行此方法。统一回到小程序首页 // PS:此处区别与微信小程序,微信小程序返回失败也不会执行fail window.NUOMY.switchTab({ url: miniHomePage, fail (es) { // 再失败就没救了 console.log('err', es) } }) } }) } /** * webview tabbar 跳转 * @param {*} param0 */ export const switchTab = ({ url = miniHomePage, success, fail, complete }) => { window.NUOMY.switchTab({ url, success, complete, fail (es) { // 失败就没救了 console.log('err', es) } }) } /** * webview 跳转页面 * @param {*} param0 */ export const navigateTo = ({ url, success, fail, complete }) => { window.NUOMY.navigateTo({ url, success, fail, complete }) } /** * webview 重定向 * @param {Object} param */ export const redirectTo = ({ url, success, fail, complete }) => { window.NUOMY.redirectTo({ url, fail, success, complete }) } /** * webview 关闭当前所有页面,跳转到应用内的某个指定页面。 * @param {Object} param */ export const reLaunch = ({ url, success, fail, complete }) => { window.NUOMY.reLaunch({ url, success, fail, complete }) } /** * @func 支付宝支付 * @param {Object} param0 */ export const tradePay = ({ tradeNO = '', payStr = '', success = () => undefined, fail = () => undefined }) => { const payNo = payStr || tradeNO if (!payNo) { fail() console.warn('请输入支付交易号') return } window.NUOMY.tradePay({ tradeNO: payNo, success, fail }) } /** * @func 支付宝定位 * @param {Object} param0 */ export const getLocation = ({ type = 0, cacheTimeout = 30, success = () => undefined, fail = () => undefined }) => { window.NUOMY.getLocation({ type, cacheTimeout, success, fail }) }