注册应用
在微信开放平台中为开发的应用注册权限,注册成功则会返回:应用唯一标识APPID、应用密钥 AppSecret.(目前仅公司用户可申请注册权限,个人用户无法申请)
导入第三方包并引用
dependencies:
fluwx: ^${latestVersion}
import 'package:fluwx/fluwx.dart';
引用
- 先初始注册的应用
_initFluwx() async {
await Fluwx.registerWxApi(
appId: "APPID", //传入注册的应用id
doOnAndroid: true, //在android上运行
doOnIOS: true, // 在ios上运行
);
}
- 判断手机上是否安装了微信
var exist = await Fluwx.isWeChatInstalled;
if (!exist) {
Fluttertoast.showToast(
msg: "请先安装微信",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
timeInSecForIosWeb: 1,
backgroundColor: Colors.red,
textColor: Colors.white,
fontSize: 16.0);
}
- 请求 CODE
String _result = "" ,
Fluwx.weChatResponseEventHandler.listen((data) {
if (data.errCode == 0) {
Fluwx.WeChatAuthResponse wa = data;
_result += ' Code:' + wa.code;
_result += ' country:' + wa.country;
var code;
setState((){
code = wa.code;
})
printLog('code: $code');
getWeChatAccessToken(code); //通过 code 获取 access_token
}
});
- 通过 code 获取 access_token
https://api.weixin.qq.com/sns/oauth2/access_tokenappid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
void getWeChatAccessToken(code) async {
var url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=";
url += " APPID & secret = AppSecret & code=" + code;
url += "&grant_type=authorization_code";
//当第一次登录成功后点击退出再登录时,会报40163的错误
// 40163 指的是使用同一个code 多次请求获取token
//解决方法:每次请求的code都不一样,所以我们只需在传code的地方让它刷新即可
try {
Response response = await Dio().get(url);
_result = response.data.toString();
var data = jsonDecode(_result);
assert(data is Map);
var access_token = data['access_token'];
var openid = data['openid'];
getWeChatUserInfo(access_token, openid); //获取微信用户信息
} catch (e) {
printLog("getWeChatAccessToken error: $e");
}
}
- 获取微信用户信息
String _userinfo = " ";
void getWeChatUserInfo(accessToken, openId) async {
if (accessToken == null) return;
var url = "https://api.weixin.qq.com/sns/userinfo?access_token=";
url += accessToken + "&openid=" + openId.toString();
try {
Response response = await Dio().get(url);
var dataStr = response.data.toString();
_userinfo = dataStr;
_saveUserInfo(_userinfo);
var data = jsonDecode(dataStr);
headImageUrl = data["headimgurl"];
nickname = data["nickname"];
if (nickname != null) {
_startTimer(data);
}
setState(() {});
} catch (e) {
print("e>>>>>>>>$e");
}
}
apk 微信登录问题
微信登录提示:签名不对,请检查签名是否与开发平台上填写的一致