簡體   English   中英

如何使用php將paytm集成到android中?

[英]How to integrate paytm in android using php?

我試圖使用php集成paytm。 我遵循此網址來實現paytm https://www.simplifiedcoding.net/paytm-integration-android-example/ 然后下載其中的示例代碼進行嘗試。 更改了所有憑據,例如MID,回調URL和通道iD等。在設備上運行時,點擊“購買”按鈕時會打開購買屏幕,加載並顯示哎呀需要一些時間“糟糕!付款失敗”

在Android控制台中,我可以獲取訂單ID。 這是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代碼

    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();
  }
 }

對於paytm集成,您應該遵循4個步驟。 Paytm官方文檔中給出了一些誤導性信息,但是您可以按照此參考教程進行最新的Paytm SDK集成2019

  1. 添加Paytm依賴
  2. 添加運行時權限和Paytm活動
  3. 獲取商家ID和秘密密鑰
  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"/>

還要在主Activity類中添加此行

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校驗和,您首先需要知道即使在測試模型交易中,訂單ID在每個交易中也必須是唯一的。

  1. 訂單ID和客戶ID必須僅從您的服務器生成。
  2. 對於測試模型,您可以手動提供訂單ID和客戶ID。

android代碼的流程如下 -

主要活動-從App UI獲取訂單ID和客戶ID。

將訂單ID和客戶ID傳遞給另一個活動名稱,如checksum.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  );

請閱讀此參考教程以了解完整過程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM