微信支付宝支付

This commit is contained in:
YangYuhao 2023-07-17 16:47:44 +08:00
parent 6c5f3bfd47
commit 88bf23398b
7 changed files with 341 additions and 292 deletions

View File

@ -1,6 +1,5 @@
import 'package:cached_network_image/cached_network_image.dart'; import 'package:cached_network_image/cached_network_image.dart';
import 'package:circle_app/app/call_out/logic.dart';
import 'package:circle_app/app/circle/logic.dart'; import 'package:circle_app/app/circle/logic.dart';
import 'package:circle_app/app/circle/state.dart'; import 'package:circle_app/app/circle/state.dart';
import 'package:circle_app/app/circle/widgets/list_logic.dart'; import 'package:circle_app/app/circle/widgets/list_logic.dart';
@ -159,10 +158,12 @@ class _InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClie
void pushMsgPage(Lists bean, String cicleId) async { void pushMsgPage(Lists bean, String cicleId) async {
// if (widget.bean.is_limit) { if (widget.bean.is_limit&&widget.bean.amount>0) {
// showJoinCiclePiker(cicleId,widget.bean.amount.toString(),widget.bean.oldAmount.toString(),2); showJoinCiclePiker(cicleId,widget.bean.amount.toString(),widget.bean.oldAmount.toString(),2,(payResult){
// return; widget.bean.is_limit = false;
// } });
return;
}
var sp = await SharedPreferencesHelper.getInstance(); var sp = await SharedPreferencesHelper.getInstance();
String myUserId = sp.getMyUserId(); String myUserId = sp.getMyUserId();
@ -181,29 +182,8 @@ class _InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClie
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
TextSpan descSpan;
// widget.bean.intro = widget.bean.intro+widget.bean.intro+widget.bean.intro+widget.bean.intro+widget.bean.intro;
TextSpan span;
if (widget.bean.intro.length > 20) {
String truncatedText = widget.bean.intro.substring(0, 60)+"...";
descSpan = TextSpan(
text: truncatedText,
style: TextStyle(color: Colors.white, fontSize: 10.sp),
);
span = TextSpan(
text: '查看更多',
style: TextStyle(color: Color(0xFFFF4DF6), fontSize: 10.sp),
);
} else {
descSpan = TextSpan(
text: widget.bean.intro,
style: TextStyle(color: Colors.white, fontSize: 10.sp),
);
span = TextSpan(
text: '',
style: TextStyle(color: Color(0xFFFF4DF6), fontSize: 10.sp),
);
}
List<JoinUser> urlList = widget.bean.lastJoinUsers; List<JoinUser> urlList = widget.bean.lastJoinUsers;
List<Widget> widgets = []; List<Widget> widgets = [];
@ -272,7 +252,7 @@ class _InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClie
margin: EdgeInsets.only(bottom: 7.sp), margin: EdgeInsets.only(bottom: 7.sp),
width: Get.width, width: Get.width,
height: 30.sp, height: 30.sp,
child: HideText(text: widget.bean.intro,additionText: '查看更多',maxLines: 2,style: TextStyle(color: Colors.white, fontSize: 10.sp),additionStyle: TextStyle(color: Color(0xFFFF4DF6), fontSize: 10.sp),onTap: () { child: HideText(text: widget.bean.intro,additionText: '查看更多',maxLines: 2,style: TextStyle(color: Colors.white, fontSize: 10.sp),additionStyle: TextStyle(color: const Color(0xFFFF4DF6), fontSize: 10.sp),onTap: () {
_showTextContentDialog( _showTextContentDialog(
context, widget.bean.intro); context, widget.bean.intro);
},), },),
@ -538,11 +518,10 @@ class _InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClie
double picHeight = 0.0; double picHeight = 0.0;
int type = 0;
if (lists.album != null) { if (lists.album != null) {
if (lists.album!.isNotEmpty) { if (lists.album!.isNotEmpty) {
Album info = lists.album!.first!; Album info = lists.album!.first;
type = info.type!;
if (info.type == 1) { if (info.type == 1) {
if (lists.album!.length > 3) { if (lists.album!.length > 3) {
@ -615,7 +594,7 @@ class _InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClie
} }
if (widget.bean.is_limit) { if (widget.bean.is_limit) {
showJoinCiclePiker(widget.bean.id.toString(),widget.bean.amount.toString(),widget.bean.oldAmount.toString(),1,(payResult){ showJoinCiclePiker(widget.bean.id.toString(),widget.bean.amount.toString(),widget.bean.oldAmount.toString(),1,(payResult){
widget.bean.is_limit = false;
}); });
return; return;
} }
@ -713,7 +692,7 @@ class _InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClie
child: picHeight == 140.sp child: picHeight == 140.sp
? ClipRRect( ? ClipRRect(
borderRadius: BorderRadius.circular(6.sp), borderRadius: BorderRadius.circular(6.sp),
child: VideoItemWidget(lists.album![0]!.url!)) child: VideoItemWidget(lists.album![0].url!))
: GridView.builder( : GridView.builder(
itemCount: lists.album!.length, itemCount: lists.album!.length,
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
@ -822,12 +801,9 @@ class _InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClie
); );
double picHeight = 0.0; double picHeight = 0.0;
int type = 0;
if (lists.album != null) { if (lists.album != null) {
if (lists.album!.isNotEmpty) { if (lists.album!.isNotEmpty) {
Album info = lists.album!.first!; Album info = lists.album!.first;
type = info.type!;
if (info.type == 1) { if (info.type == 1) {
if (lists.album!.length > 3) { if (lists.album!.length > 3) {
@ -843,7 +819,7 @@ class _InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClie
List<Widget> widgets = []; List<Widget> widgets = [];
int index = 0; int index = 0;
lists!.chat!.users!.forEach((element) { lists.chat!.users!.forEach((element) {
widgets.add(Positioned( widgets.add(Positioned(
left: 12.sp * index, left: 12.sp * index,
child: GestureDetector( child: GestureDetector(
@ -911,9 +887,9 @@ class _InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClie
Get.toNamed(AppRoutes.UserInfoActivity, arguments: ""); Get.toNamed(AppRoutes.UserInfoActivity, arguments: "");
return; return;
} }
if (widget.bean.is_limit) { if (widget.bean.is_limit&&widget.bean.amount > 0) {
showJoinCiclePiker(widget.bean.id.toString(),widget.bean.amount.toString(),widget.bean.oldAmount.toString(),1,(payResult){ showJoinCiclePiker(widget.bean.id.toString(),widget.bean.amount.toString(),widget.bean.oldAmount.toString(),1,(payResult){
widget.bean.is_limit = false;
}); });
return; return;
} }
@ -931,7 +907,7 @@ class _InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClie
lists.user!.avatar!, lists.user!.avatar!,
width: 40.sp, width: 40.sp,
height: 40.sp, height: 40.sp,
fit: BoxFit.fill, fit: BoxFit.cover,
), ),
) )
], ],
@ -946,7 +922,7 @@ class _InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClie
Row( Row(
children: [ children: [
Text( Text(
lists.user!.nickname! ?? '', lists.user!.nickname!,
style: TextStyle( style: TextStyle(
color: Colors.white, color: Colors.white,
fontSize: 18.sp, fontSize: 18.sp,

View File

@ -117,7 +117,7 @@ class ReportPage extends StatelessWidget {
), ),
Positioned( Positioned(
// right: 1.sp, // right: 1.sp,
top: 160.sp, top: 150.sp,
child: Text( child: Text(
'${controller.textEditingController.text.length}/200', '${controller.textEditingController.text.length}/200',
style: TextStyle( style: TextStyle(

View File

@ -1,6 +1,6 @@
import 'dart:io';
import 'dart:math'; import 'dart:math';
import 'package:alipay_kit/alipay_kit.dart';
import 'package:circle_app/util/util.dart'; import 'package:circle_app/util/util.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -10,242 +10,251 @@ import '../../network/api.dart';
import '../../network/dio_manager.dart'; import '../../network/dio_manager.dart';
import '../../util/PaymentUtils.dart'; import '../../util/PaymentUtils.dart';
import 'open_vip_tip/logic.dart'; import 'open_vip_tip/logic.dart';
bool isZfbPrice = true; bool isZfbPrice = true;
joiinCircileTipWdiget(String cicleId,String pirce,String oldPrice,String title,MyCallback myCallback) {
return StatefulBuilder( joiinCircileTipWdiget(String cicleId, String pirce, String oldPrice,
builder:(BuildContext context, StateSetter setState) { String title, MyCallback myCallback) {
return Scaffold( return StatefulBuilder(builder: (BuildContext context, StateSetter setState) {
backgroundColor: Colors.transparent, return Scaffold(
body: Container( backgroundColor: Colors.transparent,
width: Get.width, body: Container(
height: Get.height, width: Get.width,
height: Get.height,
alignment: Alignment.center,
child: Stack(
alignment: Alignment.center, alignment: Alignment.center,
child: children: [
Stack( Container(
alignment: Alignment.center, width: 339.sp,
children: [ height: 330.sp,
Container( decoration: BoxDecoration(
width: 339.sp, image: DecorationImage(
height: 330.sp, fit: BoxFit.fill,
decoration: BoxDecoration( image: AssetImage(getCircleImage('add_tip_bg'))))),
image: DecorationImage( Positioned(
fit: BoxFit.fill, top: 5.sp,
image: AssetImage(getCircleImage('add_tip_bg'))))), right: 12.sp,
Positioned( child: GestureDetector(
top: 5.sp, onTap: () {
right: 12.sp, Get.back();
child: GestureDetector( },
onTap: () { child: Image.asset(
Get.back(); getCircleImage('close'),
}, width: 24.sp,
child: Image.asset( ),
getCircleImage('close'), )),
width: 24.sp, Positioned(
), top: 24.sp,
)), child: Text(
Positioned( title,
top: 24.sp, style: TextStyle(color: Colors.white, fontSize: 16.sp),
child: Text( )),
title, Positioned(
style: TextStyle(color: Colors.white, fontSize: 16.sp), left: 17.sp,
)), top: 64.sp,
Positioned( child: Text(
left: 17.sp, '为什么要解锁圈子?',
top: 64.sp, style: TextStyle(color: Colors.white, fontSize: 16.sp),
child: Text( )),
'为什么要解锁圈子?', Positioned(
style: TextStyle(color: Colors.white, fontSize: 16.sp), top: 98.sp,
)),
Positioned(
top: 98.sp,
child: Container(
width: 339.sp,
padding: EdgeInsets.only(left: 17.sp, right: 17.sp),
child: Text(
'为打造纯净的社交环境,更好地服务大家,基于以下几方面考虑:1、平台升级为全天24小时人工审核保证用户真实避免骗子、酒托、虚假人士等扰乱平台 ;2、杜绝未入圈用户随意骚扰或影响已入圈的;3、谢绝只会白嫖的猎奇人士。',
style: TextStyle(
color: Color.fromRGBO(247, 250, 250, 0.8),
fontSize: 12.sp)),
)),
Positioned(
bottom: 108.sp,
child: Container( child: Container(
margin: EdgeInsets.only(top: 24.0.sp), width: 339.sp,
child: Row( padding: EdgeInsets.only(left: 17.sp, right: 17.sp),
mainAxisAlignment: MainAxisAlignment.spaceBetween, child: Text(
children: [ '为打造纯净的社交环境,更好地服务大家,基于以下几方面考虑:1、平台升级为全天24小时人工审核保证用户真实避免骗子、酒托、虚假人士等扰乱平台 ;2、杜绝未入圈用户随意骚扰或影响已入圈的;3、谢绝只会白嫖的猎奇人士。',
GestureDetector( style: TextStyle(
onTap: () { color: Color.fromRGBO(247, 250, 250, 0.8),
setState(() { fontSize: 12.sp)),
isZfbPrice = true; )),
}); Platform.isIOS
}, ? Container()
child: Row( : Positioned(
children: [ bottom: 108.sp,
Image.asset( child: Container(
isZfbPrice margin: EdgeInsets.only(top: 24.0.sp),
? getMineImage("icon_pay_select") child: Row(
: getMineImage("icon_pay_is_no_select"), mainAxisAlignment: MainAxisAlignment.spaceBetween,
width: 20.0.sp, children: [
height: 20.0.sp, GestureDetector(
onTap: () {
setState(() {
isZfbPrice = true;
});
},
child: Row(
children: [
Image.asset(
isZfbPrice
? getMineImage("icon_pay_select")
: getMineImage("icon_pay_is_no_select"),
width: 20.0.sp,
height: 20.0.sp,
),
SizedBox(width: 8.0.sp),
Image.asset(
getMineImage('icon_cooperate_ali'),
width: 20.0.sp,
height: 20.0.sp,
),
SizedBox(width: 4.0.sp),
Text(
'支付宝支付',
style: TextStyle(
color: Color(0xFFF7FAFA),
fontSize: 14.0.sp,
),
),
SizedBox(width: 4.0.sp),
Image.asset(
getMineImage('icon_recommend_pay_way'),
width: 32.0.sp,
height: 16.0.sp,
),
],
), ),
SizedBox(width: 8.0.sp), ),
Image.asset( SizedBox(width: 24.0.sp),
getMineImage('icon_cooperate_ali'), GestureDetector(
width: 20.0.sp, onTap: () {
height: 20.0.sp, setState(() {
isZfbPrice = false;
});
},
child: Row(
children: [
Image.asset(
!isZfbPrice
? getMineImage("icon_pay_select")
: getMineImage("icon_pay_is_no_select"),
width: 20.0.sp,
height: 20.0.sp,
),
SizedBox(width: 8.0.sp),
Image.asset(
getMineImage('icon_cooperate_wx'),
width: 20.0.sp,
height: 20.0.sp,
),
SizedBox(width: 4.0.sp),
Text(
'微信支付',
style: TextStyle(
color: Color(0xFFF7FAFA),
fontSize: 14.0.sp,
),
),
],
), ),
SizedBox(width: 4.0.sp), ),
Text( ],
'支付宝支付',
style: TextStyle(
color: Color(0xFFF7FAFA),
fontSize: 14.0.sp,
),
),
SizedBox(width: 4.0.sp),
Image.asset(
getMineImage('icon_recommend_pay_way'),
width: 32.0.sp,
height: 16.0.sp,
),
],
),
), ),
SizedBox(width: 24.0.sp), ),
GestureDetector( ),
onTap: () { Positioned(
setState(() { bottom: 18.sp,
isZfbPrice = false; child: GestureDetector(
}); behavior: HitTestBehavior.opaque,
}, onTap: () {
child: Row( if (Platform.isIOS) {
children: [ } else {
Image.asset( unlockingPayment(cicleId, myCallback);
!isZfbPrice }
? getMineImage("icon_pay_select") },
: getMineImage("icon_pay_is_no_select"), child: Container(
width: 20.0.sp, width: 168.sp,
height: 20.0.sp, height: 42.sp,
), alignment: Alignment.center,
SizedBox(width: 8.0.sp), decoration: BoxDecoration(
Image.asset( borderRadius: BorderRadius.circular(21.sp),
getMineImage('icon_cooperate_wx'), gradient: const LinearGradient(
width: 20.0.sp, begin: Alignment.centerLeft,
height: 20.0.sp, end: Alignment.centerRight,
), colors: [Color(0xff0AFCFF), Color(0xffD739EA)])),
SizedBox(width: 4.0.sp), child: Text(
Text( '立即解锁',
'微信支付', style: TextStyle(color: Colors.white, fontSize: 16.sp),
style: TextStyle( ),
color: Color(0xFFF7FAFA), ),
fontSize: 14.0.sp, )),
), Positioned(
), bottom: 72.sp,
], child: Container(
child: Row(
children: [
Text(
'$pirce',
style: TextStyle(
color: Color(0xffE845FF),
fontSize: 16.sp,
fontWeight: FontWeight.w600),
),
SizedBox(
width: 2.sp,
),
Text(
'(原价$oldPrice)',
style: TextStyle(
color: Colors.white70,
fontSize: 16.sp,
fontWeight: FontWeight.w400,
decoration: TextDecoration.lineThrough,
decorationColor: Colors.white70,
), ),
), ),
], ],
), ),
), ))
), ],
Positioned(
bottom: 18.sp,
child: GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: (){
unlockingPayment(myCallback);
},
child: Container(
width: 168.sp,
height: 42.sp,
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(21.sp),
gradient: const LinearGradient(
begin: Alignment.centerLeft,
end: Alignment.centerRight,
colors: [Color(0xff0AFCFF), Color(0xffD739EA)])),
child: Text(
'立即解锁',
style: TextStyle(color: Colors.white, fontSize: 16.sp),
),
),
)),
Positioned(
bottom: 72.sp,
child: Container(
child: Row(
children: [
Text(
'$pirce',
style: TextStyle(
color: Color(0xffE845FF),
fontSize: 16.sp,
fontWeight: FontWeight.w600),
),
SizedBox(
width: 2.sp,
),
Text(
'(原价$oldPrice)',
style: TextStyle(
color: Colors.white70,
fontSize: 16.sp,
fontWeight: FontWeight.w400,
decoration: TextDecoration.lineThrough,
decorationColor: Colors.white70,
),
),
],
),
))
],
),
), ),
),
); );
}); });
} }
unlockingPayment(MyCallback myCallback)async{
if (isZfbPrice) {
var data = await DioManager.instance.post(url: Api.postAliPayOrder, params: {
//"product_id": priceBean[index].id,
"type": 1});
var bean = BaseResponse<PayUrlBean>.fromJson(data, (data) => PayUrlBean.fromJson(data));
if(bean.isSuccess()){
var data = await AlipayKitPlatform.instance.pay(
orderInfo: bean.data.payUrl,
isShowLoading :true
);
}else {
showToast(bean.msg);
}
} else{ unlockingPayment(String cicleId, MyCallback myCallback) async {
initWxApi(); if (isZfbPrice) {
var data = await DioManager.instance.post(url: Api.postWxOrder, params: { var data = await DioManager.instance.post(
// "product_id": priceBean[index].id, url: Api.postAliPayOrder, params: {"product_id": cicleId, "type": 1});
"type": 1}); var bean = BaseResponse<PayUrlBean>.fromJson(
var bean = BaseResponse<PaymentData>.fromJson(data, (data) => PaymentData.fromJson(data)); data, (data) => PayUrlBean.fromJson(data));
if(bean.isSuccess()){ if (bean.isSuccess()) {
openWxPay(bean.data); openAliPay(bean.data.payUrl, (isSuccess, errorMsg) {
}else { if (isSuccess) {
showToast(bean.msg); myCallback(true);
} }
} });
// showToast(data.toString());
} } else {
showToast(bean.msg);
}
} else {
var data = await DioManager.instance
.post(url: Api.postWxOrder, params: {"product_id": cicleId, "type": 1});
var bean = BaseResponse<PaymentData>.fromJson(
data, (data) => PaymentData.fromJson(data));
if (bean.isSuccess()) {
openWxPay(bean.data, (bool isSuccess, String? errorMessage) {
if (isSuccess) {
myCallback(true);
} else {
// errorMessage null
}
});
} else {
showToast(bean.msg);
}
}
}
typedef void MyCallback(bool payResult); typedef void MyCallback(bool payResult);
showJoinCiclePiker(String cicleId,String pirce,String oldPrice,int type,MyCallback payResult) { showJoinCiclePiker(String cicleId, String pirce, String oldPrice, int type,
MyCallback payResult) {
String title = ['解锁圈子才能发布喊话','解锁圈子才能查看主页','解锁圈子才能主动私聊'][type]; String title = ['解锁圈子才能发布喊话', '解锁圈子才能查看主页', '解锁圈子才能主动私聊'][type];
return Get.bottomSheet( return Get.bottomSheet(
joiinCircileTipWdiget(cicleId,pirce,oldPrice,title,payResult), joiinCircileTipWdiget(cicleId, pirce, oldPrice, title, payResult),
isScrollControlled: true, isScrollControlled: true,
enableDrag: false enableDrag: false);
); }
}

View File

@ -1,6 +1,4 @@
import 'dart:convert';
import 'package:alipay_kit/alipay_kit.dart';
import 'package:circle_app/util/util.dart'; import 'package:circle_app/util/util.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@ -8,7 +6,6 @@ import '../../../network/api.dart';
import '../../../network/dio_manager.dart'; import '../../../network/dio_manager.dart';
import '../../../util/PaymentUtils.dart'; import '../../../util/PaymentUtils.dart';
import 'state.dart'; import 'state.dart';
import 'package:fluwx/fluwx.dart' as fluwx;
class Open_vip_tipLogic extends GetxController { class Open_vip_tipLogic extends GetxController {
List<PriceBean> priceBean = []; List<PriceBean> priceBean = [];
@ -33,20 +30,28 @@ class Open_vip_tipLogic extends GetxController {
var data = await DioManager.instance.post(url: Api.postAliPayOrder, params: {"product_id": priceBean[index].id, "type": 2}); var data = await DioManager.instance.post(url: Api.postAliPayOrder, params: {"product_id": priceBean[index].id, "type": 2});
var bean = BaseResponse<PayUrlBean>.fromJson(data, (data) => PayUrlBean.fromJson(data)); var bean = BaseResponse<PayUrlBean>.fromJson(data, (data) => PayUrlBean.fromJson(data));
if(bean.isSuccess()){ if(bean.isSuccess()){
AlipayKitPlatform.instance.pay( openAliPay(bean.data.payUrl,(isSuccess,errorMsg){
orderInfo: bean.data.payUrl, if (isSuccess) {
isShowLoading :true //
); } else {
// errorMessage null
}
});
}else { }else {
showToast(bean.msg); showToast(bean.msg);
} }
} else{ } else{
initWxApi();
var data = await DioManager.instance.post(url: Api.postWxOrder, params: {"product_id": priceBean[index].id, "type": 2}); var data = await DioManager.instance.post(url: Api.postWxOrder, params: {"product_id": priceBean[index].id, "type": 2});
var bean = BaseResponse<PaymentData>.fromJson(data, (data) => PaymentData.fromJson(data)); var bean = BaseResponse<PaymentData>.fromJson(data, (data) => PaymentData.fromJson(data));
if(bean.isSuccess()){ if(bean.isSuccess()){
openWxPay(bean.data); openWxPay(bean.data,(bool isSuccess, String? errorMessage) {
if (isSuccess) {
//
} else {
// errorMessage null
}
});
}else { }else {
showToast(bean.msg); showToast(bean.msg);
} }
@ -55,13 +60,6 @@ class Open_vip_tipLogic extends GetxController {
} }
//
void initWxApi() {
fluwx.registerWxApi(
appId: "wx6c6f4c89465dac4b",
universalLink: "dcc5bd5012a417eb585684700fbd1307",
);
}

View File

@ -1,3 +1,5 @@
import 'dart:io';
import 'package:circle_app/util/util.dart'; import 'package:circle_app/util/util.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -117,7 +119,7 @@ class Open_vip_tipPage extends StatelessWidget {
controller, controller.index == 2, 2), controller, controller.index == 2, 2),
], ],
))), ))),
Positioned( Platform.isIOS ? Container(): Positioned(
bottom: 108.sp, bottom: 108.sp,
child: Container( child: Container(
margin: EdgeInsets.only(top: 24.0.sp), margin: EdgeInsets.only(top: 24.0.sp),
@ -200,7 +202,12 @@ class Open_vip_tipPage extends StatelessWidget {
child: GestureDetector( child: GestureDetector(
behavior: HitTestBehavior.opaque, behavior: HitTestBehavior.opaque,
onTap: (){ onTap: (){
controller.startPayment(); if( Platform.isIOS){
}else{
controller.startPayment();
}
}, },
child: Container( child: Container(
width: 168.sp, width: 168.sp,

View File

@ -2,6 +2,7 @@
import 'package:circle_app/app/splash/binding.dart'; import 'package:circle_app/app/splash/binding.dart';
import 'package:circle_app/router/app_pages.dart'; import 'package:circle_app/router/app_pages.dart';
import 'package:circle_app/router/app_routers.dart'; import 'package:circle_app/router/app_routers.dart';
import 'package:circle_app/util/PaymentUtils.dart';
import 'package:circle_app/util/util.dart'; import 'package:circle_app/util/util.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -60,6 +61,7 @@ class _MyAppState extends State<MyApp> {
@override @override
void initState() { void initState() {
initIM(); initIM();
initWxApi();
loadBgImage(); loadBgImage();
super.initState(); super.initState();
} }

View File

@ -1,17 +1,35 @@
import 'dart:async';
import 'package:alipay_kit/alipay_kit.dart';
import 'package:circle_app/util/util.dart'; import 'package:circle_app/util/util.dart';
import '../common/Widgets/open_vip_tip/logic.dart'; import '../common/Widgets/open_vip_tip/logic.dart';
import 'package:fluwx/fluwx.dart' as fluwx; import 'package:fluwx/fluwx.dart' as fluwx;
//
void initWxApi() {
fluwx.registerWxApi(
appId: "wx6c6f4c89465dac4b",
universalLink: "dcc5bd5012a417eb585684700fbd1307",
);
}
// //
Future<void> openWxPay(PaymentData data) async { typedef WxPayCallback = void Function(bool isSuccess, String? errorMessage);
//
Future<void> openWxPay(PaymentData data, WxPayCallback callback) async {
//
bool isInstalled = await fluwx.isWeChatInstalled; bool isInstalled = await fluwx.isWeChatInstalled;
if (!isInstalled) { if (!isInstalled) {
showToast("请先安装微信"); showToast("请先安装微信");
callback(false, "请先安装微信");
return; return;
} }
//
//
fluwx.payWithWeChat( fluwx.payWithWeChat(
appId: data.appId, appId: data.appId,
partnerId: data.mchId, partnerId: data.mchId,
@ -21,12 +39,51 @@ Future<void> openWxPay(PaymentData data) async {
timeStamp: int.parse(data.timestamp), timeStamp: int.parse(data.timestamp),
sign: data.sign, sign: data.sign,
); );
//
//
fluwx.weChatResponseEventHandler.listen((event) { fluwx.weChatResponseEventHandler.listen((event) {
if(event.isSuccessful) { if (event.isSuccessful) {
showToast("微信支付成功"); showToast("微信支付成功");
callback(true, null);
} else { } else {
showToast(event.errStr??"微信支付成功"); showToast(event.errStr ?? "微信支付失败");
callback(false, event.errStr);
} }
}); });
} }
late final StreamSubscription<AlipayResp> _paySubs;
///
/// 9000 result有值
/// 8000
/// 4000
/// 5000
/// 6001
/// 6002
void _listenPay(AlipayResp resp) {
final String content = 'pay: ${resp.resultStatus} - ${resp.result}';
if(resp.resultStatus == 9000){
callback(true,resp.result);
}else{
callback(false,resp.result);
}
print(content );
}
late WxPayCallback callback ;
openAliPay(String payUrl,WxPayCallback myCallback)async{
callback = myCallback;
bool isInstalled =await AlipayKitPlatform.instance.isInstalled();
if (!isInstalled) {
showToast("请先安装支付宝");
return;
}
if(null==_paySubs){
_paySubs = AlipayKitPlatform.instance.payResp().listen(_listenPay);
}
var data = await AlipayKitPlatform.instance.pay(
orderInfo: payUrl,
isShowLoading :true
);
}