wechat.js 6.0 KB
// import request from './request'; //笔者自己封装的网络请求类,也可以直接使用uni.request
var jweixin = require('jweixin-module');

export default {
    //判断是否在微信中
    isWechat: function() {
        var ua = window.navigator.userAgent.toLowerCase();
        if (ua.match(/micromessenger/i) == 'micromessenger') {
            return true;
        } else {
            return false;
        }
    },
    //初始化sdk配置
    initJssdkShare: function(callback, url) {
        //服务端进行签名 ,可使用uni.request替换。 签名算法请看文档
		uni.request({
			url:'http://obituaries.t.brotop.cn/api/Common/getJsSdkConfig',
			method:'post',
			data:{
                url: url,
				api:'updateTimelineShareData,updateAppMessageShareData,getLocation'
            },
			success: (res) => {
				if (res.data) {
				    jweixin.config({
				        debug: true,
						appId: res.data.data.config.appId,
						timestamp: res.data.data.config.timestamp,
						nonceStr: res.data.data.config.nonceStr,
						signature: res.data.data.config.signature,
				        jsApiList: [
				            'checkJsApi',
				            'updateTimelineShareData',
				            'updateAppMessageShareData',
				            'getLocation'
				        ]
				    });
				    //配置完成后,再执行分享等功能
				    if (callback) {
				        callback(res.data.data.config);
				    }
				}
			}
		})
    },
    initJssdk:function(callback){
		uni.request({
			url:'http://obituaries.t.brotop.cn/api/Common/getJsSdkConfig',
			method:'post',
			data:{
				url:window.location.href,
				api:'getLocation'
			},
			success: (res) => {
				if(res.data){
				    jweixin.config({
				        debug: true,
				        appId: res.data.data.config.appId,
				        timestamp: res.data.data.config.timestamp,
				        nonceStr: res.data.data.config.nonceStr,
				        signature: res.data.data.config.signature,
				        jsApiList: [
				            'checkJsApi',
				            'getLocation'
				        ]
				    });
				    //配置完成后,再执行分享等功能
				    if (callback) {
				        callback(res.data.data.config);
				    }
				}
			}
		})
    },
	//打开地图
	initJssdkGetLocation:function(callback){
		uni.request({
			url:'http://obituaries.t.brotop.cn/api/Common/getJsSdkConfig',
			method:'post',
			data:{
				url:window.location.href,
				api:'openLocation,getLocation'
			},
			success: (res) => {
				if(res.data){
				    jweixin.config({
				        debug: true,
				        appId: res.data.data.config.appId,
				        timestamp: res.data.data.config.timestamp,
				        nonceStr: res.data.data.config.nonceStr,
				        signature: res.data.data.config.signature,
				        jsApiList: [
				            'checkJsApi',
				            'openLocation',
							'getLocation'
				        ]
				    });
				    //配置完成后,再执行查看地图
				    if (callback) {
				        callback(res.data.data.config);
				    }
				}
			}
		})
	},
    //在需要自定义分享的页面中调用
    share: function(callback,data, url) {
        url = url ? url : window.location.href.split('#')[0];
        if (!this.isWechat()) {
            return;
        }
        //每次都需要重新初始化配置,才可以进行分享
        this.initJssdkShare(function(signData) {
            jweixin.ready(function() {
				console.log('data',data)
				console.log('url',url)
                var shareData = {
                    title: data && data.title ? data.title : signData.site_name,
                    desc: data && data.desc ? data.desc : signData.site_description,
                    link: url,
                    imgUrl: data && data.img ? data.img : signData.site_logo,
                    success: function(res) {
						callback(res)
                        //用户点击分享后的回调,这里可以进行统计,例如分享送金币之类的
                        // post('/api/member/share');
                    },
                    cancel: function(res) {}
                };
				console.log('shareData',shareData)
                //分享给朋友接口
                jweixin.updateAppMessageShareData(shareData);
                //分享到朋友圈接口
                jweixin.updateTimelineShareData(shareData);
            });
        }, url);
    },
    //在需要定位页面调用
    location: function(callback) {
        if (!this.isWechat()) {
		uni.showToast({
			title:'请在微信内置浏览器中打开',
			icon:'none'
		})
            return;
        }
        this.initJssdk(function(res) {
            jweixin.ready(function() {
                jweixin.getLocation({
                    type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
                    success: function (res) {

						uni.request({
							url:'https://apis.map.qq.com/ws/geocoder/v1/?location='+res.latitude+','+res.longitude+'&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77&get_poi=1',
							method:'get',
							success: (addressRes) => {
								console.log(addressRes)
							}
						})
						console.log('callback',res)
                        callback(res)
                    },
                    fail:function(res){
                        console.log(res)
                    }
                });
            });
        });
    },
	openLocation: function(data) {
	    if (!this.isWechat()) {
		uni.showToast({
			title:'请在微信内置浏览器中打开',
			icon:'none'
		})
	        return;
	    }
	    this.initJssdkGetLocation(function() {
	        jweixin.ready(function() {
				jweixin.openLocation({
					latitude: data.latitude, // 纬度,浮点数,范围为90 ~ -90
					longitude: data.longitude, // 经度,浮点数,范围为180 ~ -180。
					name: data.name, // 位置名
					address: data.address, // 地址详情说明
					scale: 16, // 地图缩放级别,整形值,范围从1~28。默认为最大
					infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转
				});
	        });
	    });
	}
}