Commit 42529bd8f312fe69328ef743da314e90cd2f5253

Authored by wdn127929
1 parent b3edc0ec

支付

... ... @@ -12,14 +12,14 @@ if (flutterRoot == null) {
}
def flutterVersionCode = "392"
def flutterVersionCode = "393"
if (flutterVersionCode == null) {
flutterVersionCode = '392'
flutterVersionCode = '393'
}
def flutterVersionName = "3.9.2"
def flutterVersionName = "3.9.3"
if (flutterVersionName == null) {
flutterVersionName = '3.9.2'
flutterVersionName = '3.9.3'
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
... ...
... ... @@ -134,7 +134,7 @@ class HttpUrl {
"?service=App.Customer.GetTableFillUpDate"; // 根据指定日期,返回当前商家包间类型置满情况的日期
static const String app_pay_sub =
"?service=App.Pay.AppPaySub"; // 根据指定日期,返回当前商家包间类型置满情况的日期
"?service=App.Pay.AppPaySub"; // 微信支付
static const String get_table_class_by_id =
"?service=App.Seller.GetTableClassById"; // 获取包间分类
... ...
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/models/sms_info.dart';
... ... @@ -13,6 +15,7 @@ import 'package:one_key/widgets/system_app_bar.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';
import 'package:fluwx/fluwx.dart' as fluwx;
import 'package:crypto/crypto.dart';
class SmsRechargePage extends StatefulWidget {
final SmsInfoData infoData;
... ... @@ -169,6 +172,26 @@ class _SmsRechargePageState extends State<SmsRechargePage> {
context, params);
if (success) {
print(rechargeModel.sunModel.package.substring(10));
Map<String, String> str = {
'appid': rechargeModel.sunModel.appId,
'partnerid': '1489405762',
'prepayid':
rechargeModel.sunModel.package.substring(10),
'timestamp': rechargeModel.sunModel.timeStamp,
'noncestr': rechargeModel.sunModel.nonceStr,
'package': 'Sign=WXPay',
// 'signtype': rechargeModel.sunModel.signType
};
// String str =
// '${rechargeModel.sunModel.appId}\n${rechargeModel.sunModel.timeStamp}\n${rechargeModel.sunModel.nonceStr}\n${rechargeModel.sunModel.package.substring(10)}\n';
String sign = Utils.keySort(str);
// var content = utf8.encode(signtemp);
// String sign = base64Encode(content);
print(sign);
print(rechargeModel.sunModel.paySign);
//掉起微信支付
fluwx
.payWithWeChat(
... ... @@ -182,14 +205,18 @@ class _SmsRechargePageState extends State<SmsRechargePage> {
nonceStr: rechargeModel.sunModel.nonceStr,
timeStamp: int.parse(
rechargeModel.sunModel.timeStamp),
// sign: rechargeModel.sunModel.paySign,
sign: 'MD5')
// sign: sign
sign: sign,
// signType: rechargeModel.sunModel.signType
// signType: rechargeModel.sunModel.signType)
)
.then((data) {
print("---》$data");
}).catchError((error) {
print(error.toString());
});
} else {
print('fffff');
//给用户提示错误
}
},
... ...
... ... @@ -23,6 +23,8 @@ import 'package:package_info/package_info.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:crypto/crypto.dart';
import 'dart:convert';
import 'package:webview_flutter/webview_flutter.dart';
import '../app.dart';
... ... @@ -30,6 +32,34 @@ import '../app.dart';
typedef BookTimeSetCallback = void Function(bool needChange);
class Utils {
//请求参数按key按ASCII排序key1=value1&key2=value2&...&keyN=valueN
static String keySort(Map<String, String> oldParamsMap) {
List attrKeys = oldParamsMap.keys.toList();
attrKeys.sort(); //排序 ASCII 字符顺序进行排序
var str = '';
for (var i = 0; i < oldParamsMap.length; i++) {
if (i == oldParamsMap.length - 1) {
str += "${attrKeys[i]}=${oldParamsMap[attrKeys[i]]}";
} else {
str += "${attrKeys[i]}=${oldParamsMap[attrKeys[i]]}&";
}
}
print(str);
String stringSignTemp =
str + "&key=3F59D13EB7681868B96A50902296BCE6"; //注:key为商户平台设置的密钥key
var key = utf8.encode('3F59D13EB7681868B96A50902296BCE6');
var hmacSha256 = Hmac(sha256, key); // HMAC-SHA256
var bytes = utf8.encode(stringSignTemp);
var digest = hmacSha256.convert(bytes);
print("HMAC digest as bytes: ${digest.bytes}");
print("HMAC digest as hex string: $digest");
return '$digest'.toUpperCase();
//注:HMAC-SHA256签名方式,部分语言的hmac方法生成结果二进制结果,需要调对应函数转化为十六进制字符串
}
// 验证是否为数字
static bool isNumber(String str) {
final reg = RegExp(r'^-?[0-9]+');
... ...
... ... @@ -268,7 +268,7 @@ packages:
source: hosted
version: "0.3.3+1"
crypto:
dependency: transitive
dependency: "direct main"
description:
name: crypto
url: "https://pub.flutter-io.cn"
... ...
... ... @@ -163,6 +163,7 @@ dependencies:
# webview_flutter: ^3.0.4
# sendsms: ^1.0.3
flutter_ex_widget: ^0.0.7
crypto: ^3.0.1
... ...