1.1.42 • Published 2 months ago

toonsdk v1.1.42

Weekly downloads
-
License
MIT
Repository
-
Last release
2 months ago

统一 SDK


基于 e 福州 APP 协议列表fz-toonMixin封装;部分 SDK 已经兼容闽政通。

toonMixin 不再维护,本工程可以兼容。

// 修改前
import TOONMIXIN from './toonMixin.umd'
// 修改后
import TOONMIXIN from 'toonsdk';
// 或者外链引入js的方式:
// demo:https://luoyuan.51yzone.com/toonsdk/site/assets/html/demo.html
// 测试环境:<script src="https://luoyuan.51yzone.com/toonsdk/site/assets/js/dist/toonsdk.min.js?v=1.1.30"></script>
// 生产环境:<script src="https://syother.efzhou.com/toonsdk/site/assets/js/dist/toonsdk.min.js?v=1.1.30"></script>
// 生产环境-i宁德:<script src=" https://systatic.evstyle.cn/toonsdk/site/assets/js/dist/toonsdk.min.js?v=1.1.30"></script>
// const toonsdk = new window.toonsdk();

何时使用

  • 调用 App 原生能力

浏览器支持

E 福州 App闽政通 App,微信小程序,支付宝小程序,教育通i 宁德和福师大

如何使用

引入闽政通、微信、支付宝第三方 jssdk 库(如果只要适配 E 福州可以不用引入)

<!-- 在html头部引入如下js -->
<!-- 生产环境 -->
<!-- <script src="https://syother.efzhou.com/toonsdk/site/assets/js/insert.js?v=1.1.30"></script> -->
<!-- 生产环境-i宁德 -->
<!-- <script src=" https://systatic.evstyle.cn/toonsdk/site/assets/js/insert.js?v=1.1.30"></script> -->
<!-- 测试环境 -->
<script src="https://luoyuan.51yzone.com/toonsdk/site/assets/js/insert.js?v=1.1.30"></script>
<!-- insert.js 会根据当前浏览器ua判断平台自动插入第三方需要的sdk依赖 -->

demo 演示

使用 App 扫描二维码查看 demo 页面

生产环境

根据当前文档链接自己生成一个二维码

测试环境

demo二维码测试环境

安装

npm install toonsdk --save

运行

# 安装依赖
npm i

# 默认开启服务器,地址为 :http://local:8000/

# 能在ie9+下浏览本站,修改代码后自动重新构建,且能在ie10+运行热更新,页面会自动刷新
npm run start

# 构建生产环境静态文件,用于发布文档(文档在移动端有测试的示例)
npm run site

使用方式适配情况

使用方式适配: Taro,Toonsdk,window.toonginefz

Taro(跨端框架支持) Toonsdk(实例化方式) window.toonginefz(外链支持方式)

客户端适配情况

客户端适配: toon,mzt,imwork

toon(E 福州),mzt(闽政通),wechat(微信),alipayMiniprogram(支付宝小程序),alipay(支付宝 h5),imwork(教育厅),toongine(i 宁德)

fz-toonMixin罗列的接口已经适配toon(E 福州),mzt(闽政通),wechat(微信),alipayMiniprogram(支付宝小程序),alipay(支付宝 h5)

接口分类接口功能说明接口名称方式适配客户端适配
小组模块创建小组createGroup未适配未适配
设置小组setGroup未适配未适配
推荐朋友模块推荐朋友getReferFriend未适配
闪通模块闪通首页-未适配未适配
发现模块周边getDiscoveryAroundToonsdktoon
群组getDiscoveryGroupToonsdktoon
chat 模块单聊会话aloneChatToonsdk(依赖后端参数)toon
frame 模块显示 frameshowFrameToonsdktoon
groupChat 模块群聊会话getGroupChatToonsdktoon
创建群聊creatGroupChatToonsdk(依赖后端参数)toon
加入群聊joinGroupChatToonsdk(依赖后端参数)toon
名片列表选择名片列表chooseCardToonsdktoon
通讯录我的好友myFriends未适配未适配
我的同事myColleagues未适配未适配
通知中心通知中心主页面getNotifyToonsdktoon
消息分类页getNotifyCatalogToonsdktoon
设备 API二维码扫描页scanTaro,Toonsdktoon,mzt,imwork
名片或群组二维码页qrcodeShowToonsdktoon
设置是否开启防止用户截屏功能setUserScreenshotEnableToonsdktoongine
MWAP获取单张图片-Taro, Toonsdktoon,mzt
相册多选chooseImageTaro,Toonsdktoon,mzt
手机振动getShockTaro,Toonsdktoon,imwork
获取手机的 GPS 状态(非高精度定位)getLocationToonsdktoon,mzt ,imwork
跳转至 gps 设置界面SetGps未适配未适配
获取当前网络状态getNetworkTypeTaro,Toonsdktoon,mzt
关闭应用窗口closeWindowToonsdktoon,mzt ,imwork
返回 toon 的根页面-Toonsdktoon,mzt
复制内容到剪切板copyTaro,Toonsdktoon,mzt
跳转地图openMapTaro,Toonsdktoon,mzt,imwork
控制横竖屏切换switchScreenToonsdktoon
支付现金收银台getCashRegisterToonsdk(依赖后端参数)toon
录音录音getAudioRecord未适配未适配
界面设置分享信息setShareTaro,Toonsdktoon,mzt
打开分享openShareTaro,Toonsdktoon,mzt, imwork
教育通
弹窗alertgetAlertToonsdkimwork
confirmgetConfirmToonsdkimwork
promptgetPromptToonsdkimwork
toastgetToastToonsdkimwork
actionSheetgetActionSheetToonsdkimwork
multiSelectgetMultiSelectToonsdkimwork
显示加载中getShowLoadingToonsdkimwork
关闭加载中getHideLoadingToonsdkimwork
窗体打开窗体openWindowToonsdk(例子参数自动重启APP)imwork
设置窗体setWindowToonsdkimwork
关闭窗体closeWindowToonsdk(需要真实参数)imwork
在线编辑openWebFileToonsdk(需要真实参数,例子扫一扫,空白)imwork
文件选择文件getSelectFileToonsdkimwork
下载文件getDownloadFileToonsdkimwork
查看文件getCheckFileToonsdkimwork
查看图片getViewImageToonsdkimwork
视频录制视频getRecordVideoToonsdk(调用没反应,例子扫一扫,空白)imwork
播放视频getPlayVideoToonsdk(调用没反应,例子扫一扫,空白)imwork
摄像头开始录制getStartRecordingToonsdk(调用没反应,例子扫一扫,空白)imwork
联系人选择内部联系人getContactsChooseToonsdkimwork
应用打开本地应用getOpenLocalAppToonsdk(需要真实参数)imwork
会话列表getConversationListToonsdkimwork
对话页面getDialogueToonsdk(需要真实参数)imwork
通讯录页面getAddressListToonsdkimwork
加好友页面getFriendSearchToonsdkimwork
查看好友页面getUserInfoToonsdk(需要真实参数)imwork,toongine
查看群组页面getGroupInfoToonsdk(需要真实参数)imwork
日历日期选择getCalendarDatePickerToonsdkimwork
时间选择getCalendarTimePickerToonsdkimwork
日期时间选择getCalendarDateTimePickerToonsdkimwork
其他功能得到当前登录信息getLoginInfoToonsdkimwork
启动本地应用getStartLocalAppToonsdk(需要真实参数)imwork
得到版本getVersionToonsdk(调用没反应,例子扫一扫,空白)imwork
网络身份认证获取网络身份认证因子数据getCertInfoToonsdk(需要真实参数)toon
请求加注件getSealCertToonsdk(需要真实参数)toon
获取统一网络身份认证凭证组件getAuthenticationDataToonsdk(需要真实参数)toon
MID 虚实绑定组件getAuthenticationDataWithIdentityNumToonsdk(需要真实参数)toon
MID 虚实一致性校验组件midConsistencyCheckToonsdk(需要真实参数)toon
打开数字人民币 appopenUniwalletToonsdktoon
判断是否安装数币 APPcanOpenUniwalletToonsdktoon
打开网证页面openCTIDToonsdktoon
打开微信小程序openMiniAppWithExtraToonsdktoon
电子证照Edc 文件查看edcFileReadToonsdktoon
OFD 文件查看ofdFileReadToonsdktoon
OFD 文件签章ofdSignFileToonsdktoon
人脸识别人脸识别getLiveFaceToonsdktoongine,toon,mzt

代码演示

自适应样式

@media only screen and (max-width: 500px) {
  .page-wrapper #header,
  .page-wrapper #footer {
    display: none;
  }
  .markdown > * {
    display: none;
  }
  .markdown > .code-box {
    display: block;
  }
}
.imgList img {
  width: 100%;
}

跳转测试

本示例用于测试跳转,解决闽政通不支持扫码跳转的问题

class App extends React.Component {
  state = {
    url: '',
  };

  render() {
    const { url } = this.state;
    return (
      <div className="content">
        <input
          placeholder="输入任意http地址"
          value={this.state.value1}
          onChange={e => {
            this.setState({ url: e.target.value });
          }}
        />
        <button onClick={() => (window.location.href = url)}>跳转到调试环境吧</button>
      </div>
    );
  }
}
ReactDOM.render(<App />, mountNode);

人脸联调 demo 示例

本示例用于测试人脸联调

console.log("window.navigator.userAgent:",window.navigator.userAgent)
import Toonsdk from 'toonsdk';
import { Modal, message, notification } from 'antd';
import RequestExtend, { AdapterH5Ningde, ClientSdkPC } from '@51yzone/request-extend';
const clientSdkPC = new ClientSdkPC({ Modal, message, notification, window });
const toonsdk = new Toonsdk();
const adapterH5Ningde = new AdapterH5Ningde(clientSdkPC, {
  initUri: '',
  headerDefault: {},
});
const requestExtend = new RequestExtend(
  {
    withCredentials: true,
    baseURL: '',
  },
  adapterH5Ningde,
);

class App extends React.Component {
  state = {
    url: '',
  };
  face = (apiUrl, config) => {
    toonsdk
      .getLiveFace({ isEncrypt: '1' })
      .then(resp => {
        console.log('getLiveFaceCall-su-resp:', resp);
        const data = resp.data || {};
        const param = {
          skey: data.sKey,
          deviceId: data.xDeviceId,
          appType: data.app,
          toonType: data.toonType,
          supplierCode: data.supplierCode,
          encryptionType: '1',
          secLevel: 'lite',
          sign: data.sign,
          photo: data.photo,
        };
        console.log('checkFace:', param);
        requestExtend.requestPost(apiUrl, param, config).then(res => {
          if (res.meta.code == 0) {
            console.log('checkFace-success:', res);
            alert(`checkFace-success:${JSON.stringify(res || {})}`);
          } else {
            alert(res.meta.message);
          }
        });
      })
      .catch(err => {
        console.log('getLiveFaceCall-err:', err);
      });
  };
  handleClickNd = () => {
    this.face('/nd-housing-fund/baiduFace/checkFace', {
      headers: {
        sessionId: '4495b3fe-8f31-422a-a071-3792b529920f',
      },
    });
  };
  render() {
    const { url } = this.state;
    return (
      <div className="content">
        <button onClick={this.handleClickNd}>宁德人脸</button>
      </div>
    );
  }
}
ReactDOM.render(<App />, mountNode);

Toonsdk 示例

Toonsdk 示例,可以打包到业务代码里

import Toonsdk from 'toonsdk';
import compareVersions from 'compare-versions';
import $ from '/assets/js/jquery';
const toonsdk = new Toonsdk();

class App extends React.Component {
  state = {
    imgList: [],
    result: '',
    userName: '',
    sessionId: '',
    userIdCard: '',
  };

  // 图片
  chooseImage = params => {
    return toonsdk
      .chooseImage({
        maxCount: params.maxCount, // maxCount(可设定多选的最多数量)范围1-9张,不传默认9张如果是相册选择(functionType=1),当maxCount=1时,就是相册单选,否则就是相册多选
        functionType: params.functionType, // 功能类型 0-直接调用相机 1-直接从相册选择 2-弹出选择框,相机或者相册
        ratio: params.ratio, // 图片质量压缩率,表示压缩至原图质量的比例0-1之间的小数(不包含0),1表示不压缩。不传默认0.1
        type: params.type, //(是否进行图片裁剪,如果需要裁减图片 则可设定裁剪框的宽高比和值。0:裁剪 1:不裁剪)
        filterMimeType: params.filterMimeType, // 例如:image/gif,image/png,image/jpeg(以","为分隔符,现在只支持以上三种类型的过滤)
      })
      .then(({ images }) => {
        console.log(images);
        this.setState({ imgList: images });
      })
      .catch(err => {
        console.log(err);
      });
  };
  // 二维码扫码
  getScan = params => {
    return toonsdk
      .scan({
        handleResult: params.handleResult, // handleResult(3.2.1)( 0:不处理扫描结果 1:处理扫描结果)
      })
      .then(resp => {
        console.log('getScan-s:', resp);
        this.setState({ result: resp.result });
      })
      .catch(err => {
        console.log('getScan-err:', err);
      });
  };
 // 设置是否开启防止用户截屏功能 仅在当前应用生效,离开应用后设置失效
  setUserScreenshotEnable = params => {
    // isEnable	:true 开启防止功能
    // isEnable	:false 关闭防止功能
    return toonsdk
      .setUserScreenshotEnable(params)
      .then(resp => {
        console.log('setUserScreenshotEnable:', resp);
      })
      .catch(err => {
        console.log('setUserScreenshotEnable-err:', err);
      });
  };

  // 人脸识别
  getLiveFace = () => {
    return toonsdk.getLiveFace().then(({ liveFace }) => {
      let arr = [liveFace];
      this.setState({ imgList: arr });
    });
  };
  // 闽政通人脸识别
  getLiveFace2 = params => {
    console.log('params', params);
    return toonsdk
      .getLiveFace({
        userName: params.userName,
        userIdCard: params.userIdCard,
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        this.setState({ result: JSON.stringify(err) });
      });
  };
  // i宁德百度人脸核验
  getLiveFace3 = param => {
    return toonsdk
      .getLiveFace(param)
      .then(resp => {
        console.log('getLiveFaceCall-su-resp:', resp);
        this.setState({ result: 'success:' + JSON.stringify(resp) });
        const data = resp.data || {};
        data.encryptionType = param.isEncrypt || '0' ;
        this.checkFace(data);
      })
      .catch(err => {
        console.log('getLiveFaceCall-err:', err);
        this.setState({ result: 'err:' + JSON.stringify(err) });
      });
  };

  checkFace = data => {
    const param = {
      skey: data.sKey,
      xDeviceId: data.xDeviceId,
      deviceId: data.xDeviceId,
      appType: data.app,
      toonType: data.toonType,
      supplierCode: data.supplierCode,
      encryptionType: data.encryptionType,
      secLevel: 'lite',
      sign: data.sign,
      photo: encodeURIComponent(data.photo),
      type: '3'
    };
    console.log('checkFace-param:', param);

    const isDev = process.env.NODE_ENV === 'development';
    toongine.tcPublic.user.getUserInfo({
      callback: res => {
        console.log('toongine.tcPublic.user-getUserInfo:', res.data);
        $.ajax({
          type: 'POST',
          dataType: "json",
          url: `/openplatform/member/app/np/doBaiduFaceCertificate`,
          headers: {
            personToken: res.data.personToken,
          },
          contentType: "application/json;",
          data: JSON.stringify(param),
          success: function (result) {
            if (result.meta.code == 0) {
              console.log('checkFace-success:', result);
              alert(`checkFace-success:${JSON.stringify(result.data)}`)
            } else {
              console.log('checkFace-fail:', result);
              alert(`checkFace-fail:${JSON.stringify(result.meta)}`)
            }
          },
          error: function (result) {
            console.log('checkFace-error:', result);
          },
        });
      },
    });
  };
  // 获取网络状态
  getNetwork = () => {
    return toonsdk
      .getNetwork()
      .then(resp => {
        console.log(resp);
        this.setState({ result: resp.networkType });
      })
      .catch(err => {
        console.log(err);
      });
  };

  //获取位置
  getLocation = () => {
    return toonsdk
      .getLocation()
      .then(resp => {
        console.log('获取位置', resp);
        this.setState({ result: JSON.stringify(resp.data) });
      })
      .catch(err => {
        console.log(err);
      });
  };

  //打开地图
  openMap = () => {
    return toonsdk.getLocation().then(resp => {
      toonsdk
        .openMap({
          latitude: resp.data.latitude,
          longitude: resp.data.longitude,
        })
        .then(resp => {
          console.log('获取位置', resp);
          this.setState({ result: JSON.stringify(resp) });
        })
        .catch(err => {
          console.log(err);
        });
    });
  };

  // 关闭窗口
  closeWindow = params => {
    return toonsdk.closeWindow({ name: params.name });
  };

  // 打开窗口
  openWindow = params => {
    return toonsdk
      .openWindow({
        url: params.url,
        title: params.title || '',
        bgcolor: params.bgcolor || '',
        color: params.color || '',
        hidden: params.hidden || '',
        type: params.type || '',
        leftMenu: params.leftMenu || '',
        rightMenu: params.rightMenu || '',
        closePage: params.closePage || '',
      })
      .catch(err => {
        this.setState({ result: JSON.stringify(err) });
      });
  };

  // 设置窗体
  getSetWindow = params => {
    return toonsdk.setWindow({
      title: params.title || '', // 标题 空为取网页的Title
      bgcolor: params.bgcolor || '', // 背景颜色 背景颜色
      color: params.color || '', // 颜色 字体颜色 默认 #fffff
      hidden: params.hidden || '', // 导航条是否显示 导航条 0限藏 1显示
      type: params.type || '', // 打开类型 默认为0 0/1 内置/系统
      rightMenu: params.rightMenu || '', // 右菜单 icon为URL地址图片,event为字符串,js全局的脚本函数
      closePage: params.closePage || '', // 关闭的页面 当前地址为 closePage,点返回关闭而不是后退,解决第一页跳转,第二页是首页的问题
    });
  };

  openWebFile = params => {
    return toonsdk.openWebFile({
      hostUrl: params.hostUrl || '', // 地址 服务器url
      fileId: params.fileId || '', // 标题
      isPGFFormat: params.isPGFFormat || '', // PGF格式打开
      readOnly: params.readOnly || '', // 只读模式
      userName: params.userName || '', // 当前用户名
      isScreenshotForbid: params.isScreenshotForbid || '', // 是否防截屏
      enterReviseMode: params.enterReviseMode || '', // 是否修订模式
      showReviewingPane: parmas.showReviewingPane || '', // 是否显示修订痕迹右侧边栏
    });
  };
  // 分享
  share = ({ title, url, content, imgUrl }) => {
    return toonsdk
      .setShare({ title, url, content, imgUrl })
      .then(result => {
        this.setState({ result: '分享内容设置成功' });
        console.log('setShare-success', result);
      })
      .catch(err => {
        console.log(err);
      });
  };

  // 打开分享
  openShare = ({ title, url, content, imgUrl }) => {
    return toonsdk
      .openShare({ title, url, content, imgUrl })
      .then(() => {
        console.log('openShare-success', result);
        this.setState({ result: '打开分享内容成功' });
      })
      .catch(err => {
        console.log(err);
      });
  };
  //选择名片列表
  getChooseCard = params => {
    return toonsdk
      .chooseCard({
        type: params.type,
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };
  // 创建小组
  getCreateGroup = params => {
    return toonsdk.createGroup({
      userId: params.userId, //userId(必选-string):用户id
      cardFeedId: params.cardFeedId, //cardFeedId(必选-string):创建者的名片feedId
      broadcastCategory: params.broadcastCategory, //broadcastCategory(可选-string):小组分类("101@旅游")
      name: params.name, //name(可选-string):小组名称
      spreadTitle: params.spreadTitle, //spreadTitle(可选-string):小组的介绍
      groupLogo: params.groupLogo, //groupLogo(可选-string):小组头像地址
      enrollType: params.enrollType, //enrollType(可选-string):参加规则(2:邀请;1:申请;0:开放;)
      isSpecifyLocation: params.isSpecifyLocation, //isSpecifyLocation(可选-string):位置策略(0指定, 1隐藏, 2未指定)
      address: params.address, //address(可选-string):指定地址(isSpecifyLocation=0时必选)
      lat: params.lat, //lat(可选-string):经度(isSpecifyLocation=0时必选)
      lng: params.lng, //lng(可选-string):纬度(isSpecifyLocation=0时必选)
      memberListString: params.memberListString, //memberListString(可选-string):成员列表("c1,c2,c3")
    });
  };

  // 设置小组
  getSetGroup = params => {
    return toonsdk
      .setGroup({
        userId: params.userId, //userId(必选-string):用户id
        vFeedId: params.cardFeedId, //vFeedId(必选-string): 访问者名片feedId
        sFeedId: params.sFeedId, //sFeedId(必选-string): 要设置的小组feedId
      })
      .then(resp => {
        // alert(resp);
        const resultName = '';
        if (resp.result === '0') {
          resultName = '成功';
        } else if (resp.result === '1') {
          resultName = '身份不合法';
        } else if (resp.result === '2') {
          resultName = 'feedId不合法';
        }
        this.setState({ result: `设置小组结果:${resultName}${resp}` });
      })
      .catch(err => {
        this.setState({ result: err || '设置小组失败' });
      });
  };

  // 单聊会话
  getAloneChat = params => {
    return toonsdk.aloneChat({
      myCardNo: params.myCardNo, // 自己的名片id
      friendCardNo: params.friendCardNo, // 好友的名片
    });
  };

  // 我的好友
  getMyFriends = params => {
    return toonsdk
      .myFriends({
        feedId: params.feedId, // 我的名片Id
        cardNo: params.cardNo, // 我的名片No
      })
      .then(resp => {
        console.log(resp);
        this.setState({ result: JSON.stringify(resp.data) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: err });
      });
  };

  // 我的同事
  getMyColleagues = params => {
    return toonsdk
      .myColleagues({
        feedId: params.feedId, // 我的名片Id
        cardNo: params.cardNo, // 我的名片No
      })
      .then(resp => {
        console.log(resp);
        this.setState({ result: JSON.stringify(resp.data) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: err });
      });
  };

  // 发现模块(周边)
  getDiscoveryAround = params => {
    return toonsdk
      .getDiscoveryAround({
        coordinate: params.coordinate, // (必选)经纬度
        viewType: params.viewType, // (必选)页面类型: 1:交友(不限), 2:交友(男), 3:交友(女), 4:小区, 5:学校, 6:景区, 7:兴趣群组, 8:活动
        title: params.title ? params.title : '', //(可选)页面标题
        accessType: params.accessType ? params.accessType : '', //(可选)访问页面类型:0:浏览页面(默认);1:选择名片
      })
      .then(resp => {
        console.log(resp);
        this.setState({ result: JSON.stringify(resp.data) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: err });
      });
  };

  // 发现模块(群组)
  getDiscoveryGroup = () => {
    return toonsdk.getDiscoveryGroup();
  };

  // frame模块
  showFrame = params => {
    return toonsdk.showFrame({
      feedId: params.feedId, //需要显示的名片或群组ID
      myFeedId: params.myFeedId ? params.myFeedId : '', // 可选参数,我的名片ID
    });
  };

  // 群聊会话
  getGroupChat = params => {
    return toonsdk.getGroupChat({
      myCardNo: params.myCardNo, // 自己在群聊中的名片Id
      groupChatId: params.groupChatId, // 群聊的Id
    });
  };

  // 创建群聊
  creatGroupChat = params => {
    return toonsdk
      .creatGroupChat({
        groupName: params.groupName, // 群聊名称
        createFeedId: params.createFeedId, // 创建者feedId,必须是自己的feedId
        userId: params.userId, // userId
        name: params.name, // 名称
        headImage: params.headImage, //头像
        title: params.title, //导航栏title
        members: params.members, // 其他群聊成员数组
      })
      .then(resp => {
        console.log(resp);
        this.setState({ result: JSON.stringify(resp.data) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: err });
      });
  };

  // 加入群聊
  joinGroupChat = params => {
    return toonsdk.joinGroupChat({
      groupId: params.groupId, // 群聊id
      feedId: params.feedId, // 必须是自己的feedId
      userId: params.userId, // userId
      name: params.name, // 名称
      headImage: params.headImage, //头像
      title: params.title, //导航栏title
      operatorFeedId: params.operatorFeedId, // 操作者ID
      requestCode: params.requestCode, // 请求码
    });
  };

  //通知中心 主页面
  getNotify = () => {
    return toonsdk.getNotify();
  };

  //通知中心 消息分类页
  getNotifyCatalog = params => {
    return toonsdk.getNotifyCatalog({ appId: params.appId });
  };

  // 支付平台-现金收银台APP协议接口
  getCashRegister = params => {
    return toonsdk
      .getCashRegister({
        buyerId: params.buyerId, //String 买家id 买家toon用户id 必填
        buyerType: params.buyerType, //String 买家类型(01:个人普;02:商户) 01:个人 必填
        sellerId: params.sellerId, //String 卖家id 卖家toon用户id 必填
        sellerType: params.sellerType, //String 卖家类型 01:个人;02:商户(普通);03:商户(收单结算); 必填
        tradeType: params.tradeType, //String 交易类型,普通交易实时到账,担保交易 普通交易:normal;担保交易:guarantee 必填
        merNo: params.merNo, //String 商户号,从支付平台获取 如:101003 必填
        txAmount: params.txAmount, //long 金额 如:300(分) 必填
        outOrderNo: params.outOrderNo, //String 订单号  必填
        body: params.body, //String 商品名称  必填
        subject: params.subject, //String 商品详情  必填
        txTime: params.txTime || new Date().getTime(), //String 下单时间(当前时间) 时间戳 必填

        extrInfo: params.extrInfo, //String 交易扩展信息  非必填
        notifyUrl: params.notifyUrl, //String 回调地址  非必填
        userVcard: params.userVcard, //String 买家名片feedId  非必填
        userVcardName: params.userVcardName, //String 买家名片名称  非必填
        mobile: params.mobile, //String 买家手机号 非必填
        sellerVcard: params.sellerVcard, //String 卖家名片id  非必填
        sellerVcardName: params.sellerVcardName, //String 卖家名片名称  非必填
        sellerMobile: params.sellerMobile, //String 卖家手机号  非必填
      })
      .then(resp => {
        // alert('提示' + JSON.stringify(resp));
        const resultName = '';
        if (resp.result === '0') {
          resultName = '失败';
        } else if (resp.result === '1') {
          resultName = '成功';
        } else if (resp.result === '2') {
          resultName = '警告';
        } else if (resp.result === '3') {
          resultName = '取消';
        } else {
          resultName = resp;
        }
        this.setState({ result: resultName });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: err });
      });
  };

  // 打开红包
  openRedEnvelope = params => {
    return toonsdk.openRedEnvelope({
      fromFeedId: params.fromFeedId, //String  红包发送方feedId    必填
      operatorFeedId: params.operatorFeedId, //String  红包接收方feedId    必填
      redPacketId: params.redPacketId, //String  红包id    必填
      remark: params.remark, //String  备注    非必填
      recvType: params.recvType, //String  红包类型  1:普通红包(固定金额)2:拼手气(随机金额)  必填
    });
  };

  // 名片或群组二维码页
  qrcodeShow = params => {
    return toonsdk.qrcodeShow({
      feedId: params.feedId, //feedId(名片或群组的ID,cardNo groupNo)
    });
  };
  // 打开GPS设置页面
  getSetGps = () => {
    return toonsdk.SetGps();
  };
  // 推荐朋友
  getReferFriend = params => {
    return toonsdk.getReferFriend({
      myFeedId: params.myFeedId, //myFeedId:(必填)我的名片 ID
    });
  };

  // 手机震动
  getShock = params => {
    return toonsdk.getShock(params);
  };

  // 复制
  getCopy = params => {
    return toonsdk.copy({
      content: params.content, //content(需要复制到剪贴板的内容) 例如:”思源集团“ 必选
    });
  };

  // 控制横竖屏切换
  getSwitchScreen = params => {
    return toonsdk.switchScreen({
      orientation: params.orientation, //功能类型	0:竖屏1:横屏(顺时针270°,Home键在右侧)
    });
  };
  // 录音
  getAudioRecord = param => {
    // alert('录音');
    return toonsdk
      .getAudioRecord({
        filename: param.filename, // 文件名
        maxDuration: param.maxDuration, // int 设置最大时长,默认60s,最大可设置180s
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  // 视频
  getChooseVideo = param => {
    return toonsdk
      .getChooseVideo({
        filename: param.filename, // 文件名
        maxDuration: param.maxDuration, // int 设置最大时长,默认60s,最大可设置180s
        sourceType: param.sourceType, // 0用户选择,1录像,2相册选择
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  // getAlert
  getAlert = params => {
    return toonsdk
      .getAlert({
        title: params.title, // 标题
        message: params.message, // 消息
        confirmButtonText: params.confirmButtonText, // 确定按钮文本
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  // getConfirm
  getConfirm = params => {
    return toonsdk
      .getConfirm({
        title: params.title, // 标题
        message: params.message, // 消息
        confirmButtonText: params.confirmButtonText, // 确定按钮文本
        cancelButtonText: params.cancelButtonText, //取消按钮文本
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  // getPrompt
  getPrompt = params => {
    return toonsdk
      .getPrompt({
        message: params.message, // 消息
        defaultValue: params.defaultValue, //缺省值
        confirmButtonText: params.confirmButtonText, // 确定按钮文本
        cancelButtonText: params.cancelButtonText, //取消按钮文本
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  // getToast
  getToast = params => {
    return toonsdk
      .getToast({
        message: params.message, // 消息
        duration: params.duration, // 多少秒自动关闭
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };
  // getActionSheet
  getActionSheet = params => {
    return toonsdk
      .getActionSheet({
        message: params.message, // 消息
        cancelButtonText: params.cancelButtonText, //取消按钮文本
        buttons: params.buttons, // 按钮
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  //getMultiSelect
  getMultiSelect = params => {
    return toonsdk
      .getMultiSelect({
        options: params.options, // 选项
        selectOptions: params.selectOptions, //选中的值
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  //getShowLoading
  getShowLoading = params => {
    return toonsdk
      .getShowLoading({
        message: params.message, // 消息
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
        setTimeout(() => {
          this.getHideLoading();
        }, 1000);
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  //getHideLoading
  getHideLoading = () => {
    return toonsdk
      .getHideLoading()
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  //选择内部联系人getContactsChoose
  getContactsChoose = params => {
    return toonsdk
      .getContactsChoose({
        limit: params.limit, // 选择个数 , -1表示不限
        type: params.type, //选择类型 user/dept/all
        selected: params.selected, //已选择
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  //日期选择
  getCalendarDatePicker = params => {
    return toonsdk
      .getCalendarDatePicker({
        format: params.format, // 格式
        value: params.value, //值
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  //时间选择
  getCalendarTimePicker = params => {
    return toonsdk
      .getCalendarTimePicker({
        format: params.format, // 格式
        value: params.value, //值
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  //日期时间选择
  getCalendarDateTimePicker = params => {
    return toonsdk
      .getCalendarDateTimePicker({
        format: params.format, // 格式
        value: params.value, //值
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };
  // 选择文件
  getSelectFile = params => {
    return toonsdk
      .getSelectFile({
        type: params.type, // 选择类型 *,image,video
        limit: params.limit, // 选择个数 , 0表示不限
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  // 下载文件
  getDownloadFile = params => {
    return toonsdk
      .getDownloadFile({
        url: params.url, // 文件地址
        name: params.name, // 文件名 如果没填,就是URL地址里的文件名
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  // 查看文件
  getCheckFile = params => {
    return toonsdk
      .getCheckFile({
        url: params.url, // 文件地址
        name: params.name, // 文件名 如果没填,就是URL地址里的文件名
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  // 查看图片
  getViewImage = params => {
    return toonsdk
      .getViewImage({
        files: params.files, // 相关图片
        index: params.index, // 缺省第几张
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };
  // 录制视频
  getRecordVideo = params => {
    return toonsdk
      .getRecordVideo({
        max_duration: params.max_duration, // 最大时长 默认60秒
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  // 播放视频
  getPlayVideo = params => {
    return toonsdk
      .getPlayVideo({
        file: params.file, // 地址 默认60秒
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  // 摄像头
  getStartRecording = params => {
    return toonsdk
      .getStartRecording({
        type: params.type, // 录制类型 none/video/image 默认60秒
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  // 打开本地应用
  getOpenLocalApp = params => {
    return toonsdk
      .getOpenLocalApp({
        url: params.url, // 地址
        query: params.query, // 参数
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  // 会话列表
  getConversationList = () => {
    return toonsdk.getConversationList();
  };
  // 对话页面
  getDialogue = params => {
    return toonsdk
      .getDialogue({
        targetType: params.targetType, // 对话目标类型 user/group
        targetId: params.targetId, // 对话目标ID
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  // 通讯录页面
  getAddressList = () => {
    return toonsdk.getAddressList();
  };

  // 加好友页面
  getFriendSearch = () => {
    return toonsdk.getFriendSearch();
  };
  // 查看好友页面
  getUserInfo = params => {
    return toonsdk
      .getUserInfo({
        id: params.id, // 人员ID
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };
  // 查看群组页面
  getGroupInfo = params => {
    return toonsdk
      .getGroupInfo({
        id: params.id, // 群组ID
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  // 得到当前登录信息
  getLoginInfo = () => {
    return toonsdk
      .getLoginInfo()
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };
  // 启动本地应用
  getStartLocalApp = params => {
    return toonsdk
      .getStartLocalApp({
        appcode: params.appcode, // 应用code
        targetId: params.targetId, // 应用下属ID
      })
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };
  // 得到版本
  getVersion = () => {
    return toonsdk
      .getVersion()
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
        this.setState({ result: JSON.stringify(err) });
      });
  };
  getFlagNumber() {
    /*生成32位随机流水号*/
    /*默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1*/
    var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
    var maxPos = $chars.length;
    var pwd = '';
    for (var i = 0; i < 32; i++) {
      pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
    }
    return pwd;
  }

  // 获取网络身份认证因子数据
  getCertInfo = param => {
    return toonsdk
      .getCertInfo(param)
      .then(resp => {
        console.log('getCert-su-resp', param, resp);
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log('getCert-err', err);
        this.setState({ result: JSON.stringify(err) });
      });
  };
  getSealCertCall = param => {
    param.authMode = 'R33';
    param.certificateFileType = '2';
    param.endorsementInfo = '加注件制作事由';
    param.userOrgName = '使用方名称';
    // 有效期,时间戳,单位秒
    param.endorsementExpireDate = parseInt(Date.now() / 1000) + 24 * 60 * 60 * 7 + '';
    param.bizAppId = '100011';
    param.scenesCode = '场景名称';
    param.businessItemCode = '123';
    param.terminalCode = '123';
    param.requestIdentityData = 'name, number';
    return toonsdk
      .getSealCert(param)
      .then(resp => {
        console.log('getCert-su-resp', param, resp);
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log('getCert-err', err);
        this.setState({ result: JSON.stringify(err) });
      });
  };
  getAuthenticationDataCall = param => {
    param.authMode = 'R04';
    param.bizAppId = '100011';
    param.scenesCode = '场景名称';
    return toonsdk
      .getAuthenticationData(param)
      .then(resp => {
        console.log('getAuthentication-su-resp', param, resp);
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log('getCert-err', err);
        this.setState({ result: JSON.stringify(err) });
      });
  };
  getAuthenticationDataWithIdentityNumCall = param => {
    param.authMode = 'R04';
    param.bizAppId = '100011';
    param.scenesCode = '场景名称';
    return toonsdk
      .getAuthenticationDataWithIdentityNum(param)
      .then(resp => {
        console.log('getAuthenticationDataWithIde-su-resp', param, resp);
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log('getCert-err', err);
        this.setState({ result: JSON.stringify(err) });
      });
  };
  midConsistencyCheckCall = param => {
    param.authMode = 'R010';
    param.name = '王安丽';
    param.number = '350481198204226527';
    param.mid = '9b7b5f90cc327800c51d4cc2824f06460e214ac22615dd0e89a5d000f1b3e44d';
    param.bizAppId = '100011';
    return toonsdk
      .midConsistencyCheck(param)
      .then(resp => {
        console.log('midConsistencyCheck-su-resp', param, resp);
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log('getCert-err', err);
        this.setState({ result: JSON.stringify(err) });
      });
  };

  openUniwalletCall = () => {
    return toonsdk
      .openUniwallet()
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log('openUniwallet-err', err);
        this.setState({ result: JSON.stringify(err) });
      });
  };
  canOpenUniwalletCall = () => {
    return toonsdk
      .canOpenUniwallet()
      .then(resp => {
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log('canOpenUniwallet-err', err);
        this.setState({ result: JSON.stringify(err) });
      });
  };
  render() {
    const { imgList = [], result, userName, userIdCard } = this.state;
    return (
      <div className="content">
        <h1>Toonsdk适配</h1>
        <h3>图片</h3>
        <button
          id="getImg"
          onClick={() =>
            this.chooseImage({
              maxCount: 4,
              functionType: 2,
              ratio: 1,
              type: 1,
              filterMimeType: 'image/gif',
            })
          }
        >
          选择图片(相册+相机)
        </button>
        <button
          id="openAlbum"
          onClick={() =>
            this.chooseImage({
              maxCount: 3,
              functionType: 1,
              ratio: 1,
              type: 1,
              filterMimeType: 'image/png,image/jpeg',
            })
          }
        >
          选择图片(相册)
        </button>
        <button
          id="openAlbum"
          onClick={() =>
            this.chooseImage({
              maxCount: 3,
              functionType: 1,
              ratio: 1,
              type: 1,
            })
          }
        >
          选择图片(相册,不限制类型)
        </button>
        <button
          id="openCamara"
          onClick={() =>
            this.chooseImage({
              maxCount: 2,
              functionType: 0,
              ratio: 1,
              type: 1,
              filterMimeType: 'image/gif',
            })
          }
        >
          选择图片(相机)
        </button>
        <h3>设备API</h3>
        <button id="scan" onClick={() => this.getScan({ handleResult: 0 })}>
          扫描二维码
        </button>
        <button id="scan1" onClick={() => this.getScan({ handleResult: 1 })}>
          扫描二维码1
        </button>
        <button id="setUserScreenshotEnable" onClick={() => this.setUserScreenshotEnable({ isEnable: true })}>
          用户截屏防止功能开启
        </button>
        <button id="setUserScreenshotEnable" onClick={() => this.setUserScreenshotEnable({ isEnable: false })}>
          用户截屏防止功能关闭
        </button>
        <h3>人脸识别</h3>
        <button id="face" onClick={this.getLiveFace}>
          人脸识别
        </button>
        <div className="content">
          <input
            placeholder="姓名"
            value={this.state.userName}
            onChange={e => {
              this.setState({ userName: e.target.value });
            }}
          />
          <input
            placeholder="身份证号"
            value={this.state.userIdCard}
            onChange={e => {
              this.setState({ userIdCard: e.target.value });
            }}
          />
          <button
            onClick={() => {
              this.getLiveFace2({
                userName: this.state.userName,
                userIdCard: this.state.userIdCard,
              });
            }}
          >
            闽政通人脸识别
          </button>
          <h3>百度人脸识别</h3>
          <input
            placeholder="sessionId"
            value={this.state.sessionId}
            onChange={e => {
              this.setState({ sessionId: e.target.value });
            }}
          />
          <button
            id="checkFaceImageEnginCall"
            onClick={() =>
              this.getLiveFace3({
                isEncrypt: '1', //是否要加密  0 非加密 1 加密    默认非加密
              })
            }
          >
            百度人脸核验(加密)
          </button>
          <button id="getLiveFace3" onClick={() => this.getLiveFace3({})}>
            百度人脸核验(非加密)
          </button>
        </div>
        <h3>网络</h3>
        <button id="network" onClick={this.getNetwork}>
          获取网络状态
        </button>
        <h3>位置</h3>
        <button id="getLocation" onClick={this.getLocation}>
          获取位置
        </button>
        <button id="openMap" onClick={this.openMap}>
          打开地图
        </button>
        <h3>视图</h3>
        <button id="closeWindow" onClick={this.closeWindow}>
          关闭窗口
        </button>
        <button
          id="openWindow"
          onClick={() =>
            this.openWindow({
              url: 'http://www.baidu.com',
              title: 'test1',
              bgcolor: '#000000',
              color: '#ffffff',
              hidden: '1',
              type: '0',
              leftMenu: { text: 'Return' },
              rightMenu: [{ text: '...' }],
              closePage: '',
            })
          }
        >
          打开新窗口
        </button>
        <h3>分享</h3>
        <button
          id="share"
          onClick={() =>
            this.share({
              title: '这里是分享标题',
              content: '这里是分享内容描述',
              imgUrl: 'http://t100static.zhengtoon.com/fz-toonMixin/test/images/qrcode.jpg', // 分享图片链接
              url: location.href, // 分享链接
            })
          }
        >
          设置分享内容
        </button>
        <button
          id="openShare"
          onClick={() =>
            this.openShare({
              title: '这里是分享标题',
              content: '这里是分享内容描述',
              imgUrl: 'http://t100static.zhengtoon.com/fz-toonMixin/test/images/qrcode.jpg', // 分享图片链接
              url: location.href, // 分享链接
            })
          }
        >
          打开分享内容
        </button>
        <h3>我的名片列表</h3>
        <button
          id="chooseCard"
          onClick={() =>
            this.getChooseCard({
              type: '0',
            })
          }
        >
          所有名片
        </button>
        <button
          id="chooseCard"
          onClick={() =>
            this.getChooseCard({
              type: '1',
            })
          }
        >
          个人名片
        </button>
        <button
          id="chooseCard"
          onClick={() =>
            this.getChooseCard({
              type: '2',
            })
          }
        >
          企业名片
        </button>
        <button
          id="chooseCard"
          onClick={() =>
            this.getChooseCard({
              type: '3',
            })
          }
        >
          员工名片
        </button>
        <h3>小组模块</h3>
        <button
          id="getCreateGroup"
          onClick={() =>
            this.getCreateGroup({
              userId: '411046',
              cardFeedId: 'c_6174785811529791',
            })
          }
        >
          创建小组
        </button>
        <button
          id="getSetGroup"
          onClick={() =>
            this.getSetGroup({
              userId: '335795',
              vFeedId: 's_1246261046435414',
              sFeedId: 'g_1246261046435414',
            })
          }
        >
          设置小组
        </button>

        <h3>chat模块</h3>
        <button
          id="getAloneChat"
          onClick={() =>
            this.getAloneChat({
              myCardNo: 'c_1',
              friendCardNo: 'c_2',
            })
          }
        >
          单聊会话
        </button>
        <h3>通讯录模块</h3>
        <button
          id="getMyFriends"
          onClick={() =>
            this.getMyFriends({
              feedId: 'c_1456478158155254',
              cardNo: 'c_1',
            })
          }
        >
          我的好友
        </button>
        <button
          id="getMyColleagues"
          onClick={() =>
            this.getMyColleagues({
              feedId: 'c_1456478158155254',
              cardNo: 'c_1',
            })
          }
        >
          我的同事
        </button>
        <h3>发现模块</h3>
        <button
          id="getDiscoveryAround"
          onClick={() =>
            this.getDiscoveryAround({
              coordinate: '39.9951433878183806,116.4514311421238943',
              viewType: '1',
              title: '首页',
              accessType: '1',
            })
          }
        >
          周边
        </button>
        <button id="getDiscoveryGroup" onClick={() => this.getDiscoveryGroup()}>
          群组
        </button>
        <h3>frame模块</h3>
        <button
          id="showFrame"
          onClick={() =>
            this.showFrame({
              feedId: 'c_1', // 需要显示的名片或群组ID
              myFeedId: 'c_1', // 可选参数,我的名片ID
            })
          }
        >
          显示frame模块
        </button>
        <h3>groupchat模块</h3>
        <button
          id="groupChat"
          onClick={() =>
            this.getGroupChat({
              myCardNo: 'c_1', // 自己在群聊中的名片Id
              groupChatId: 'c_1', // 群聊的Id
            })
          }
        >
          群聊会话
        </button>
        <button
          id="creatGroupChat"
          onClick={() =>
            this.creatGroupChat({
              groupName: '群聊',
              title: '活动名',
              createFeedId: 'c_1',
              feedId: 'c_1',
              userId: '12345',
              name: '自己的名字',
              headImage: '自己的头像',
              members: [
                {
                  feedId: 'c_2',
                  userId: '123',
                  name: 'alt',
                  headImage: '',
                },
                {
                  feedId: 'c_3',
                  userId: '456',
                  name: 'tab',
                  headImage: '',
                },
              ],
            })
          }
        >
          创建群聊
        </button>
        <button
          id="joinGroupChat"
          onClick={() =>
            this.joinGroupChat({
              groupId: '1……',
              feedId: 'c_4',
              userId: '789',
              flagId: '1',
              name: 'shift',
              headImage: '',
              title: '活动名',
              operatorFeedId: 'c_789',
              requestCode: '12',
            })
          }
        >
          加入群聊
        </button>
        <h3>通知中心模块</h3>
        <button id="getNotify" onClick={() => this.getNotify({})}>
          主页面
        </button>
        <button id="getNotifyCatalog" onClick={() => this.getNotifyCatalog({ appId: '1' })}>
          消息分类页
        </button>

        <h3>支付模块</h3>
        <button
          id="getCashRegister"
          onClick={() =>
            this.getCashRegister({
              buyerId: '123',
              buyerType: '01',
              userVcard: 'c_1010089',
              userVcardName: '名称',
              mobile: '买家手机号',
              sellerId: '124',
              sellerType: '01',
              sellerVcard: 'c_1010039',
              sellerVcardName: '卖家名称',
              sellerMobile: '18611536224',
              tradeType: 'normal',
              merNo: '101003',
              txAmount: '300',
              outOrderNo: '10001',
              body: '商品名称',
              subject: '商品描述',
              extrInfo: '商品描述',
              notifyUrl: 'http://myappserver/callback',
              txTime: '149449448600',
            })
          }
        >
          支付平台-现金收银台APP协议接口
        </button>
        <button
          id="openRedEnvelope"
          onClick={() =>
            this.openRedEnvelope({
              fromFeedId: 'xxx',
              operatorFeedId: 'xxx',
              redPacketId: 'xxxxx',
              remark: '恭喜发财,大吉大利!',
              recvType: '1',
            })
          }
        >
          支付模块-打开红包
        </button>
        <h3>名片或群组二维码页</h3>

        <button id="qrcodeShow" onClick={() => this.qrcodeShow({ feedId: 'c_1499874221733511' })}>
          名片或群组二维码页
        </button>
        <h3>跳转至gps设置界面</h3>
        <button id="getSetGps" onClick={() => this.getSetGps({})}>
          跳转至gps设置界面
        </button>
        <h3>推荐朋友模块</h3>
        <button id="getReferFriend" onClick={() => this.getReferFriend({ myFeedId: 'c_1' })}>
          推荐朋友
        </button>
        <h3>手机震动</h3>
        <button id="getShock" onClick={() => this.getShock({ duration: '400' })}>
          手机震动
        </button>
        <h3>复制</h3>
        <button id="copy" onClick={() => this.getCopy({ content: '思源集团' })}>
          复制内容到剪贴板
        </button>
        <h3>横竖屏切换</h3>
        <button id="getSwitchScreen" onClick={() => this.getSwitchScreen({ orientation: '1' })}>
          横屏
        </button>
        <button id="getSwitchScreen" onClick={() => this.getSwitchScreen({ orientation: '0' })}>
          竖屏
        </button>
        <h3>录音</h3>
        <button
          id="clickAudioRecord"
          onClick={() => this.getAudioRecord({ filename: '文件名', maxDuration: 60 })}
        >
          录音
        </button>
        <h3>选择视频</h3>
        <button
          id="clickChooseVideo"
          onClick={() => this.getChooseVideo({ sourceType: 0, maxDuration: 60 })}
        >
          选择视频
        </button>
        <h2>教育通独有</h2>
        <h3>弹窗</h3>
        <button
          id="alert"
          onClick={() =>
            this.getAlert({ title: '提示', message: '你好!', confirmButtonText: '确定' })
          }
        >
          alert
        </button>
        <button
          id="confirm"
          onClick={() =>
            this.getConfirm({
              title: '提示',
              message: '你好!',
              confirmButtonText: '确定',
              cancelButtonText: '取消',
            })
          }
        >
          confirm
        </button>
        <button
          id="prompt"
          onClick={() =>
            this.getPrompt({
              defaultValue: 'test',
              message: '请输入名称',
              confirmButtonText: '确定',
              cancelButtonText: '取消',
            })
          }
        >
          prompt
        </button>
        <button id="toast" onClick={() => this.getToast({ message: 'test', duration: '5' })}>
          toast
        </button>
        <button
          id="actionSheet"
          onClick={() =>
            this.getActionSheet({
              message: '选择项目',
              cancelButtonText: '取消',
              buttons: ['a', 'b'],
            })
          }
        >
          actionSheet
        </button>
        <button
          id="multiSelect"
          onClick={() =>
            this.getMultiSelect({
              options: ['test1', 'test2', 'test3'],
              selectOptions: ['test2', 'test3'],
            })
          }
        >
          multiSelect
        </button>
        <button id="showLoading" onClick={() => this.getShowLoading({ message: '正在加载中' })}>
          显示加载中
        </button>
        <button id="hideLoading" onClick={() => this.getHideLoading({ message: '正在加载中' })}>
          关闭加载中
        </button>
        <h3>窗体</h3>

        <button
          id="getSetWindow"
          onClick={() =>
            this.getSetWindow({
              title: 'test2',
              bgcolor: '#6699cc',
              color: '#ffffff',
              hidden: '1',
              type: '0',
              rightMenu: [
                { text: 'call', icon: '', event: 'jscallback()' },
                {
                  text: '...',
                  icon: '',
                  submenu: [
                    { text: 'SCAN', icon: '', event: 'scan()' },
                    { text: 'SHARE', icon: '', event: 'startShareMenu()' },
                  ],
                },
              ],
              closePage: '',
            })
          }
        >
          设置窗体
        </button>
        <button id="closeWindow" onClick={() => this.closeWindow({ name: '1' })}>
          关闭窗体
        </button>
        <button
          id="openWebFile"
          onClick={() =>
            this.openWebFile({
              hostUrl: 'http://www.kinggrid.com:8080/iWebOffice2009/OfficeServer.jsp',
              fileId: '1487055329034',
              isPGFFormat: '0',
              readOnly: '#ffffff',
              userName: 'test1',
              isScreenshotForbid: 1,
              enterReviseMode: 1,
              showReviewingPane: 1,
            })
          }
        >
          在线编辑
        </button>
        <h3>文件:</h3>
        <button id="getSelectFile" onClick={() => this.getSelectFile({ type: '*', limit: '3' })}>
          选择文件
        </button>
        <button
          id="getDownloadFile"
          onClick={() =>
            this.getDownloadFile({
              url: 'http://www.qidainfo.com/Public/jsapi/file/1.txt',
              name: '测试.txt',
            })
          }
        >
          下载文件
        </button>
        <button
          id="getDownloadFile"
          onClick={() =>
            this.getDownloadFile({
              url: 'http://120.48.39.109/upload/shunde/test.doc',
            })
          }
        >
          下载word文件
        </button>
        <button
          id="getCheckFile"
          onClick={() =>
            this.getCheckFile({
              url: 'http://120.48.39.109/upload/shunde/test.doc',
            })
          }
        >
          查看word文件
        </button>
        <button
          id="getCheckFile"
          onClick={() =>
            this.getCheckFile({
              url: 'http://www.qidainfo.com/Public/jsapi/file/1.txt',
              name: '测试.txt',
            })
          }
        >
          查看文件
        </button>
        <button
          id="getViewImage"
          onClick={() =>
            this.getViewImage({
              files: [
                'http://www.qidainfo.com/Public/jsapi/images/1.jpg',
                'http://www.qidainfo.com/Public/jsapi/images/2.jpg',
                'http://www.qidainfo.com/Public/jsapi/images/3.jpg',
              ],
              index: '0',
            })
          }
        >
          查看图片
        </button>
        <h3>视频</h3>
        <button id="getRecordVideo" onClick={() => this.getRecordVideo({ max_duration: '60' })}>
          录制视频
        </button>
        <button
          id="getPlayVideo"
          onClick={() =>
            this.getPlayVideo({ file: 'http://www.qidainfo.com/Public/jsapi/video/1.mp4' })
          }
        >
          播放视频
        </button>
        <h3>摄像头</h3>
        <button id="getStartRecording" onClick={() => this.getStartRecording({ type: 'none' })}>
          开始录制
        </button>
        <h3>联系人</h3>
        <button
          id="getContactsChoose"
          onClick={() =>
            this.getContactsChoose({
              type: 'user',
              limit: '-1',
              selected: [{ id: '112', type: 'user' }],
            })
          }
        >
          选择内部联系人
        </button>
        <h3>应用</h3>
        <button
          id="getOpenLocalApp"
          onClick={() => this.getOpenLocalApp({ url: 'userInfo', query: { id: 'imadmin' } })}
        >
          打开本地应用
        </button>
        <button id="getConversationList" onClick={this.getConversationList}>
          会话列表
        </button>
        <button
          id="getDialogue"
          onClick={() => this.getDialogue({ targetType: 'user', targetId: '1' })}
        >
          对话页面
        </button>
        <button id="getAddressList" onClick={this.getAddressList}>
          通讯录页面
        </button>
        <button id="getFriendSearch" onClick={this.getFriendSearch}>
          加好友页面
        </button>
        <button id="getUserInfo" onClick={() => this.getUserInfo({ id: '1' })}>
          查看好友页面
        </button>
        <button id="getGroupInfo" onClick={() => this.getGroupInfo({ id: '1' })}>
          查看群组页面
        </button>
        <button id="getCreateGroup" onClick={this.getCreateGroup}>
          创建群组页面
        </button>
        <h3>日历</h3>
        <button
          id="getCalendarDatePicker"
          onClick={() => this.getCalendarDatePicker({ format: 'yyyy-MM-dd', value: '2015-04-17' })}
        >
          日期选择
        </button>
        <button
          id="getCalendarTimePicker"
          onClick={() => this.getCalendarTimePicker({ format: 'HH-mm', value: '18:00' })}
        >
          时间选择
        </button>
        <button
          id="getCalendarDateTimePicker"
          onClick={() =>
            this.getCalendarDateTimePicker({
              format: 'yyyy-MM-dd HH:mm',
              value: '2015-04-17 18:00',
            })
          }
        >
          日期时间选择
        </button>
        <h3>其他功能</h3>
        <button id="getLoginInfo" onClick={this.getLoginInfo}>
          获取当前登录信息
        </button>
        <button
          id="getStartLocalApp"
          onClick={() => this.getStartLocalApp({ appcode: 'addon_acc', targetId: '应用下属ID' })}
        >
          启动本地应用
        </button>
        <button id="getVersion" onClick={this.getVersion}>
          得到版本
        </button>
        <h3>调用结果:</h3>
        <ul className="imgList" id="ul">
          {imgList.map(item => (
            <li>
              <img src={item} />
            </li>
          ))}
        </ul>
        <div className="log" id="log">
          {result}
        </div>
      </div>
    );
  }
}
ReactDOM.render(<App />, mountNode);

window.toonginefz

window.toonginefz 示例(只举一个例子),入口文件外链引入 js

import 'toonsdk'; // app.js里引入
class App extends React.Component {
  state = {
    imgList: [],
    result: '',
  };

  // 图片
  chooseImage = params => {
    return window.toonginefz
      .chooseImage({
        maxCount: params.maxCount, // maxCount(可设定多选的最多数量)范围1-9张,不传默认9张如果是相册选择(functionType=1),当maxCount=1时,就是相册单选,否则就是相册多选
        functionType: params.functionType, // 功能类型 0-直接调用相机 1-直接从相册选择 2-弹出选择框,相机或者相册
        ratio: params.ratio, // 图片质量压缩率,表示压缩至原图质量的比例0-1之间的小数(不包含0),1表示不压缩。不传默认0.1
        type: params.type, //(是否进行图片裁剪,如果需要裁减图片 则可设定裁剪框的宽高比和值。0:裁剪 1:不裁剪)
        filterMimeType: params.filterMimeType, // 例如:image/gif,image/png,image/jpeg(以","为分隔符,现在只支持以上三种类型的过滤)
      })
      .then(({ images }) => {
        console.log(images);
        this.setState({ imgList: images });
      })
      .catch(err => {
        console.log(err);
      });
  };

  render() {
    const { imgList = [], result } = this.state;
    return (
      <div className="content">
        <h1>window.toonginefz适配</h1>
        <h3>图片</h3>
        <button
          id="getImg"
          onClick={() =>
            this.chooseImage({
              maxCount: 3,
              functionType: 2,
              ratio: 1,
              type: 1,
              filterMimeType: 'image/gif',
            })
          }
        >
          选择图片(相册+相机)
        </button>
      </div>
    );
  }
}
ReactDOM.render(<App />, mountNode);

适配 tarojs 实例

适配 Taro 实例,根据taro1x 文档适配,解决 tarosdk 和 toonsdk 传参数和出参差异问题,从而实现业务代码跨端。

部分城市通个性的 SDK,如群聊等,不做转换

import 'toonsdk/lib/tarosdk'; // app.js里引入,也可以在index.html里外链引入js
import Taro from '@rtarojs/taro-h5';

class App extends React.Component {
  state = {
    imgList: [],
    result: '',
  };
  // 图片
  chooseImage = params => {
    return Taro.chooseImage(params)
      .then(resp => {
        const { tempFiles, tempFilePaths } = resp;
        console.log('tempFiles:', resp);
        console.log('tempFiles[0].size:', tempFiles && tempFiles[0].size);
        this.setState({ imgList: tempFilePaths });
      })
      .catch(err => {
        console.log(err);
      });
  };

  // 二维码扫码
  getScan = params => {
    console.log('二维码扫码', params);
    return Taro.scanCode(params)
      .then(resp => {
        console.log(resp);
        this.setState({ result: resp.result });
      })
      .catch(err => {
        console.log(err);
      });
  };

  // 获取网络状态
  getNetwork = () => {
    return Taro.getNetworkType()
      .then(resp => {
        console.log(resp);
        this.setState({ result: resp.networkType });
      })
      .catch(err => {
        console.log(err);
      });
  };

  //获取位置
  getLocation = param => {
    console.log('Taro获取位置');
    return Taro.getLocation(param)
      .then(resp => {
        console.log(resp);
        this.setState({ result: JSON.stringify(resp.data) });
      })
      .catch(err => {
        console.log(err);
      });
  };

  //打开地图
  openMap = () => {
    //gcj02返回可以用于 Taro.openLocation的经纬度
    return Taro.getLocation({ type: 'gcj02' }).then(resp => {
      console.log('获取当前位置', resp);
      Taro.openLocation({
        latitude: resp.latitude,
        longitude: resp.longitude,
      }).catch(err => {
        console.log(err);
      });
    });
  };

  // 手机震动
  getShock = () => {
    return Taro.vibrateLong()
      .then(resp => {
        console.log('手机震动', resp);
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
      });
  };

  // 复制
  getCopy = params => {
    // console.log('复制', params);
    return Taro.setClipboardData(params)
      .then(resp => {
        console.log(resp);
        this.setState({ result: JSON.stringify(resp) });
      })
      .catch(err => {
        console.log(err);
      });
  };

  // 控制横竖屏切换
  getSwitchScreen = params => {
    // return toonsdk.switchScreen({
    //   orientation: params.orientation, //功能类型	0:竖屏1:横屏(顺时针270°,Home键在右侧)
    // });
  };
  // 设置分享
  share = ({ title, url, content, imgUrl }) => {
    return Taro.updateShareMenu({ title, url, content, imgUrl })
      .then(() => {
        this.setState({ result: '分享内容设置成功' });
      })
      .catch(err => {
        console.log(err);
      });
  };

  // 打开分享
  openShare = ({ title, url, content, imgUrl }) => {
    return Taro.showShareMenu({ title, url, content, imgUrl })
      .then(()
1.1.42

2 months ago

1.1.41

5 months ago

1.1.40

5 months ago

1.1.38

7 months ago

1.1.37

7 months ago

1.1.36

7 months ago

1.1.39

6 months ago

1.1.34

10 months ago

1.1.33

10 months ago

1.1.35

9 months ago

1.1.29

1 year ago

1.1.28

1 year ago

1.1.32

1 year ago

1.1.31

1 year ago

1.1.27

1 year ago

1.1.26

1 year ago

1.1.25

1 year ago

1.1.24

1 year ago

1.1.23

2 years ago

1.1.19

2 years ago

1.1.18

2 years ago

1.1.17

2 years ago

1.1.9

2 years ago

1.1.12

2 years ago

1.1.11

2 years ago

1.1.10

2 years ago

1.1.20

2 years ago

1.1.16

2 years ago

1.1.15

2 years ago

1.1.14

2 years ago

1.1.13

2 years ago

1.1.8

2 years ago

1.1.7

2 years ago

1.1.6

2 years ago

1.1.5

2 years ago

1.1.4

2 years ago

1.1.3

2 years ago

1.1.2

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.0.0

2 years ago