|
- import 'dart:io';
-
- import 'package:flutter/cupertino.dart';
- import 'package:flutter_alibc/alibc_model.dart';
- import 'package:flutter_alibc/flutter_alibc.dart';
- import 'package:jdsdk/jdsdk.dart';
- import 'package:url_launcher/url_launcher.dart';
- import 'package:zhiying_comm/models/user/user_info_model.dart';
- import 'package:zhiying_comm/util/dialog/loading/loading.dart';
- import 'package:zhiying_comm/util/empty_util.dart';
- import 'package:zhiying_comm/util/global_config.dart';
- import 'package:zhiying_comm/util/log/let_log.dart';
- import 'package:zhiying_comm/util/net_util.dart';
- import 'package:zhiying_comm/util/taobao/taobao_auth.dart';
- import 'package:fluttertoast/fluttertoast.dart';
- import '../router_util.dart';
-
- class TurnChainUtil {
- ///
- /// 跳转app或者打开url进行领券
- /// userInfoModel: 用户登陆的带有token 与 淘宝是否授权的 model类
- /// provider: 商品的渠道
- /// data: 转链需要的请求参数
- ///
- static Future<void> openReceiveCoupon(BuildContext context, UserInfoModel userInfoModel, String provider, Map<String, dynamic> data) async {
- /// 1、先判断是否登陆
- if (EmptyUtil.isEmpty(userInfoModel) || EmptyUtil.isEmpty(userInfoModel?.token)) {
- RouterUtil.goLogin(context);
- return;
- }
-
- /// 2、如果是淘宝,判断是否授权
- if (provider == GlobalConfig.PROVIDER_TB && !userInfoModel.isTBAuth) {
- TaobaoAuth.auth(context);
- return;
- }
-
- /// 3、获取转链,进行跳转
- Map<String, dynamic> result = await getTurnChainResult(context, provider, data, isShare: false);
- if (!EmptyUtil.isEmpty(result)) {
- String openAppUrl = result['open_app_url'];
- String appUrl = result['app_url'];
- String webUrl = result['no_open_app_url'];
-
- /// 4、根据渠道进行不同的跳转
- switch (provider) {
- case GlobalConfig.PROVIDER_TB:
- case GlobalConfig.PROVIDER_TM:
- if (!EmptyUtil.isEmpty(openAppUrl)) {
- TradeResult tradeResult;
- if (Platform.isAndroid) {
- tradeResult = await FlutterAlibc.openByUrl(url: openAppUrl, backUrl: "alisdk://");
- } else if (Platform.isIOS) {
- tradeResult = await FlutterAlibc.openByUrl(url: openAppUrl);
- }
- Logger.debug('taobao result = ${tradeResult.errorCode} ${tradeResult.errorMessage} ');
- } else if (!EmptyUtil.isEmpty(webUrl)) {
- RouterUtil.openWebview(webUrl, context);
- } else {
- Fluttertoast.showToast(msg: '购买链接不存在');
- }
-
- break;
- case GlobalConfig.PROVIDER_JD:
- if (!EmptyUtil.isEmpty(openAppUrl) && !EmptyUtil.isEmpty(appUrl) && await canLaunch(appUrl)) {
- Jdsdk.openUrl(url: openAppUrl);
- } else if (!EmptyUtil.isEmpty(webUrl)) {
- RouterUtil.openWebview(webUrl, context);
- } else {
- Fluttertoast.showToast(msg: '购买链接不存在');
- }
- break;
- case GlobalConfig.PROVIDER_KL:
- case GlobalConfig.PROVIDER_PDD:
- case GlobalConfig.PROVIDER_SN:
- case GlobalConfig.PROVIDER_VIP:
- if (!EmptyUtil.isEmpty(appUrl) && await canLaunch(appUrl)) {
- Logger.log('打开${provider} app, url = ${appUrl}');
- launch(appUrl);
- } else if (!EmptyUtil.isEmpty(webUrl)) {
- Logger.log('打开${provider} webUrl, url = ${webUrl}');
- RouterUtil.openWebview(webUrl, context);
- } else {
- Fluttertoast.showToast(msg: '购买链接不存在');
- }
- break;
- }
- } else {
- Fluttertoast.showToast(msg: '购买链接不存在');
- }
- }
-
- ///
- /// 获取分享的转链
- /// userInfoModel: 用户登陆的带有token 与 淘宝是否授权的 model类
- /// provider: 商品的渠道
- /// data: 转链需要的请求参数
- ///
- /// 返回参数: 只需要获取返回结果的 open_app_url 值即可。
- /// 例如: Map<String, dynamic> result = await getShareTurnChain(context, _user, provider, data);
- /// String buyUrl = result['open_app_url']
- ///
- static Future<Map<String, dynamic>> getShareTurnChain(BuildContext context, UserInfoModel userInfoModel, String provider, Map<String, dynamic> data) async {
- /// 1、先判断是否登陆
- if (EmptyUtil.isEmpty(userInfoModel) || EmptyUtil.isEmpty(userInfoModel?.token)) {
- RouterUtil.goLogin(context);
- return null;
- }
-
- /// 2、如果是淘宝,判断是否授权
- if (provider == GlobalConfig.PROVIDER_TB && !userInfoModel.isTBAuth) {
- TaobaoAuth.auth(context);
- return null;
- }
-
- /// 3、获取转链的结果
- Map<String, dynamic> result = await getTurnChainResult(context, provider, data, isShare: true);
- if (!EmptyUtil.isEmpty(result) && !EmptyUtil.isEmpty(result['open_app_url'])) {
- return result;
- }
- Fluttertoast.showToast(msg: '购买链接不存在');
- return null;
- }
-
- ///
- /// 接口文档:https://www.showdoc.com.cn/1003739271891029?page_id=5760575662067820
- /// 根据商品id等信息,获取领券或者分享的转链接
- ///
- ///
- static Future<Map<String, dynamic>> getTurnChainResult(BuildContext context, String provider, Map<String, dynamic> data, {bool isShare = false}) async {
- try {
- if (!EmptyUtil.isEmpty(context) && !EmptyUtil.isEmpty(provider) && !EmptyUtil.isEmpty(data) && !EmptyUtil.isEmpty('gid')) {
- // 设置是否分享还是转链
- data['is_share'] = isShare ? '1' : '0';
-
- // 开启loading
- Loading.show(context);
- var result = await NetUtil.post('/api/v1/convert/$provider', params: data, method: NetMethod.POST);
- // 关闭loading
- Loading.dismiss();
- if (NetUtil.isSuccess(result) && !EmptyUtil.isEmpty(result[GlobalConfig.HTTP_RESPONSE_KEY_DATA])) {
- return result[GlobalConfig.HTTP_RESPONSE_KEY_DATA];
- }
- }
- } catch (e, s) {
- Logger.error(e, s);
- }
- return null;
- }
- }
|