npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@huiqiangdev/react-native-wechat-api

v1.0.3

Published

微信SDK

Downloads

6

Readme

react-native-wechat-api

微信SDK

[React Native] bridging library that integrates WeChat SDKs:

  • [x] iOS SDK 1.9.2
  • [x] Android SDK 6.8.0

Installation

npm install @huiqiangdev/react-native-wechat-api
yarn add @huiqiangdev/react-native-wechat-api

Start

Usage

本库支持 TypeScript,使用 Promiseasync/await 来接收返回。

接口名称和参数尽量跟腾讯官网保持一致性,除了嵌套对象变成扁平对象,你可以直接查看腾讯文档来获得更多帮助。

registerApp(appid) 注册

  • appid {String} the appid you get from WeChat dashboard
  • universalLink ios 需要 / android 为空
  • returns {Boolean} explains if your application is registered done

This method should be called once globally.

import * as WeChat from '@huiqiangdev/react-native-wechat-api';

WeChat.registerApp('appid', 'universalLink');

class ShareMetadata

  • title {String} title of this message.
  • type {Number} type of this message. Can be {news|text|imageUrl|imageFile|imageResource|video|audio|file}
  • thumbImage {String} Thumb image of the message, which can be a uri or a resource id.
  • description {String} The description about the sharing.
  • webpageUrl {String} Required if type equals news. The webpage link to share.
  • imageUrl {String} Provide a remote image if type equals image.
  • videoUrl {String} Provide a remote video if type equals video.
  • musicUrl {String} Provide a remote music if type equals audio.
  • filePath {String} Provide a local file if type equals file.
  • fileExtension {String} Provide the file type if type equals file.

shareToTimeline(message)

  • message {ShareMetadata} This object saves the metadata for sharing
  • returns {Object}

Share a ShareMetadata message to timeline(朋友圈) and returns:

| name | type | description | |---------|--------|-------------------------------------| | errCode | Number | 0 if authorization successed | | errStr | String | Error message if any error occurred |

The following examples require the 'react-native-chat' and 'react-native-fs' packages.

import * as WeChat from '@/huiqiangdev/react-native-wechat-api';
import fs from 'react-native-fs';
let resolveAssetSource = require('resolveAssetSource');
// Code example to share text message:
try {
  let result = await WeChat.shareToTimeline({
    type: 'text',
    description: 'hello, wechat'
  });
  console.log('share text message to time line successful:', result);
} catch (e) {
  if (e instanceof WeChat.WechatError) {
    console.error(e.stack);
  } else {
    throw e;
  }
}
// Code example to share image url:
// Share raw http(s) image from web will always fail with unknown reason, please use image file or image resource instead
try {
  let result = await WeChat.shareToTimeline({
    type: 'imageUrl',
    title: 'web image',
    description: 'share web image to time line',
    mediaTagName: 'email signature',
    messageAction: undefined,
    messageExt: undefined,
    imageUrl: 'http://www.ncloud.hk/email-signature-262x100.png'
  });
  console.log('share image url to time line successful:', result);
} catch (e) {
  if (e instanceof WeChat.WechatError) {
    console.error(e.stack);
  } else {
    throw e;
  }
}
// Code example to share image file:
try {
  let rootPath = fs.DocumentDirectoryPath;
  let savePath = rootPath + '/email-signature-262x100.png';
  console.log(savePath);

  /*
   * savePath on iOS may be:
   *  /var/mobile/Containers/Data/Application/B1308E13-35F1-41AB-A20D-3117BE8EE8FE/Documents/email-signature-262x100.png
   *
   * savePath on Android may be:
   *  /data/data/com.wechatsample/files/email-signature-262x100.png
   **/
  await fs.downloadFile('http://www.ncloud.hk/email-signature-262x100.png', savePath);
  let result = await WeChat.shareToTimeline({
    type: 'imageFile',
    title: 'image file download from network',
    description: 'share image file to time line',
    mediaTagName: 'email signature',
    messageAction: undefined,
    messageExt: undefined,
    imageUrl: "file://" + savePath // require the prefix on both iOS and Android platform
  });
  console.log('share image file to time line successful:', result);
} catch (e) {
  if (e instanceof WeChat.WechatError) {
    console.error(e.stack);
  } else {
    throw e;
  }
}
// Code example to share image resource:
try {
  let imageResource = require('./email-signature-262x100.png');
  let result = await WeChat.shareToTimeline({
    type: 'imageResource',
    title: 'resource image',
    description: 'share resource image to time line',
    mediaTagName: 'email signature',
    messageAction: undefined,
    messageExt: undefined,
    imageUrl: resolveAssetSource(imageResource).uri
  });
  console.log('share resource image to time line successful', result);
}
catch (e) {
  if (e instanceof WeChat.WechatError) {
    console.error(e.stack);
  } else {
    throw e;
  }
}
// Code example to download an word file from web, then share it to WeChat session
// only support to share to session but time line
// iOS code use DocumentDirectoryPath
try {
  let rootPath = fs.DocumentDirectoryPath;
  let fileName = 'signature_method.doc';
  /*
   * savePath on iOS may be:
   *  /var/mobile/Containers/Data/Application/B1308E13-35F1-41AB-A20D-3117BE8EE8FE/Documents/signature_method.doc
   **/
  let savePath = rootPath + '/' + fileName;
  await fs.downloadFile('https://open.weixin.qq.com/zh_CN/htmledition/res/assets/signature_method.doc', savePath);
  let result = await WeChat.shareToSession({
    type: 'file',
    title: fileName, // WeChat app treat title as file name
    description: 'share word file to chat session',
    mediaTagName: 'word file',
    messageAction: undefined,
    messageExt: undefined,
    filePath: savePath,
    fileExtension: '.doc'
  });
  console.log('share word file to chat session successful', result);
} catch (e) {
  if (e instanceof WeChat.WechatError) {
    console.error(e.stack);
  } else {
    throw e;
  }
}
//android code use ExternalDirectoryPath
try {
  let rootPath = fs.ExternalDirectoryPath;
  let fileName = 'signature_method.doc';
  /*
   * savePath on Android may be:
   *  /storage/emulated/0/Android/data/com.wechatsample/files/signature_method.doc
   **/
  let savePath = rootPath + '/' + fileName;
  await fs.downloadFile('https://open.weixin.qq.com/zh_CN/htmledition/res/assets/signature_method.doc', savePath);
  let result = await WeChat.shareToSession({
    type: 'file',
    title: fileName, // WeChat app treat title as file name
    description: 'share word file to chat session',
    mediaTagName: 'word file',
    messageAction: undefined,
    messageExt: undefined,
    filePath: savePath,
    fileExtension: '.doc'
  });
  console.log('share word file to chat session successful', result);
}
catch (e) {
  if (e instanceof WeChat.WechatError) {
    console.error(e.stack);
  } else {
    throw e;
  }
}

shareToSession(message)

  • message {ShareMetadata} This object saves the metadata for sharing
  • returns {Object}

Similar to shareToTimeline but sends the message to a friend or chat group.

isWXAppInstalled() 判断微信是否已安装

  • returns {Boolean} if WeChat is installed.

Check if the WeChat app is installed on the device.

import * as WeChat from 'react-native-wechat-api';

WeChat.isWXAppInstalled();

isWXAppSupportApi() 检查支持情况

  • returns {Boolean} Contains the result.

Check if wechat support open url.

import * as WeChat from 'react-native-wechat-api';

WeChat.isWXAppSupportApi();

getApiVersion() 获取 API 版本号

  • returns {String} Contains the result.

Get the WeChat SDK api version.

import * as WeChat from 'react-native-wechat-api';

WeChat.getApiVersion();

openWXApp() 打开微信

  • returns {Boolean}

Open the WeChat app from your application.

import * as WeChat from 'react-native-wechat-api';

WeChat.openWXApp();

sendAuthRequest([scope, state]]) 微信授权登录

  • scope {Array|String} Scopes of auth request.
  • state {String} the state of OAuth2
  • returns {Object}

Send authentication request, and it returns an object with the following fields:

| field | type | description | | ------- | ------ | ----------------------------------- | | errCode | Number | Error Code | | errStr | String | Error message if any error occurred | | openId | String | | | code | String | Authorization code | | url | String | The URL string | | lang | String | The user language | | country | String | The user country |

ShareText(ShareTextMetadata) 分享文本

ShareTextMetadata

| name | type | description | | ----- | ------ | ------------------------------ | | text | String | 分享文本 | | scene | Number | 分享到, 0:会话 1:朋友圈 2:收藏 |

Return:

| name | type | description | | ------- | ------ | ----------------------------------- | | errCode | Number | 0 if authorization succeed | | errStr | String | Error message if any error occurred |

import * as WeChat from 'react-native-wechat-api';

WeChat.shareText({
  text: 'Text content.',
  scene: 0,
});

ShareImage(ShareImageMetadata) 分享图片

ShareImageMetadata

| name | type | description | | -------- | ------ | ------------------------------ | | imageUrl | String | 图片地址 | | scene | Number | 分享到, 0:会话 1:朋友圈 2:收藏 |

Return:

| name | type | description | | ------- | ------ | ----------------------------------- | | errCode | Number | 0 if authorization succeed | | errStr | String | Error message if any error occurred |

import * as WeChat from 'react-native-wechat-api';

WeChat.shareImage({
  imageUrl: 'https://google.com/1.jpg',
  scene: 0,
});

ShareLocalImage(ShareImageMetadata) 分享本地图片

ShareImageMetadata

| name | type | description | | -------- | ------ | ------------------------------ | | imageUrl | String | 图片地址 | | scene | Number | 分享到, 0:会话 1:朋友圈 2:收藏 |

Return:

| name | type | description | | ------- | ------ | ----------------------------------- | | errCode | Number | 0 if authorization succeed | | errStr | String | Error message if any error occurred |

ShareFile(ShareFileMetadata) 分享文件

ShareFileMetadata

| name | type | description | | ----- | ------ | -------------- | | url | String | 文件地址 | | title | String | 文件标题 | | scene | Number | 分享到, 0:会话 |

Return:

| name | type | description | | ------- | ------ | ----------------------------------- | | errCode | Number | 0 if authorization succeed | | errStr | String | Error message if any error occurred |

import * as WeChat from 'react-native-wechat-api';

WeChat.shareFile({
  imageUrl: 'https://sdcard/test.png',
  title: '测试文件.pdf',
  scene: 0,
});

ShareMusic(ShareMusicMetadata) 分享音乐

ShareMusicMetadata

| name | type | description | | ------------------- | ------ | ------------------------------------- | | title | String | 标题 | | description | String | 描述 | | thumbImageUrl | String | 缩略图地址,本库会自动压缩到 32KB | | musicUrl | String | 音频网页的 URL 地址 | | musicLowBandUrl | String | 供低带宽环境下使用的音频网页 URL 地址 | | musicDataUrl | String | 音频数据的 URL 地址 | | musicLowBandDataUrl | String | 供低带宽环境下使用的音频数据 URL 地址 | | scene | Number | 分享到, 0:会话 1:朋友圈 2:收藏 |

Return:

| name | type | description | | ------- | ------ | ----------------------------------- | | errCode | Number | 0 if authorization succeed | | errStr | String | Error message if any error occurred |

import * as WeChat from 'react-native-wechat-api';

WeChat.shareMusic({
  title: 'Good music.',
  musicUrl: 'https://google.com/music.mp3',
  thumbImageUrl: 'https://google.com/1.jpg',
  scene: 0,
});

ShareVideo(ShareVideoMetadata) 分享视频

ShareVideoMetadata

| name | type | description | | --------------- | ------ | --------------------------------- | | title | String | 标题 | | description | String | 描述 | | thumbImageUrl | String | 缩略图地址,本库会自动压缩到 32KB | | videoUrl | String | 视频链接 | | videoLowBandUrl | String | 供低带宽的环境下使用的视频链接 | | scene | Number | 分享到, 0:会话 1:朋友圈 2:收藏 |

Return:

| name | type | description | | ------- | ------ | ----------------------------------- | | errCode | Number | 0 if authorization succeed | | errStr | String | Error message if any error occurred |

import * as WeChat from 'react-native-wechat-api';

WeChat.shareVideo({
  title: 'Interesting video.',
  videoUrl: 'https://google.com/music.mp3',
  thumbImageUrl: 'https://google.com/1.jpg',
  scene: 0,
});

ShareWebpage (ShareWebpageMetadata) 分享网页

ShareWebpageMetadata

| name | type | description | | ------------- | ------ | --------------------------------- | | title | String | 标题 | | description | String | 描述 | | thumbImageUrl | String | 缩略图地址,本库会自动压缩到 32KB | | webpageUrl | String | HTML 链接 | | scene | Number | 分享到, 0:会话 1:朋友圈 2:收藏 |

Return:

| name | type | description | | ------- | ------ | ----------------------------------- | | errCode | Number | 0 if authorization succeed | | errStr | String | Error message if any error occurred |

import * as WeChat from 'react-native-wechat-api';

WeChat.shareWebpage({
  title: 'Interesting web.',
  videoUrl: 'https://google.com/music.mp3',
  thumbImageUrl: 'https://google.com/1.jpg',
  scene: 0,
});

ShareMiniProgram(ShareMiniProgramMetadata) 分享小程序

ShareMiniProgram

| name | type | description | | --------------- | ------ | ---------------------------------------------------------------------------------- | | title | String | 标题 | | description | String | 描述 | | thumbImageUrl | String | 缩略图地址,本库会自动压缩到 32KB | | userName | String | 小程序的 userName,填小程序原始 id | | path | String | 小程序的页面路径 | | hdImageUrl | String | 小程序新版本的预览图二进制数据,6.5.9 及以上版本微信客户端支持 | | withShareTicket | String | 是否使用带 shareTicket 的分享 | | miniProgramType | Number | 小程序的类型,默认正式版,1.8.1 及以上版本开发者工具包支持分享开发版和体验版小程序 | | webpageUrl | String | 兼容低版本的网页链接 | | scene | Number | 分享到, 0:会话 1:朋友圈 2:收藏 |

Return:

| name | type | description | | ------- | ------ | ----------------------------------- | | errCode | Number | 0 if authorization succeed | | errStr | String | Error message if any error occurred |

import * as WeChat from 'react-native-wechat-api';

WeChat.shareMiniProgram({
  title: 'Mini program.',
  userName: 'gh_d39d10000000',
  webpageUrl: 'https://google.com/show.html',
  thumbImageUrl: 'https://google.com/1.jpg',
  scene: 0,
});

LaunchMiniProgram (LaunchMiniProgramMetadata) 跳到小程序

LaunchMiniProgramMetadata

| name | type | description | | --------------- | ------ | -------------------------------------------------------------------------------------------------------------------------- | | userName | String | 填小程序原始 id | | miniProgramType | Number | 可选打开 开发版,体验版和正式版 | | path | String | 拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar" |

Return:

| name | type | description | | ------- | ------ | ----------------------------------- | | errCode | Number | 0 if authorization succeed | | errStr | String | Error message if any error occurred |

import * as WeChat from 'react-native-wechat-api';

WeChat.launchMiniProgram({
  userName: 'gh_d39d10000000',
  miniProgramType: 1,
});

launchCustomerService (LaunchCustomerServiceMetadata) 跳到小程序

LaunchMiniProgramMetadata

| name | type | description | |--------| ------ |------------------------------------------------------------------------| | corpid | String | 企业ID | | url | Number | 客服URL |

Return:

| name | type | description | | ------- | ------ | ----------------------------------- | | errCode | Number | 0 if authorization succeed | | errStr | String | Error message if any error occurred |

import * as WeChat from 'react-native-wechat-api';

WeChat.launchCustomerService({
  corpid: 'gh_d39d10000000',
  url: 'https://work.weixin.qq.com/kfid/kfcxxxxx',
});

ChooseInvoice (ChooseInvoice) 选择发票

ChooseInvoice

| name | type | description | | --------- | ------ | ----------- | | cardSign | String | 签名 | | signType | String | 签名类型 | | timeStamp | Number | 当前时间戳 | | nonceStr | String | 随机字符串 |

Invoice

| name | type | description | | ----------- | ------ | ----------- | | appId | String | | | cardId | String | 发票 Id | | encryptCode | String | 加密串 |

Return:

| name | type | description | | ------- | --------- | ----------------------------------- | | errCode | Number | 0 if authorization succeed | | cards | Invoice[] | 发票数据 | | errStr | String | Error message if any error occurred |

import * as WeChat from 'react-native-wechat-api';

// ios 什么都不填都可以,android可以填写以下假的内容都可以正常运行,具体参数获取可以去看微信文档
WeChat.chooseInvoice({
  cardSign: 'cardSign',
  signType: 'SHA256',
  timeStamp: Date.now(),
  nonceStr: `${Date.now()}`,
});

pay(payload) 支付

  • payload {Object} the payment data
    • partnerId {String} 商家向财付通申请的商家 ID
    • prepayId {String} 预支付订单 ID
    • nonceStr {String} 随机串
    • timeStamp {String} 时间戳
    • package {String} 商家根据财付通文档填写的数据和签名
    • sign {String} 商家根据微信开放平台文档对数据做的签名
  • returns {Object}

Sends request for proceeding payment, then returns an object:

| name | type | description | | ------- | ------ | ----------------------------------- | | errCode | Number | 0 if authorization succeed | | errStr | String | Error message if any error occurred |

subscribeMessage(SubscribeMessageMetadata) 一次性订阅消息

  • returns {Object}

| name | type | description | | ---------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | scene | Number | 重定向后会带上 scene 参数,开发者可以填 0-10000 的整形值,用来标识订阅场值 | | templateId | String | 订阅消息模板 ID,在微信开放平台提交应用审核通过后获得 | | reserved | String | 用于保持请求和回调的状态,授权请后原样带回给第三方。该参数可用于防止 csrf 攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加 session 进行校验,开发者可以填写 a-zA-Z0-9 的参数值,最多 128 字节,要求做 urlencode |

Contributing

See the contributing guide to learn how to contribute to the repository and the development workflow.

License

MIT