From 06f6a7040d381b2eec5706583406a80f49406020 Mon Sep 17 00:00:00 2001 From: laiiihz Date: Mon, 14 Dec 2020 15:03:45 +0800 Subject: [PATCH 1/2] add union pay support --- ios/Podfile.lock | 8 +++++++- ios/Runner.xcodeproj/project.pbxproj | 19 +++++++++---------- pubspec.lock | 7 +++++++ pubspec.yaml | 2 ++ 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index e5a8d70..4d1c6a0 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -101,6 +101,8 @@ PODS: - flutter_txugcupload (0.0.1): - AFNetworking - Flutter + - flutter_union_pay (0.0.1): + - Flutter - fluwx (0.0.1): - Flutter - mob_sharesdk/ShareSDKPlatforms/WeChatFull @@ -265,6 +267,7 @@ DEPENDENCIES: - flutter_image_compress (from `.symlinks/plugins/flutter_image_compress/ios`) - flutter_qr_reader (from `.symlinks/plugins/flutter_qr_reader/ios`) - flutter_txugcupload (from `.symlinks/plugins/flutter_txugcupload/ios`) + - flutter_union_pay (from `.symlinks/plugins/flutter_union_pay/ios`) - fluwx (from `.symlinks/plugins/fluwx/ios`) - foundation_fluttify (from `.symlinks/plugins/foundation_fluttify/ios`) - image_cropper (from `.symlinks/plugins/image_cropper/ios`) @@ -341,6 +344,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/flutter_qr_reader/ios" flutter_txugcupload: :path: ".symlinks/plugins/flutter_txugcupload/ios" + flutter_union_pay: + :path: ".symlinks/plugins/flutter_union_pay/ios" fluwx: :path: ".symlinks/plugins/fluwx/ios" foundation_fluttify: @@ -407,6 +412,7 @@ SPEC CHECKSUMS: flutter_image_compress: f69d0e0e078ce52b4810695593bc861ee319ae7d flutter_qr_reader: 1b4faf9032e9ddc738107fd3dc067d29bd5cc67d flutter_txugcupload: fd4f7a2a99e5fe30e608bf6f4acf0e7408339816 + flutter_union_pay: 47a7bf5a4e987745d4378a8b9fb522d0a434793f fluwx: 13b180563982bf3149472d650e01fa0312236c3d foundation_fluttify: 0c45145e3fad1fb99188e4979daed5b24cd9b278 HandyJSON: 9e4e236f5d2dbefad5155a77417bbea438201c03 @@ -446,4 +452,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 92b158b51b335be17f029808df79886222d2ae9c -COCOAPODS: 1.9.1 +COCOAPODS: 1.9.3 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 3113013..8cbcfd3 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -172,7 +172,6 @@ 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1140; - ProvisioningStyle = Manual; SystemCapabilities = { com.apple.Push = { enabled = 1; @@ -393,8 +392,8 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CODE_SIGN_IDENTITY = "iPhone Distribution"; - CODE_SIGN_STYLE = Manual; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 145; DEVELOPMENT_TEAM = HV8WM8C68W; ENABLE_BITCODE = NO; @@ -415,7 +414,7 @@ MARKETING_VERSION = 1.1.4; PRODUCT_BUNDLE_IDENTIFIER = com.reecook.ios; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = recook_appstore; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; @@ -530,8 +529,8 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CODE_SIGN_IDENTITY = "iPhone Distribution"; - CODE_SIGN_STYLE = Manual; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 145; DEVELOPMENT_TEAM = HV8WM8C68W; ENABLE_BITCODE = NO; @@ -552,7 +551,7 @@ MARKETING_VERSION = 1.1.4; PRODUCT_BUNDLE_IDENTIFIER = com.reecook.ios; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = recook_appstore; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -568,8 +567,8 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CODE_SIGN_IDENTITY = "iPhone Distribution"; - CODE_SIGN_STYLE = Manual; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 145; DEVELOPMENT_TEAM = HV8WM8C68W; ENABLE_BITCODE = NO; @@ -590,7 +589,7 @@ MARKETING_VERSION = 1.1.4; PRODUCT_BUNDLE_IDENTIFIER = com.reecook.ios; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = recook_appstore; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; diff --git a/pubspec.lock b/pubspec.lock index 59c03b9..032fa74 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -480,6 +480,13 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "0.0.2" + flutter_union_pay: + dependency: "direct main" + description: + name: flutter_union_pay + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.0.1" flutter_web_plugins: dependency: transitive description: flutter diff --git a/pubspec.yaml b/pubspec.yaml index ee305b3..239c9e9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -210,6 +210,8 @@ dependencies: dropdown_search: ^0.4.5 + flutter_union_pay : ^0.0.1 + dev_dependencies: flutter_test: sdk: flutter From 346522f2b196c655857d72b9eab5306a4549838f Mon Sep 17 00:00:00 2001 From: laiiihz Date: Mon, 14 Dec 2020 17:41:29 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=91=E9=97=AA?= =?UTF-8?q?=E4=BB=98=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/build.gradle | 2 +- assets/union_pay.png | Bin 0 -> 2626 bytes ios/Runner/Info.plist | 10 ++++ .../home/classify/order_prepay_page.dart | 45 +++++++++++++++++- 4 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 assets/union_pay.png diff --git a/android/app/build.gradle b/android/app/build.gradle index 61e6f0e..c3d5466 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -61,7 +61,7 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.akuhome.recook" - minSdkVersion 21 + minSdkVersion 23 targetSdkVersion 28 versionCode flutterVersionCode.toInteger() versionName flutterVersionName diff --git a/assets/union_pay.png b/assets/union_pay.png new file mode 100644 index 0000000000000000000000000000000000000000..3b4d9a2498264c69bb018fcf5be9982f85f61191 GIT binary patch literal 2626 zcmV-I3cdA-P)A6O75>hfnP)qQdJ>PDaZpvKoAM(ywwgr)ZQ_8cBB)dc!K#Zoh%Lljbi*djf(3FU zj|E#~d&7oB9azv+Yl{jts2&Rm!~(@$AWxeynW;@Po}YKnx%a-A_vY`tH#2S>lebCa zIrqMEzI*QZe}oWEC6&I$;8}pCz?cMKGQ_ekfP}LE6#&kHoHhHwgKQ8J)QzA#mVOJs z!pRjlKs?5d@Ne(u);dwP1)w}WJ_WW`)QO*phqJXR-54q41Q6fT0zf5|o?-C203}a_ z>~$fyK%g6md~U-lmk$6fJU%#Gg14ObbuS2Y0F2syaQaTZ`8c^ytJ1W49U1_n&TpNb zJ0GOOoVD{GPYaa-pgfkI17Rg-*{S-Sans(Hop-b;O8j z(^MXt$bk4(uRw-hN812j3Qymbau>j}A@(Q&7!9OjTBdR;Eq?J@AaP#=v~B12ri`tb z3$c}i+D(GecB1-drW~_ph^%+J?UAUK&Q=nMNpNf{;9Z+k9!qz>|AaOBK`so_^>;l= zrYB=@NF1(Dfw7aQm8PjsD1;DRk(9^Nt6)edF1A_;FYC*xiFtsRy6t1`dT%+c7>v*x6WpxTV*Z>t7a zxehI%t-Qw0=VlB5qTOw@sUb};08u1wPrGa9bCVH_?WPD|=+|B0b)XhoXLjZV826Ne z*fZLAzZ2c(0f1K^Uzkmxdk#2Dz-2BJHYM`8P1(+;k`TS<(TuM7N_ZOpbk_jF8ZqR~MSdK1 zlI9M#(Ex4KDzTA;MD5XnGHwl{=L4YJ2+@64qgKUKEKy5>V{*@ZE^lA}FgrJf_CHyV zEWKG^JdD@?_fE@6HY~ctAmCBg$SRl2l(qNwl**RJ(kmdi9>@c@v4nm8b2AQWT-%~3LNXDFXr=$ba0 z>`Dh96IoB(-_Z?ruq~b9hR*v)@sm_gq`b$#H9%r(9fqdG{nTAls{r)2o!`s&?l%w> zfKK$G_Zct%T(I*WpA})nUw88e1S$vsP0?3q#?9V60-&-@DSQ?Z`Mp`Ki9xwQ$SXjA zuaFqz7X5*ZELm+j|HA$kUD|- zqrz6qwEW#i)UfC#nUd1Hzc0~c9|jgIK)GyIE?5j|a9<-N06}6uzP~>KAdI1Se9t$S z^Zqn|Y1vm#B&;>6I9?kdf9E$sHeEK^++_cj1D2 z+O;Y!#^R6)jw*!-z;5A0(>T{abWdvxb3rAd*2vpl3vTh}+r5keEZWL#_)Js}(I0L3xBHWbxKxo8vNqoYp zKpIZF+G$bG07!m7IxN;1n=~0XzTj|eRjz^ju1<`&pfp3#(z;2MHue9NCP>V1O_j3a z!|RX&jIT{c+sw5Ei>!iMWD&s~V1{%K&{s>ZX8z0=LHr@rRK`CEx*9`#M0^nV)iy$QJsD2xpJ&D`sI5f*8?id{_!2 zlFTGYT%fp0{d59I_4DeF#1<-?rUHSp&GUUxU~8+z{ak^5Uw#tSM>c{df$2f=@C1M- zS3sA{dvb$ORguq~d#YmD?*n+zU3*~J2UpVH`}ZLwzUtkt@U7TioG;;u-ymY4bT@M+ z>U+DOLIf&mMj|UIXFFP0ZgcEoOR}Q|JVO z7XYdCKP#1(py;XB6R4!plEV7BN3uX)#8nRtC`&l>S*z~KwlhvhWA+_d*jX)$v#%KL(7 zJzXl96V#KUZU;DMan#=#uqvsvw5^}2t2)Se?!piM%T20YxN2=V!{h@+V*Ao!CeoN* z5RdiY3z-yc^xzsJ(b6pi#wpbHYm4Tw>B8NyaWU7g~bj^7R&o8Zpo%NAJ%txGA&o#{Vr zA)@Rr;Vp4&RDa~H+Hh_+y2$LzbsG8Y`tkJ1?hgdQqdGutBcu~`R{*?=lt!3tukOd4 kv_63zlXLr&VTZi`2lpG+&V36$NB{r;07*qoM6N<$f?)U-XaE2J literal 0 HcmV?d00001 diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 17b10c4..d99f9c5 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -45,6 +45,16 @@ recookalipay + + CFBundleTypeRole + Editor + CFBundleURLName + unionPay + CFBundleURLSchemes + + RecookUnionPay + + CFBundleTypeRole Editor diff --git a/lib/pages/home/classify/order_prepay_page.dart b/lib/pages/home/classify/order_prepay_page.dart index bf5ce39..6b303a2 100644 --- a/lib/pages/home/classify/order_prepay_page.dart +++ b/lib/pages/home/classify/order_prepay_page.dart @@ -7,11 +7,12 @@ * ==================================================== */ -import 'dart:io'; - +import 'package:common_utils/common_utils.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:flutter_union_pay/flutter_union_pay.dart'; import 'package:recook/base/base_store_state.dart'; +import 'package:recook/manager/http_manager.dart'; import 'package:recook/manager/user_manager.dart'; import 'package:recook/models/PayInfoModel.dart'; import 'package:recook/models/alipay_order_model.dart'; @@ -29,6 +30,7 @@ import 'package:recook/widgets/custom_app_bar.dart'; import 'package:recook/constants/header.dart'; import 'package:recook/widgets/custom_image_button.dart'; import 'package:recook/widgets/keyboard/bottom_keyboard_widget.dart'; +import 'package:recook/widgets/toast.dart'; class OrderPrepayPage extends StatefulWidget { final Map arguments; @@ -69,6 +71,19 @@ class _OrderPrepayPageState extends BaseStoreState @override void initState() { super.initState(); + FlutterUnionPay.listen((result) { + switch (result.status) { + case PaymentStatus.CANCEL: + Toast.showError('银联取消支付'); + break; + case PaymentStatus.SUCCESS: + Toast.showSuccess('支付成功'); + break; + case PaymentStatus.FAIL: + Toast.showError('银联支付失败'); + break; + } + }); UserManager.instance.setPassword.addListener(_setPassword); WidgetsBinding.instance.addObserver(this); _presenter = OrderPresenterImpl(); @@ -205,6 +220,13 @@ class _OrderPrepayPageState extends BaseStoreState color: Color.fromARGB(255, 17, 142, 228), ), 2), + _payTile( + "云闪付支付", + Image.asset( + R.ASSETS_UNION_PAY_PNG, + height: rSize(30), + ), + 3), Container( margin: EdgeInsets.symmetric(horizontal: rSize(40), vertical: rSize(150)), @@ -316,6 +338,9 @@ class _OrderPrepayPageState extends BaseStoreState case 2: _aliPay(context); break; + case 3: + _unionPay(context); + break; } } @@ -364,6 +389,22 @@ class _OrderPrepayPageState extends BaseStoreState listener: (WXPayResult result) {}); } + _unionPay(BuildContext context) async { + ResultData resultData = + await HttpManager.post("/v1/pay/unionpay/order/create", { + "orderId": _model.data.id, + "userId": UserManager.instance.user.info.id, + }); + dismissLoading(); + if (!TextUtil.isEmpty(resultData?.data['data']['tn'] ?? null)) { + FlutterUnionPay.pay( + tn: resultData?.data['data']['tn'], + mode: AppConfig.debug ? PaymentEnv.DEVELOPMENT : PaymentEnv.PRODUCT, + scheme: "RecookUnionPay", + ); + } + } + // 密码支付 _submitPassword() { dismissLoading();