基础库
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 
 

151 lignes
5.9 KiB

  1. import 'dart:io';
  2. import 'package:flutter/cupertino.dart';
  3. import 'package:flutter_alibc/alibc_model.dart';
  4. import 'package:flutter_alibc/flutter_alibc.dart';
  5. import 'package:jdsdk/jdsdk.dart';
  6. import 'package:url_launcher/url_launcher.dart';
  7. import 'package:zhiying_comm/models/user/user_info_model.dart';
  8. import 'package:zhiying_comm/util/dialog/loading/loading.dart';
  9. import 'package:zhiying_comm/util/empty_util.dart';
  10. import 'package:zhiying_comm/util/global_config.dart';
  11. import 'package:zhiying_comm/util/log/let_log.dart';
  12. import 'package:zhiying_comm/util/net_util.dart';
  13. import 'package:zhiying_comm/util/taobao/taobao_auth.dart';
  14. import 'package:fluttertoast/fluttertoast.dart';
  15. import '../router_util.dart';
  16. class TurnChainUtil {
  17. ///
  18. /// 跳转app或者打开url进行领券
  19. /// userInfoModel: 用户登陆的带有token 与 淘宝是否授权的 model类
  20. /// provider: 商品的渠道
  21. /// data: 转链需要的请求参数
  22. ///
  23. static Future<void> openReceiveCoupon(BuildContext context, UserInfoModel userInfoModel, String provider, Map<String, dynamic> data) async {
  24. /// 1、先判断是否登陆
  25. if (EmptyUtil.isEmpty(userInfoModel) || EmptyUtil.isEmpty(userInfoModel?.token)) {
  26. RouterUtil.goLogin(context);
  27. return;
  28. }
  29. /// 2、如果是淘宝,判断是否授权
  30. if (provider == GlobalConfig.PROVIDER_TB && !userInfoModel.isTBAuth) {
  31. TaobaoAuth.auth(context);
  32. return;
  33. }
  34. /// 3、获取转链,进行跳转
  35. Map<String, dynamic> result = await getTurnChainResult(context, provider, data, isShare: false);
  36. if (!EmptyUtil.isEmpty(result)) {
  37. String openAppUrl = result['open_app_url'];
  38. String appUrl = result['app_url'];
  39. String webUrl = result['no_open_app_url'];
  40. /// 4、根据渠道进行不同的跳转
  41. switch (provider) {
  42. case GlobalConfig.PROVIDER_TB:
  43. case GlobalConfig.PROVIDER_TM:
  44. if (!EmptyUtil.isEmpty(openAppUrl)) {
  45. TradeResult tradeResult;
  46. if (Platform.isAndroid) {
  47. tradeResult = await FlutterAlibc.openByUrl(url: openAppUrl, backUrl: "alisdk://");
  48. } else if (Platform.isIOS) {
  49. tradeResult = await FlutterAlibc.openByUrl(url: openAppUrl);
  50. }
  51. Logger.debug('taobao result = ${tradeResult.errorCode} ${tradeResult.errorMessage} ');
  52. } else if (!EmptyUtil.isEmpty(webUrl)) {
  53. RouterUtil.openWebview(webUrl, context);
  54. } else {
  55. Fluttertoast.showToast(msg: '购买链接不存在');
  56. }
  57. break;
  58. case GlobalConfig.PROVIDER_JD:
  59. if (!EmptyUtil.isEmpty(openAppUrl) && !EmptyUtil.isEmpty(appUrl) && await canLaunch(appUrl)) {
  60. Jdsdk.openUrl(url: openAppUrl);
  61. } else if (!EmptyUtil.isEmpty(webUrl)) {
  62. RouterUtil.openWebview(webUrl, context);
  63. } else {
  64. Fluttertoast.showToast(msg: '购买链接不存在');
  65. }
  66. break;
  67. case GlobalConfig.PROVIDER_KL:
  68. case GlobalConfig.PROVIDER_PDD:
  69. case GlobalConfig.PROVIDER_SN:
  70. case GlobalConfig.PROVIDER_VIP:
  71. if (!EmptyUtil.isEmpty(appUrl) && await canLaunch(appUrl)) {
  72. Logger.log('打开${provider} app, url = ${appUrl}');
  73. launch(appUrl);
  74. } else if (!EmptyUtil.isEmpty(webUrl)) {
  75. Logger.log('打开${provider} webUrl, url = ${webUrl}');
  76. RouterUtil.openWebview(webUrl, context);
  77. } else {
  78. Fluttertoast.showToast(msg: '购买链接不存在');
  79. }
  80. break;
  81. }
  82. } else {
  83. Fluttertoast.showToast(msg: '购买链接不存在');
  84. }
  85. }
  86. ///
  87. /// 获取分享的转链
  88. /// userInfoModel: 用户登陆的带有token 与 淘宝是否授权的 model类
  89. /// provider: 商品的渠道
  90. /// data: 转链需要的请求参数
  91. ///
  92. /// 返回参数: 只需要获取返回结果的 open_app_url 值即可。
  93. /// 例如: Map<String, dynamic> result = await getShareTurnChain(context, _user, provider, data);
  94. /// String buyUrl = result['open_app_url']
  95. ///
  96. static Future<Map<String, dynamic>> getShareTurnChain(BuildContext context, UserInfoModel userInfoModel, String provider, Map<String, dynamic> data) async {
  97. /// 1、先判断是否登陆
  98. if (EmptyUtil.isEmpty(userInfoModel) || EmptyUtil.isEmpty(userInfoModel?.token)) {
  99. RouterUtil.goLogin(context);
  100. return null;
  101. }
  102. /// 2、如果是淘宝,判断是否授权
  103. if (provider == GlobalConfig.PROVIDER_TB && !userInfoModel.isTBAuth) {
  104. TaobaoAuth.auth(context);
  105. return null;
  106. }
  107. /// 3、获取转链的结果
  108. Map<String, dynamic> result = await getTurnChainResult(context, provider, data, isShare: true);
  109. if (!EmptyUtil.isEmpty(result) && !EmptyUtil.isEmpty(result['open_app_url'])) {
  110. return result;
  111. }
  112. Fluttertoast.showToast(msg: '购买链接不存在');
  113. return null;
  114. }
  115. ///
  116. /// 接口文档:https://www.showdoc.com.cn/1003739271891029?page_id=5760575662067820
  117. /// 根据商品id等信息,获取领券或者分享的转链接
  118. ///
  119. ///
  120. static Future<Map<String, dynamic>> getTurnChainResult(BuildContext context, String provider, Map<String, dynamic> data, {bool isShare = false}) async {
  121. try {
  122. if (!EmptyUtil.isEmpty(context) && !EmptyUtil.isEmpty(provider) && !EmptyUtil.isEmpty(data) && !EmptyUtil.isEmpty('gid')) {
  123. // 设置是否分享还是转链
  124. data['is_share'] = isShare ? '1' : '0';
  125. // 开启loading
  126. Loading.show(context);
  127. var result = await NetUtil.post('/api/v1/convert/$provider', params: data, method: NetMethod.POST);
  128. // 关闭loading
  129. Loading.dismiss();
  130. if (NetUtil.isSuccess(result) && !EmptyUtil.isEmpty(result[GlobalConfig.HTTP_RESPONSE_KEY_DATA])) {
  131. return result[GlobalConfig.HTTP_RESPONSE_KEY_DATA];
  132. }
  133. }
  134. } catch (e, s) {
  135. Logger.error(e, s);
  136. }
  137. return null;
  138. }
  139. }