flutter 微信支付
1.引入依赖 pubspec.yaml 记得下载依赖
dependencies:
fluwx: ^1.2.1+1
2.在android/app/build.gradle中的dependencies 引入
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
api 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:6.6.22' //这里是添加部分
}
3. 在android/build.gradle中修改 kotlin_version 的版本,否则总是会支付失败
buildscript {
// ext.kotlin_version = '1.3.50'
ext.kotlin_version = '1.3.72' 这是修改部分
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
4.然后在main.dart中全局注册
_initFluwx() async {
await registerWxApi(
appId: "开放平台支付的appid",
doOnAndroid: true,
doOnIOS: true,
universalLink: "这个地址后面如何配置后面的博客我会记录");
var result = await isWeChatInstalled();
print("is installed $result");
}
记得调用_initFluwx这个方法,例如:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await SpUtils.init();
await _initFluwx(); // 这里调用的
runApp(MyApp());
}
5.然后去android/app/src/main/kotlin/*/*/*/下面。 我的是kotlin版本,有的是java这个是不影响的,/*/*/*/这个就是你Android的包名,eg:com.app.design是你的包名,/*/*/*/就是/com/app/design/
在这个下面添加wxapi文件夹,在此文件夹下添加 WXPayEntryActivity.kt文件
package com.app.design //包名根据你的修改
import io.flutter.embedding.android.FlutterActivity
class WXPayEntryActivity: FlutterActivity() {
}
6.然后去android/app/src/main/AndroidManifest.xml中的application配置添加
<activity android:name="com.app.design.wxapi.WXPayEntryActivity" android:exported="true" android:launchMode="singleTop"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="你的appid"/> </intent-filter> </activity>
7.然后开始使用
var isInstalled = await fluwx.isWeChatInstalled();
if (!isInstalled) {
Get.snackbar('温馨提示', '请先安装微信');
}
// 将下面这些参数替换成后台返回的即可
var payRes = await fluwx.payWithWeChat(
appId: map['paySign']['appid'],
partnerId: map['paySign']['partnerid'],
prepayId: map['paySign']['prepayid'],
packageValue: map['paySign']['package'],
nonceStr: map['paySign']['noncestr'],
timeStamp: int.parse(map['paySign']['timestamp']),
sign: map['paySign']['paySign'],
);
fluwx.responseFromPayment.listen((data) {
print(data.errCode);
print(data.extData);
print(675675);
print("WeChatPaymentResponse"+data.errCode.toString());
if (data.errCode == 0) {
Get.snackbar('温馨提示', '微信支付成功');
getInit();
Get.toNamed(AppRoutes.RechargeState, arguments: {
"orderSn":res['data']['orderSn']
});
} else {
Get.snackbar('温馨提示', '微信支付失败');
}
});
map['paySign']是接口返回的微信支付的信息和支付宝支付是一样的
这样就可以直接跳转微信支付了
如果你不知道开放平台配置的签名是什么,你可以如下操作,在真机上安装你写的app,然后再真机上安装微信官方写的一个apk 这是地址https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk
然后打开下载的这个app,在输入框中输入包名,例如com.app.design,回撤就会告诉你你写的app的包的签名是什么,然后复制到微信开放平台去配置,如果不一样基本上是不会支付成功的
还有一个问题记录一下:就是如果你升级版本之后改了apk的本地加签的keystore或者jks的签名或者包名,按照道理,你是需要重新走上面那个步骤生成新的签名再去微信开放平台配置,但是这里会有一个问题,如果1.0版本apk的用户使用微信支付且支付成功过,你换签名之后这些用户是无法支付成功的,因为微信apk记录了你上一次的签名,这个时候需要用户卸载微信重新安装,所以慎重修改签名,如果修改,可以同时修改加签的签名和包名
ios配置
LSApplicationQueriesSchemes如果有就配置,没有就新增然后再配置
12