繁体   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