@tuofeng/react-native-wechat
TypeScript icon, indicating that this package has built-in type declarations

1.12.20 • Public • Published

React-Native-Wechat

React Native bridging library that integrates WeChat SDKs:

  • [x] iOS SDK 1.8.2
  • [x] Android SDK ++

react-native-wechat has the following tracking data in the open source world:

NPM Dependency Downloads Build
NPM version Dependency Status Downloads Build Status

Table of Contents

Getting Started

API Documentation

react-native-wechat uses Promises, therefore you can use Promise or async/await to manage your dataflow.

registerApp(appid)

  • appid {String} the appid you get from WeChat dashboard
  • returns {Boolean} explains if your application is registered done

This method should be called once globally.

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

WeChat.registerApp('appid');

registerAppWithDescription(appid, description)

  • appid {String} the appid you get from WeChat dashboard
  • description {String} the description of your app
  • returns {Boolean} explains if your application is registered done

This method is only available on iOS.

isWXAppInstalled()

  • returns {Boolean} if WeChat is installed.

Check if the WeChat app is installed on the device.

isWXAppSupportApi() (iOS平台)

  • returns {Boolean} Contains the result.

Check if wechat support open url.

isWXAppSupportApi(supportSdk) (Android平台)

    //传入对应的字符串判断是否支持,没有找到微信文档,字面意思自己理解
    public static final int SDK_INT = 620824064;
    public static final int MIN_SDK_INT = 553713665;
    public static final int CHECK_TOKEN_SDK_INT = 620824064;
    public static final int TIMELINE_SUPPORTED_SDK_INT = 553779201;
    public static final int EMOJI_SUPPORTED_SDK_INT = 553844737;
    public static final int MUSIC_DATA_URL_SUPPORTED_SDK_INT = 553910273;
    public static final int PAY_SUPPORTED_SDK_INT = 570425345;
    public static final int OPENID_SUPPORTED_SDK_INT = 570425345;
    public static final int FAVORITE_SUPPPORTED_SDK_INT = 570425345;
    public static final int MESSAGE_ACTION_SUPPPORTED_SDK_INT = 570490883;
    public static final int SCAN_QRCODE_AUTH_SUPPORTED_SDK_INT = 587268097;
    public static final int MINIPROGRAM_SUPPORTED_SDK_INT = 620756993;
    public static final int VIDEO_FILE_SUPPORTED_SDK_INT = 620756996;
    public static final int SUBSCRIBE_MESSAGE_SUPPORTED_SDK_INT = 620756998;
    public static final int LAUNCH_MINIPROGRAM_SUPPORTED_SDK_INT = 620757000;
    public static final int CHOOSE_INVOICE_TILE_SUPPORT_SDK_INT = 620822528;
    public static final int INVOICE_AUTH_INSERT_SDK_INT = 620823552;
    public static final int NON_TAX_PAY_SDK_INT = 620823552;
    public static final int PAY_INSURANCE_SDK_INT = 620823552;
    public static final int SUBSCRIBE_MINI_PROGRAM_MSG_SUPPORTED_SDK_INT = 620823808;
    public static final int OFFLINE_PAY_SDK_INT = 620823808;
    public static final int SEND_TO_SPECIFIED_CONTACT_SDK_INT = 620824064;
    public static final int OPEN_BUSINESS_WEBVIEW_SDK_INT = 620824064;
  • returns {Boolean} Contain the result.

Check if wechat support open url.

getApiVersion()

  • returns {String} Contains the result.

Get the WeChat SDK api version.

openWXApp()

  • returns {Boolean}

Open the WeChat app from your application.

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

sendSubscribeMsgReq({scene, templateId, reserved})

  • scene {Number} 重定向后会带上 scene 参数,开发者可以填 0-10000 的整形值,用来标识订阅场值
  • templateId {String} 订阅消息模板 ID
  • reserved {String} 用于保持请求和回调的状态,授权请后原样带回给第三方。该参数可用于防止 csrf 攻击
  • returns {Object}

Send subscribeMsg 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 用户唯一标识
templateId String Authorization code
action String 用户点击动作,"confirm"代表用户确认授权,"cancel"代表用户取消授权
scene Number 订阅场景值。
reserved String 请求带入原样返回。

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 '@tuofeng/react-native-wechat';
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.

launchMini(params)

  • params {Object} 打开小程序的参数

    • userName {String} 拉起的小程序的username

    • miniProgramType {Integer} 拉起小程序的类型. 0-正式版 1-开发版 2-体验版

    • path {String} 拉起小程序页面的可带参路径,不填默认拉起小程序首页

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 successed
errStr String Error message if any error occurred

Installation

$ npm install @tuofeng/react-native-wechat --save

Partners

React Native Starter Kit - is a mobile starter kit that allows your team to fully focus on development of the features that set your product apart from the competitors instead of building your app from scratch.

Community

IRC

Tutorials

Who's using it

Authors

GitHub Role Email
@yorkie Author yorkiefixer@gmail.com
@xing-zheng Emeriti
@tdzl2003 Emeriti tdzl2003@gmail.com

License

MIT

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 1.12.20
    2
    • latest

Version History

Package Sidebar

Install

npm i @tuofeng/react-native-wechat

Weekly Downloads

2

Version

1.12.20

License

MIT

Unpacked Size

12.1 MB

Total Files

36

Last publish

Collaborators

  • iwater