eyflutter_pays 0.0.3 copy "eyflutter_pays: ^0.0.3" to clipboard
eyflutter_pays: ^0.0.3 copied to clipboard

in app purchase

example/lib/main.dart

import 'dart:convert';
import 'dart:convert' as convert;

import 'package:crypto/crypto.dart';
import 'package:dio/dio.dart';
import 'package:eyflutter_pays/eyflutter_pays.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final dio = Dio();

  @override
  void initState() {
    super.initState();

    /// 支付相关回调
    InAppPurchase.instance.addListen(getProductError: (message) {
      //获取产品失败
      print(message);
      dismissLoading();
    }, verifyPurchaseResult: (arguments) {
      //校验支付结果
      showLoading();
      _verifyPurchaseResult(arguments);
    }, buyProductError: (arguments) {
      dismissLoading();
      print('购买失败$arguments');
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: ListView(
            children: [
              TextButton(
                  onPressed: () {
                    showLoading();
                    InAppPurchase.instance.buyProduct(productId: "399319940751949893", orderNo: '');
                  },
                  child: Text('产品1')),
              TextButton(
                  onPressed: () {
                    showLoading();
                    InAppPurchase.instance.buyProduct(productId: "399319749353275461", orderNo: '');
                  },
                  child: Text('产品2')),
              TextButton(
                  onPressed: () {
                    showLoading();
                    InAppPurchase.instance.buyProduct(productId: "399319650032156741", orderNo: '437209513930522693');
                  },
                  child: Text('产品3')),
            ],
          ),
        ),
      ),
      builder: EasyLoading.init(builder: (context, widget) {
        return MediaQuery(
          data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
          child: widget!,
        );
      }),
    );
  }

  /// 与后端交互, 校验支付结果
  _verifyPurchaseResult(arguments) async {
    print('校验支付$arguments');
    var receiptData = arguments['receipt-data']; //获取苹果返回的receipt
    var receipt = convert.jsonEncode({'receipt-data': "$receiptData"}); //组装json
    var orderNo = arguments['orderNo'];
    var transactionId = arguments['transactionId'];
    var productId = arguments['productId'];
    var userId = '307080167275102277';
    var sign = MD5Utils.MD5('$receipt$orderNo$transactionId$productId$userId');
    var prams = {
      'receipt': receipt,
      'orderNo': orderNo,
      'transactionId': transactionId,
      'productId': productId,
      'sign': sign
    };
    print('提交参数$prams');
    Response response = await dio.post('https://api.geease.com/api/nct/trading/apple/pay/verify',
        data: prams, options: Options(headers: {'platform': 'ios', 'token': '006f38e6b34d424e8fab024a01e5a15d'}));
    dismissLoading();
    print(response);

    /// 支付成功要移除本地存储的凭证
    InAppPurchase.instance.deleteByPaymentVoucher(arguments);
  }

  // loading框
  static showLoading() {
    if (!EasyLoading.isShow) {
      EasyLoading.show(dismissOnTap: true);
    }
  }

  // 消失loading框
  static dismissLoading() {
    EasyLoading.dismiss();
  }
}

///// md5 加密
class MD5Utils {
  static String MD5(String data) {
    var content = const Utf8Encoder().convert(data);
    var digest = md5.convert(content);
    return digest.toString();
  }
}