123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- /**
- * 本模块封装微信浏览器下的一些方法。
- * 更多微信网页开发sdk方法,详见:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html
- */
- import jweixin, {
- ready
- } from 'weixin-js-sdk';
- import $helper from '@/sheep/helper';
- import AuthUtil from '@/sheep/api/member/auth';
- import {
- t
- } from '@/locale';
- let configSuccess = false;
- export default {
- // 判断是否在微信中
- isWechat() {
- const ua = window.navigator.userAgent.toLowerCase();
- // noinspection EqualityComparisonWithCoercionJS
- return ua.match(/micromessenger/i) == 'micromessenger';
- },
- isReady(api) {
- jweixin.ready(api);
- },
- // 初始化 JSSDK
- async init(callback) {
- if (!this.isWechat()) {
- $helper.toast(t('common.use_wechat_browser'));
- return;
- }
- // 调用后端接口,获得 JSSDK 初始化所需的签名
- const url = location.href.split('#')[0];
- const {
- code,
- data
- } = await AuthUtil.createWeixinMpJsapiSignature(url);
- if (code === 0) {
- jweixin.config({
- debug: false,
- appId: data.appId,
- timestamp: data.timestamp,
- nonceStr: data.nonceStr,
- signature: data.signature,
- jsApiList: ['chooseWXPay', 'openAddress', 'checkJsApi',
- 'scanQRCode'], // TODO 非繁人:后续可以设置更多权限;
- openTagList: data.openTagList
- });
- }
- console.log('appdata:', data)
- // 监听结果
- configSuccess = true;
- jweixin.error((err) => {
- configSuccess = false;
- console.error('微信 JSSDK 初始化失败', err);
- // $helper.toast('微信JSSDK:' + err.errMsg);
- });
- jweixin.ready(() => {
- if (configSuccess) {
- console.log('微信 JSSDK 初始化成功');
- }
- })
- jweixin.checkJsApi({
- jsApiList: ['openAddress'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
- success: function(res) {
- // 以键值对的形式返回,可用的api值true,不可用为false
- // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
- console.log(res)
- }
- });
- // 回调
- if (callback) {
- callback(data);
- }
- },
- //在需要定位页面调用 TODO 非繁人:未测试
- getLocation(callback) {
- this.isReady(() => {
- jweixin.getLocation({
- type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
- success: function(res) {
- callback(res);
- },
- fail: function(res) {
- console.log('%c微信H5sdk,getLocation失败:', 'color:green;background:yellow');
- },
- });
- });
- },
- //获取微信收货地址 TODO 非繁人:未测试
- openAddress(callback) {
- this.isReady(() => {
- console.log("ready? go!")
- jweixin.openAddress({
- success: function(res) {
- // $helper.toast('res', res);
- callback.success && callback.success(res);
- },
- fail: function(err) {
- // $helper.toast('res', err);
- callback.error && callback.error(err);
- console.log('微信H5sdk,openAddress失败,原因是:', err);
- },
- complete: function(res) {},
- });
- });
- },
- // 微信扫码 TODO 非繁人:未测试
- scanQRCode(callback) {
- this.isReady(() => {
- jweixin.scanQRCode({
- needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
- scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有
- success: function(res) {
- callback(res);
- },
- fail: function(res) {
- console.log('%c微信H5sdk,scanQRCode失败:', 'color:green;background:yellow');
- },
- });
- });
- },
- // 更新微信分享信息 TODO 非繁人:未测试
- updateShareInfo(data, callback = null) {
- this.isReady(() => {
- const shareData = {
- title: data.title,
- desc: data.desc,
- link: data.link,
- imgUrl: data.image,
- success: function(res) {
- if (callback) {
- callback(res);
- }
- // 分享后的一些操作,比如分享统计等等
- },
- cancel: function(res) {},
- };
- // 新版 分享聊天api
- jweixin.updateAppMessageShareData(shareData);
- // 新版 分享到朋友圈api
- jweixin.updateTimelineShareData(shareData);
- });
- },
- // 打开坐标位置 TODO 非繁人:未测试
- openLocation(data, callback) {
- this.isReady(() => {
- jweixin.openLocation({
- //根据传入的坐标打开地图
- latitude: data.latitude,
- longitude: data.longitude,
- });
- });
- },
- // 选择图片 TODO 非繁人:未测试
- chooseImage(callback) {
- this.isReady(() => {
- jweixin.chooseImage({
- count: 1,
- sizeType: ['compressed'],
- sourceType: ['album'],
- success: function(rs) {
- callback(rs);
- },
- });
- });
- },
- // 微信支付
- wxpay(data, callback) {
- this.isReady(() => {
- jweixin.chooseWXPay({
- timestamp: data
- .timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
- nonceStr: data.nonceStr, // 支付签名随机串,不长于 32 位
- package: data.packageValue, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
- signType: data.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
- paySign: data.paySign, // 支付签名
- success: function(res) {
- callback.success && callback.success(res);
- },
- fail: function(err) {
- callback.fail && callback.fail(err);
- },
- cancel: function(err) {
- callback.cancel && callback.cancel(err);
- },
- });
- });
- },
- };
|