Как интегрировать PayTM в Android с помощью PHP? - PullRequest
0 голосов
/ 16 мая 2018

Я попытался интегрировать PayTM с помощью PHP. Я следовал этому URL для реализации PayTM https://www.simplifiedcoding.net/paytm-integration-android-example/. Затем скачал пример кода из них, чтобы попробовать. Изменены все учетные данные, такие как MID, URL-адрес обратного вызова, идентификатор канала и т. Д. При запуске на устройстве он открывает экран покупки, при нажатии кнопки «Купить» требуется некоторое время для загрузки и отображения сообщения «К сожалению, платеж не прошел»

В консоли Android я могу получить идентификатор заказа. Вот код constants.java

 package simplifiedcoding.net.paytmpaymentsample;

/**
* Created by Belal on 1/10/2018.
*/

public class Constants {

public static final String M_ID = "xxxxx301208461"; //Paytm Merchand Id 
we got it in paytm credentials
public static final String CHANNEL_ID = "WAP"; //Paytm Channel Id, got it in 
paytm credentials
public static final String INDUSTRY_TYPE_ID = "Retail"; //Paytm industry type 
got it in paytm credential

public static final String WEBSITE = "APP_STAGING";
public static final String CALLBACK_URL = 
"https://pguat.paytm.com/paytmchecksum/paytmCallback.jsp";


}

вот код API.java

   package simplifiedcoding.net.paytmpaymentsample;

import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;

 /**
 * Created by Belal on 1/10/2018.
 */

 public interface Api {

    //this is the URL of the paytm folder that we added in the server
  //make sure you are using your ip else it will not work
  String BASE_URL = "http://10.208.1.229/paytm/";

   @FormUrlEncoded
   @POST("generateChecksum.php")
   Call<Checksum> getChecksum(
        @Field("MID") String mId,
        @Field("ORDER_ID") String orderId,
        @Field("CUST_ID") String custId,
        @Field("CHANNEL_ID") String channelId,
        @Field("TXN_AMOUNT") String txnAmount,
        @Field("WEBSITE") String website,
        @Field("CALLBACK_URL") String callbackUrl,
        @Field("INDUSTRY_TYPE_ID") String industryTypeId
   );

  }

MainActivity.java code

    package simplifiedcoding.net.paytmpaymentsample;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
 import android.widget.TextView;
 import android.widget.Toast;

 import com.paytm.pgsdk.PaytmOrder;
 import com.paytm.pgsdk.PaytmPGService;
 import com.paytm.pgsdk.PaytmPaymentTransactionCallback;

import java.util.HashMap;
 import java.util.Map;

 import retrofit2.Call;
import retrofit2.Callback;
 import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

//implementing PaytmPaymentTransactionCallback to track the payment result.
 public class MainActivity extends AppCompatActivity implements 
 PaytmPaymentTransactionCallback {

//the textview in the interface where we have the price
TextView textViewPrice;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //getting the textview
    textViewPrice = findViewById(R.id.textViewPrice);


    //attaching a click listener to the button buy
    findViewById(R.id.buttonBuy).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            //calling the method generateCheckSum() which will generate the paytm checksum for payment
            generateCheckSum();
        }
    });

}

private void generateCheckSum() {

    //getting the tax amount first.
    String txnAmount = textViewPrice.getText().toString().trim();

    //creating a retrofit object.
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Api.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    //creating the retrofit api service
    Api apiService = retrofit.create(Api.class);

    //creating paytm object
    //containing all the values required
    final Paytm paytm = new Paytm(
            Constants.M_ID,
            Constants.CHANNEL_ID,
            txnAmount,
            Constants.WEBSITE,
            Constants.CALLBACK_URL,
            Constants.INDUSTRY_TYPE_ID
    );

    //creating a call object from the apiService
    Call<Checksum> call = apiService.getChecksum(
            paytm.getmId(),
            paytm.getOrderId(),
            paytm.getCustId(),
            paytm.getChannelId(),
            paytm.getTxnAmount(),
            paytm.getWebsite(),
            paytm.getCallBackUrl(),
            paytm.getIndustryTypeId()
    );

    //making the call to generate checksum
    call.enqueue(new Callback<Checksum>() {
        @Override
        public void onResponse(Call<Checksum> call, Response<Checksum> response) {

            //once we get the checksum we will initiailize the payment.
            //the method is taking the checksum we got and the paytm object as the parameter
            initializePaytmPayment(response.body().getChecksumHash(), paytm);
        }

        @Override
        public void onFailure(Call<Checksum> call, Throwable t) {

        }
    });
}

private void initializePaytmPayment(String checksumHash, Paytm paytm) {

    //getting paytm service
    PaytmPGService Service = PaytmPGService.getStagingService();

    //use this when using for production
    //PaytmPGService Service = PaytmPGService.getProductionService();

    //creating a hashmap and adding all the values required
    Map<String, String> paramMap = new HashMap<>();
    paramMap.put("MID", Constants.M_ID);
    paramMap.put("ORDER_ID", paytm.getOrderId());
    paramMap.put("CUST_ID", paytm.getCustId());
    paramMap.put("CHANNEL_ID", paytm.getChannelId());
    paramMap.put("TXN_AMOUNT", paytm.getTxnAmount());
    paramMap.put("WEBSITE", paytm.getWebsite());
    paramMap.put("CALLBACK_URL", paytm.getCallBackUrl());
    paramMap.put("CHECKSUMHASH", checksumHash);
    paramMap.put("INDUSTRY_TYPE_ID", paytm.getIndustryTypeId());


    //creating a paytm order object using the hashmap
    PaytmOrder order = new PaytmOrder(paramMap);

    //intializing the paytm service
    Service.initialize(order, null);

    //finally starting the payment transaction
    Service.startPaymentTransaction(this, true, true, this);

}

//all these overriden method is to detect the payment result accordingly
@Override
public void onTransactionResponse(Bundle bundle) {

    Toast.makeText(this, bundle.toString(), Toast.LENGTH_LONG).show();
}

@Override
public void networkNotAvailable() {
    Toast.makeText(this, "Network error", Toast.LENGTH_LONG).show();
}

@Override
public void clientAuthenticationFailed(String s) {
    Toast.makeText(this, s, Toast.LENGTH_LONG).show();
}

@Override
public void someUIErrorOccurred(String s) {
    Toast.makeText(this, s, Toast.LENGTH_LONG).show();
}

@Override
public void onErrorLoadingWebPage(int i, String s, String s1) {
    Toast.makeText(this, s, Toast.LENGTH_LONG).show();
}

  @Override
  public void onBackPressedCancelTransaction() {
      Toast.makeText(this, "Back Pressed", Toast.LENGTH_LONG).show();
  }

   @Override
  public void onTransactionCancel(String s, Bundle bundle) {
    Toast.makeText(this, s + bundle.toString(), Toast.LENGTH_LONG).show();
  }
 }

1 Ответ

0 голосов
/ 27 января 2019

Для интеграции Paytm необходимо выполнить 4 шага.Некоторая вводящая в заблуждение информация приведена в официальной документации Paytm, но вы можете следовать этому справочному руководству для последней интеграции Paytm SDK 2019 .

  1. Добавить зависимость Paytm
  2. Добавить разрешение времени выполнения& Paytm Activity
  3. Получить идентификатор продавца и секретный ключ
  4. Загрузить файлы контрольной суммы на сервер
  5. Создать контрольную сумму Paytm
  6. Запустить платежную транзакцию Paytm

Добавить зависимость paytm

   // paytm dependency
implementation('com.paytm:pgplussdk:1.2.3') {
   transitive = true;
}

Добавить разрешение времени выполнения

<uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  <uses-permission android:name="android.permission.READ_SMS"/>
  <uses-permission android:name="android.permission.RECEIVE_SMS"/>

Также добавить эту строку в основной класс действий

if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) {
          ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_SMS, Manifest.permission.RECEIVE_SMS}, 101);
      }

В СоздатьКонтрольная сумма Paytm Прежде всего необходимо знать, что идентификатор заказа должен быть уникальным для каждой транзакции, даже в транзакции с тестовой моделью.

  1. Идентификатор заказа и идентификатор клиента должны генерироваться только с вашего сервера.
  2. Для тестовой модели вы можете вручную указать идентификатор заказа и идентификатор клиента.

Поток кода Android выглядит следующим образом -

Основная операция - получить заказидентифицироватьd идентификатор клиента из пользовательского интерфейса приложения.

Передача идентификатора заказа и идентификатора клиента в другое имя операции в виде checkum.java

получение контрольной суммы из URL путем передачи параметра.

  String url ="https://www.blueappsoftware.com/payment/payment_paytm/generateChecksum.php";
        String varifyurl = "https://pguat.paytm.com/paytmchecksum/paytmCallback.jsp";
                           // "https://securegw-stage.paytm.in/theia/paytmCallback?ORDER_ID"+orderId;

 String param=
                "MID="+mid+
                "&ORDER_ID=" + orderId+
                "&CUST_ID="+custid+
                "&CHANNEL_ID=WAP&TXN_AMOUNT=100&WEBSITE=WEBSTAGING"+
                        "&CALLBACK_URL="+ varifyurl+"&INDUSTRY_TYPE_ID=Retail";

начать транзакцию Paytm , позвонив по номеру

 Service.startPaymentTransaction(checksum.this, true, true,
                    checksum.this  );

Пожалуйста, прочитайте это справочное руководство для завершения процесса

...