![](/img/trans.png)
[英]How integrate Paytm Subscription payment (recurring payments) in android studio?
[英]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 。
添加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在每个交易中也必须是唯一的。
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.