Есть проблемы, чтобы сделать интеграцию платежей PayTM жить в флаттер - PullRequest
0 голосов
/ 18 марта 2020

За тестовый MID я могу заплатить успешно, но когда я пытаюсь оживить его с помощью моего производственного ключа и производственного MID оплаты, я получаю сообщение об ошибке «Недействительно: этот MID недоступен в нашей промежуточной среде», и я используя 'https://securegw.paytm.in/theia/paytmCallback?ORDER_ID=' URL-адрес обратного вызова для производства в качестве инструкции для paytm, но я все еще не могу произвести оплату в производственной среде. Ниже мой код флаттера:

class _MyAppState extends State<MyApp> {
  String payment_response = '';
  final String M_ID = "";      //Production MID
  final String CHANNEL_ID = "WAP";// type here your channel id given by paytm
  final String INDUSTRY_TYPE_ID = "Retail";  // type here your industry type id given by paytm
  final String WEBSITE = "DEFAULT";    //for production

  TextEditingController amountController = new TextEditingController();

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Paytm example app'),
        ),
        body: Padding(
          padding: EdgeInsets.all(10.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              TextFormField(
                controller: amountController,
                decoration: InputDecoration(
                  hintText: 'Enter Amount',
                  prefix: Text('Rs. '),
                ),
                keyboardType: TextInputType.number,
              ),
              SizedBox(height: 5.0,),
              RaisedButton(
                onPressed: () {
                  //Firstly Generate CheckSum bcoz Paytm Require this
                  generateCheckSum();
                },
                color: Colors.blue,
                child: Text(
                  "Pay Now",
                  style: TextStyle(color: Colors.white),
                ),
              ),
              SizedBox(height: 20.0,),
              Text('Response: $payment_response\n'),

            ],
          ),
        ),
      ),
    );
  }

  void generateCheckSum() async {
    var url =
        'https://promiseacademy.co.in/flutterapp/paytm/generateChecksum.php';

    String orderId = DateTime
        .now()
        .millisecondsSinceEpoch
        .toString();

    String callBackUrl =
    'https://securegw.paytm.in/theia/paytmCallback?ORDER_ID=' +
        orderId;

    //Please use your parameters here
    //CHANNEL_ID etc provided to you by paytm

    final response = await http.post(url, headers: {
      "Content-Type": "application/x-www-form-urlencoded"
    }, body: {
      "M_ID": M_ID,
      "CHANNEL_ID": CHANNEL_ID,
      'INDUSTRY_TYPE_ID': INDUSTRY_TYPE_ID,
      'WEBSITE': WEBSITE,
      'TXN_AMOUNT': amountController.text,
      'CALLBACK_URL': callBackUrl,
      'ORDER_ID': orderId,
      'CUST_ID': '1',
    });

    //for Testing(Stagging) use this

    //https://securegw-stage.paytm.in/theia/paytmCallback?ORDER_ID=

    //https://securegw.paytm.in/theia/paytmCallback?ORDER_ID=


    if (response.statusCode == 200) {
      var result = json.decode(response.body);

      print("Response :" + response.body + "\nchecksumhash:" + result['CHECKSUMHASH']);

      var paytmResponse = Paytm.startPaytmPayment(
          true,
          M_ID,
         orderId,
          "1",
          CHANNEL_ID,
          amountController.text,
          WEBSITE,
          callBackUrl,
          INDUSTRY_TYPE_ID,
          result['CHECKSUMHASH']);

      paytmResponse.then((value) {
        setState(() {
          payment_response = value.toString();
        });
      });
    }
    else{
      print(response.statusCode);
    }
  }
}
...