little-snow-fox / react-native-wechat-lib

🚀 WeChat login, share, favorite and payment for React-Native on iOS and Android
MIT License
664 stars 129 forks source link

如何用两个不同的appId调用两次 registerApp? #94

Open Sunnysit opened 4 years ago

Sunnysit commented 4 years ago

你好,我们的项目有一个需求是这样的,微信授权登录使用一个App ID,所以我在登录组件内调用了 WeChat.registerApp(APP_ID_A)。但微信支付业务上我们需要使用的是另外一个App ID B, 所以我在支付组件再次调用 WeChat.registerApp(APP_ID_B)。发现似乎第二个注册无效,当跳转到微信时显示商家AppID参数不对。 我猜想是因为第一次就算我在组件内调用也已经全局注册了,想请问是否有办法实现局部注册?

GuanYuQ commented 3 years ago

同样的问题,请问现在解决了吗?

Sunnysit commented 3 years ago

同样的问题,请问现在解决了吗?

没有一个很好的解决办法。现在我用的方法是分别 import 两个版本的 react-native-wechat 包。一个包registerApp用于支付,另外一个registerApp用于授权登录。ios可以这么做,但Android不行因为他不能在加载两个不同版本的wechat sdk的native包。

jimhj commented 3 years ago

实测, .../node_modules/react-native-wechat-lib/index.js,

function wrapRegisterApp(nativeFunc) {
  if (!nativeFunc) {
    return undefined;
  }
  return (...args) => {
    // if (isAppRegistered) {
    //   return Promise.resolve(true);
    // }
    isAppRegistered = true;
    return new Promise((resolve, reject) => {
      nativeFunc.apply(null, [
        ...args,
        (error, result) => {
          if (!error) {
            return resolve(result);
          }
          if (typeof error === 'string') {
            return reject(new Error(error));
          }
          reject(error);
        },
      ]);
    });
  };
}

注释掉检查是否已经注册的检查,可以实现多次注册