Fluwx:让在Flutter中使用微信SDK成为可能

Fluwx是一款针对Flutter开发者的微信集成插件,支持文本、图片等多种分享方式及微信登录等功能。本文详细介绍Fluwx的配置与使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

img_0339bd14282dfe00386dd13fd6c33c95.png
fluwx_logo.png

前言

之前有了解的小伙伴可能已经看过Fluwx的一篇文章,不过那个时候Fluwx还是不太成熟。现在Fluwx的主体功能已经过成了。如果你正在或想开发一个Flutter项目但苦于无法使用微信分享、登录,那么Fluwx可能正是你所要寻找的。
尽管Fluwx旨在减化工作量,但在使用Fluwx之前,我还是强烈建议先阅读微信SDK官方文档,这有助于了解一些概念,有利于调试问题。
项目地址

目前功能

  • 文本分享。
  • 网站分享。
  • 图片分享。
  • 音乐分享。
  • 视频分享。
  • 小程序分享。
  • 发送Auth认证。

技术参数

Android部分使用到了kotlin-1.2.60。以下是Android部分所涉及到的技术:

 api 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:5.1.4'
 implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.24.0'
 implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:0.24.0'
 implementation 'top.zibin:Luban:1.1.8'
 implementation 'com.squareup.okhttp3:okhttp:3.11.0'

其中Luban是用来图片压缩的。
iOS部分涉及到的技术:

 s.dependency 'WechatOpenSDK','~> 1.8.2'

Flutter版本信息

Flutter 0.7.5 • channel dev • https://github.com/flutter/flutter.git

Framework • revision eab5cd9853 (4 days ago) • 2018-08-30 14:47:04 -0700

Engine • revision dc7b5eb89d

Tools • Dart 2.1.0-dev.3.0.flutter-760a9690c2

引入

pubspec.yaml文件中添加如下代码:

dependencies:
  fluwx: ^0.1.3

添加完成后不要忘记flutter packages get

初始化

使用Fluwx前,需要进行初始化操作:

Fluwx.registerApp(RegisterModel(appId: "your app id", doOnAndroid: true, doOnIOS: true));
  • appId:在微信平台申请的appId。
  • doOnAndroid:是否在android平台上执行此操作。
  • doOnIOS:是否在平台上执行此操作。</br>
    每一个字段都是非必须的,但是如果不传appIddoOnAndroid: false或者doOnIOS: false,请务必手动注册WXApi以保证Fluwx正常工作。
    注册完成后,请在使用Fluwx前在对应平台添加如下代码:
    Android上:
FluwxShareHandler.setWXApi(wxapi)

iOS上:

isWeChatRegistered = YES;

注意:尽管可以通过Fluwx完成微信注册,但一些操作依然需要在对应平台进行设置,如配置iOS的URLSchema,Android上的WXEntryActivity等,否则Fluwx无法正常工作。

如何发起分享

很遗憾,Fluwx并不是支持所有的分享类型。目前仅支持文本、图片、网址
音乐、视频以及小程序的分享。其他分享将在未来版本得到支持。

注意:目前分享中涉及到图片的地方仅支持pngjpg,支持网络图片及assets图片。

使用assets图片需要添加assets://

也可以在assets图片添加?package=package_name以读取指定包的图片。

未来可能支持file://,目前以file://图片不会做任何处理。

如果不指定schema或者schema错误,将会被处理为网络图片,请谨慎。

由于微信的限制,一般的缩略图要小于32k(小程序的缩略图要小于120k),所以在使用缩略的时候

很有必要使用一张合格的缩略图,否则Fluwx进行压缩,其结果可能并不是你所预期的。

分享去处

绝大部分分享可以分享到会话,朋友圈,收藏(小程序目前只能分享到会话)。默认分享到会话:

    ///[WeChatScene.SESSION]会话
    ///[WeChatScene.TIMELINE]朋友圈
    ///[WeChatScene.FAVORITE]收藏
    enum WeChatScene {
      SESSION,
      TIMELINE,
      FAVORITE
      }

分享文本

  fluwx.share(WeChatShareTextModel(
      text: "text from fluwx",
      transaction: "transaction}",//仅在android上有效,下同。
      scene: scene
    ));

分享图片

 fluwx.share(WeChatShareImageModel(
        image: _imagePath,
        thumbnail: _thumbnail,
        transaction: _imagePath,
        scene: scene,
        description: "image"));

注意:如果不指定 thumbnail,那么Fluwx将尝试从image中获取缩略图。

分享音乐

  var model = WeChatShareMusicModel(
      title: _title,
      description: _description,
      transaction: "music",
      musicUrl: _musicUrl,
      musicLowBandUrl: _musicLowBandUrl
    );

    fluwx.share(model);

音乐的分享有两种:musicUrlmusicLowBandUrl。这两种形式是不共存的,如果
都二者都进行了赋值,那么只会读取musicUrl

分享视频

   var model = new WeChatShareVideoModel(
     videoUrl: _videoUrl,
     transaction: "video",
     videoLowBandUrl: _videoLowBandUrl,
     thumbnail: _thumnail,
     description: _description,
     title: _title
   );
   fluwx.share(model);

视频的分享有两种:videoUrlvideoLowBandUrl。这两种形式是不共存的,如果
都二者都进行了赋值,那么只会读取videoUrl

分享小程序

 var model =new WeChatShareMiniProgramModel(
      webPageUrl: _webPageUrl,
      miniProgramType: WeChatShareMiniProgramModel.MINI_PROGRAM_TYPE_RELEASE,
      userName: _userName,
      title: _title,
      description: _description,
      thumbnail: _thumbnail
    );
    fluwx.share(model);

miniProgramType仅支持三种:

  • MINI_PROGRAM_TYPE_RELEASE
  • MINI_PROGRAM_TYPE_TEST
  • MINI_PROGRAM_TYPE_PREVIEW

发送Auth认证

对于微信登录,Fluwx只实现了第一步,即获取code,若要获取access_token请在服务器端完成。

   fluwx.sendAuth(WeChatSendAuthModel(
      scope: "snsapi_userinfo",
      state:"wechat_sdk_demo_test",
    ));

发起支付

每个参数的意义请参考官方文档:

Fluwx fluwx = new Fluwx();
fluwx.pay(WeChatPayModel(
                  appId: 'wxd930ea5d5a258f4f', 
                  partnerId: '1900000109',
                  prepayId: '1101000000140415649af9fc314aa427',
                  packageValue: 'Sign=WXPay',
                  nonceStr: '1101000000140429eb40476f8896f4c9',
                  timeStamp: '1398746574',
                  sign: '7FFECB600D7157C5AA49810D2D8F28BC2811827B',
                  signType: '选填',
                  extData: '选填'
                ));

微信回调

fluwx发起分享、支付或登录请求都会有返回值,但这并不是微信回调的值:

    {
      "platform":"Android",//或者iOS
       result:true //或者false,取决于WXApi.sendRequest()的结果
     }

由于微信的回调是异步的,我们需要从response中监听:

    _fluwx.response.listen((response){
      //do something
    });

从微信回调的值为WeChatResponse,其实type字段为枚举:

enum WeChatResponseType {
    SHARE,
    AUTH,
    PAYMENT }

result为微信回传的值,其类型为Map,具体返回值请参阅微信官方文档,但均额外包含一个
platform字段,其值为android或者iOS,以便开发者作差异化处理。
但微信的回调也要根据平台的不同进行差异化处理(如果你不需要回调,请忽略)。

Android

由于机制问题,Android端需要在WXEntryActivityWXPayEntryActivity中添加如下代码:

   override fun onResp(resp: BaseResp) {
        FluwxResponseHandler.handleResponse(resp)
   }

你也可以直接继承FluwxWXEntryActivity
WXEntryActivityWXPayEntryActivity创建规则请参阅官方文档。具体可以参考example wxapi
,也不要忘记在AndroidManifest.mxl中注册:

     <activity
            android:name="your.package.name.registered.on.wechat.wxapi.WXEntryActivity"
            android:theme="@style/DisablePreviewTheme"
            android:exported="true"
            android:launchMode="singleTop"/>
     <activity
            android:name="your.package.name.registered.on.wechat.wxapi.WXPayEntryActivity"
            android:theme="@style/DisablePreviewTheme"
            android:exported="true"
            android:launchMode="singleTop"/>

iOS

在你的AppDelegate.m中重写下面方法:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return [WXApi handleOpenURL:url delegate:[FluwxResponseHandler responseHandler]];
}

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options{
  return [WXApi handleOpenURL:url delegate:[FluwxResponseHandler responseHandler]];
}

结束

以上就是Fluwx的使用方法,希望对大伙有所帮助。
项目地址,多多star。
另外还有一个支付宝支付项目tobias正在开发当中。
希望大家可以关注JarvanMoOpenFlutter

<think>根据用户提供的引用内容,用户的需求是了解如何在Flutter应用中集成微信支付,特别是配置链接设置。用户引用了三段内容,主要涉及`fluwx`插件的使用iOS项目配置。 核心步骤: 1. 添加依赖 2. 注册微信API(包括iOS的Universal Link配置) 3. 处理支付回调 4. iOS项目配置(URL Types) 具体实现: 一、添加依赖 在`pubspec.yaml`中添加`fluwx`依赖: ```yaml dependencies: fluwx: ^3.9.1 ``` 二、注册微信API 在Flutter应用启动时,需要注册微信API。注意,iOS需要配置Universal Link,这是微信支付在iOS上的必要配置。 ```dart import 'package:fluwx/fluwx.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await setupFluwx(); runApp(MyApp()); } Future<void> setupFluwx() async { await fluwx.registerWxApi( appId: "微信开放平台申请的appId", doOnAndroid: true, doOnIOS: true, universalLink: "微信开放平台配置的Universal Link", // 对于iOS必须 ); } ``` 三、发起支付请求 使用`fluwx`提供的支付方法,传入后台返回的支付参数。 ```dart Future<void> paymentWechat(Map<String, dynamic> orderInfo) async { // 检查是否安装微信 bool installed = await fluwx.isWeChatInstalled(); if (!installed) { // 处理未安装微信的情况 return; } try { await fluwx.payWithWeChat( appId: orderInfo['appid'], partnerId: orderInfo['partnerid'], prepayId: orderInfo['prepayid'], packageValue: orderInfo['package'], nonceStr: orderInfo['noncestr'], timeStamp: int.parse(orderInfo['timestamp']), sign: orderInfo['sign'], ); } catch (e) { // 处理异常 } } ``` 四、监听支付结果 通过事件监听器处理支付结果。 ```dart // 在应用启动时注册监听 fluwx.weChatResponseEventHandler.listen((event) { if (event is WeChatPaymentResponse) { if (event.errCode == 0) { // 支付成功 } else { // 支付失败 } } }); ``` 五、iOS项目配置 1. 配置URL Types 在Xcode中,选择Target -> Info -> URL Types,添加一个URL Scheme,格式为`wx${appId}`,其中appId是微信开放平台申请的appId(注意:appId必须是数字字母组成,如果有特殊字符需要去掉)。 2. 配置Universal Link 在微信开放平台配置应用的Universal Link,然后在Xcode中启用Associated Domains,添加`applinks:你的域名`(例如:`applinks:example.com`)。 注意事项: - 确保Universal Link的配置正确,并且微信开放平台填写的Universal Link与Xcode中配置的一致。 - 在iOS上,Universal Link必须使用HTTPS,且不能包含端口号。 - 测试时,建议使用真机测试,因为模拟器可能无法正常调起微信。 六、Android配置 在`AndroidManifest.xml`中添加以下权限Activity声明: ```xml <uses-permission android:name="android.permission.INTERNET" /> <!-- 如果需要支付完成后回到应用,则需要在AndroidManifest.xml中配置回调Activity --> <activity android:name="com.example.wxapi.WXPayEntryActivity" android:exported="true" android:launchMode="singleTop" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> ``` 注意:`WXPayEntryActivity`的路径必须是`包名.wxapi.WXPayEntryActivity`,并且需要继承`FluwxWXPayEntryActivity`。如果使用`fluwx`,则不需要自己实现,插件已经提供。 七、处理支付结果回调 在Android中,支付结果会通过`WXPayEntryActivity`回调到Flutter端,所以不需要额外处理,只需要确保Activity的声明正确。 总结: 1. 添加依赖 2. 注册微信API(提供appIduniversalLink) 3. 发起支付(传入后台返回的支付参数) 4. 监听支付结果 5. 配置iOS的URL TypesAssociated Domains 6. 配置Android的Activity 如果遇到问题,可以检查以下方面: - iOS的Universal Link是否配置正确,并且能够访问到`apple-app-site-association`文件。 - 微信开放平台的应用配置是否正确(包名、签名、Universal Link等)。 - 支付参数是否正确(特别是签名,需要按照微信的要求生成)。 引用说明: 用户提供的引用[1][2][3]都提到了使用`fluwx`插件进行微信支付,包括注册、支付回调监听。同时,引用[1]特别强调了iOS项目需要配置URL Types。 因此,本回答综合了这些引用内容,并补充了详细步骤注意事项。 相关问题: 1. 如何生成微信支付所需的参数? 2. 如何处理微信支付回调中的错误码? 3. 在Flutter中如何测试微信支付? 4. Universal Link配置的具体步骤是什么?</think>以下是 Flutter 微信支付集成的完整配置指南,重点解决链接设置配置问题: ### 核心配置步骤 1. **添加依赖** ```yaml dependencies: fluwx: ^3.9.1 # 微信支付官方插件 ``` 2. **初始化配置(关键链接设置)** ```dart import 'package:fluwx/fluwx.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await fluwx.registerWxApi( appId: "wx1234567890abcdef", // 微信开放平台申请的AppID universalLink: "https://yourdomain.com/universal-link/", // iOS必须 doOnAndroid: true, doOnIOS: true, ); runApp(MyApp()); } ``` 3. **支付请求发起** ```dart Future<void> wechatPay(Map<String, dynamic> orderInfo) async { if (await fluwx.isWeChatInstalled) { await fluwx.payWithWeChat( appId: orderInfo['appid'], partnerId: orderInfo['partnerid'], prepayId: orderInfo['prepayid'], packageValue: orderInfo['package'], nonceStr: orderInfo['noncestr'], timeStamp: int.parse(orderInfo['timestamp']), // 必须为int sign: orderInfo['sign'], signType: 'MD5' // 或 'HMAC-SHA256' ); } else { showToast('请安装微信APP'); } } ``` 4. **支付结果监听** ```dart // 在initState中设置监听 @override void initState() { super.initState(); fluwx.weChatResponseEventHandler .distinct() .listen((event) { if (event is WeChatPaymentResponse) { if (event.errCode == 0) { print('支付成功'); } else { print('支付失败: ${event.errCode} - ${event.errStr}'); } } }); } ``` --- ### iOS 专属配置(关键) 1. **Xcode 配置** - 添加 URL Scheme:`wx${appId}` (如 `wxd930ea5d5a258f4f`) - 开启 Associated Domains:`applinks:yourdomain.com` 2. **Universal Link 配置** - 在微信开放平台配置 Universal Link - 服务器需托管 `apple-app-site-association` 文件: ```json { "applinks": { "apps": [], "details": [{ "appID": "TeamID.com.your.app", "paths": ["/universal-link/*"] }] } } ``` 3. **iOS 权限声明** ```xml <!-- Info.plist --> <key>LSApplicationQueriesSchemes</key> <array> <string>weixin</string> <string>weixinULAPI</string> </array> ``` --- ### Android 专属配置 1. **AndroidManifest.xml** ```xml <activity android:name="com.tencent.mm.opensdk.openapi.WXPayEntryActivity" android:exported="true" android:launchMode="singleTop" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> ``` 2. **包名匹配** - 确保 Android 包名与微信开放平台注册一致 --- ### 常见问题解决 1. **回调不触发检查项**: - iOS:Universal Link 必须 HTTPS 且通过苹果验证 - Android:包名/签名必须与微信开放平台完全一致 - 确保 `fluwx.registerWxApi` 在 runApp 前调用 2. **错误码处理**: ```dart -1: 通用错误(检查参数) -2: 用户取消 -3: 发送请求失败(网络问题) -4: 授权失败(APPID 错误) -5: 微信不支持(版本过低) ``` 3. **调试技巧**: ```bash # 检查 Universal Link 有效性 nslookup -q=TXT yourdomain.com ``` --- ### 支付流程时序图 ```mermaid sequenceDiagram 用户->>Flutter: 点击支付 Flutter->>后端: 请求支付参数 后端->>微信: 创建预支付订单 微信-->>后端: 返回支付参数 后端-->>Flutter: 返回支付参数 Flutter->>微信SDK: 调起支付 微信SDK-->>Flutter: 支付结果回调 Flutter->>后端: 验证支付结果 后端-->>Flutter: 最终支付状态 ``` > **重要提示**:微信支付需要企业认证账号,测试时使用微信沙箱环境(仅支持 Android)[^1][^2][^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值