首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我正在android中集成paytm all in one sdk,每次我都会得到一个成功代码,但在android中body为空

我正在android中集成paytm all in one sdk,每次我都会得到一个成功代码,但在android中body为空
EN

Stack Overflow用户
提问于 2020-09-15 13:35:47
回答 2查看 347关注 0票数 0

这是APIInterface的代码:

代码语言:javascript
复制
@Multipart
    @POST("paytm")
    @Headers({"Content-Type: application/json;charset=UTF-8"})
    Call<Token_Res> generateTokenCall(
            @HeaderMap Map<String, String> header,
            @Part("code") RequestBody language,
            @Part ("MID") RequestBody mid,
            @Part("ORDER_ID") RequestBody order_id,
            @Part("AMOUNT") RequestBody amount
    );

这是我的Retrofit类:

代码语言:javascript
复制
package com.csk.jagdishshop.paytm;

import com.csk.jagdishshop.BuildConfig;
import com.csk.jagdishshop.NullOnEmptyConverterFactory;
import com.csk.jagdishshop.retrofit.APIService;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.util.Map;
import java.util.concurrent.TimeUnit;

import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.RequestBody;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Call;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class ServiceWrapper {
    private APIService mServiceInterface;

    public ServiceWrapper(Interceptor mInterceptorheader) {
        mServiceInterface = getRetrofit(mInterceptorheader).create(APIService.class);
    }

    public Retrofit getRetrofit(Interceptor mInterceptorheader) {
        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient mOkHttpClient = null;
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.connectTimeout(1201, TimeUnit.SECONDS);
        builder.readTimeout(901, TimeUnit.SECONDS);

        if (BuildConfig.DEBUG) {
//            HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
            loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
            builder.addInterceptor(loggingInterceptor);
        }

        mOkHttpClient = builder.build();
        Gson gson = new GsonBuilder().setLenient().create();
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://jagdishshop.com/api/")
                .addConverterFactory(new NullOnEmptyConverterFactory())
                .addConverterFactory(GsonConverterFactory.create(gson))
                .client(mOkHttpClient)
                .build();
        return retrofit;
    }

    public Call<Token_Res> getTokenCall(Map<String, String> header, String code, String mid, String order_id, String amount) {
        return mServiceInterface.generateTokenCall(
                header,convertPlainString(code), convertPlainString(mid), convertPlainString(order_id)
                , convertPlainString(amount)
                );
    }
    // convert aa param into plain text
    public RequestBody convertPlainString(String data){
        RequestBody plainString = RequestBody.create(data,MediaType.parse("text/plain"));
        return  plainString;
    }
}

这是网络调用活动: getToken()方法用于从paytm服务器生成令牌。为此,我在自己的服务器上使用了init_transaction.php文件和PaytmCehcsum.php文件,并对其进行了请求。头用于Authorization:令牌来验证用户。

代码语言:javascript
复制
private  void getToken(){
        Map<String, String> header = new HashMap<>();
        header.put("Authorization",token);
        header.put("X-Requested-With","XMLHttpRequest");

        Log.e(TAG, " get token start");
        progressBar.setVisibility(View.VISIBLE);
        ServiceWrapper serviceWrapper = new ServiceWrapper(null);
        Call<Token_Res> call = serviceWrapper.getTokenCall(header,"12345", midString, orderIdString, txnAmountString);
        call.enqueue(new Callback<Token_Res>() {
            @Override
            public void onResponse(Call<Token_Res> call, Response<Token_Res> response) {
                Log.e(TAG, " respo "+ response.isSuccessful());
                Log.e(TAG,"response :"+response.body());
                progressBar.setVisibility(View.GONE);
                try {

                    if (response.isSuccessful() && response.body()!=null){
                        if (response.body().getBody().getTxnToken()!="") {
                            Log.e(TAG, " transaction token : "+response.body().getBody().getTxnToken());
                            startPaytmPayment(response.body().getBody().getTxnToken());
                        }else {
                            Log.e(TAG, " Token status false");
                        }
                    }
                }catch (Exception e){
                    Log.e(TAG, " error in Token Res "+e.toString());
                }
            }

            @Override
            public void onFailure(Call<Token_Res> call, Throwable t) {
                progressBar.setVisibility(View.GONE);
                Log.e(TAG, " response error "+t.toString());
            }
        });

    }

    public void startPaytmPayment (String token){

        txnTokenString = token;
        
        String host = "https://securegw.paytm.in/";
        String orderDetails = "MID: " + midString + ", OrderId: " + orderIdString + ", TxnToken: " + txnTokenString
                + ", Amount: " + txnAmountString;
        //Log.e(TAG, "order details "+ orderDetails);

        String callBackUrl = host + "theia/paytmCallback?ORDER_ID="+orderIdString;
        Log.e(TAG, " callback URL "+callBackUrl);
        PaytmOrder paytmOrder = new PaytmOrder(orderIdString, midString, txnTokenString, txnAmountString, callBackUrl);
        TransactionManager transactionManager = new TransactionManager(paytmOrder, new PaytmPaymentTransactionCallback(){
            @Override
            public void onTransactionResponse(Bundle bundle) {
                Log.e(TAG, "Response (onTransactionResponse) : "+bundle.toString());
            }

            @Override
            public void networkNotAvailable() {
                Log.e(TAG, "network not available ");
            }

            @Override
            public void onErrorProceed(String s) {
                Log.e(TAG, " onErrorProcess "+s.toString());
            }

            @Override
            public void clientAuthenticationFailed(String s) {
                Log.e(TAG, "Clientauth "+s);
            }

            @Override
            public void someUIErrorOccurred(String s) {
                Log.e(TAG, " UI error "+s);
            }

            @Override
            public void onErrorLoadingWebPage(int i, String s, String s1) {
                Log.e(TAG, " error loading web "+s+"--"+s1);
            }

            @Override
            public void onBackPressedCancelTransaction() {
                Log.e(TAG, "backPress ");
            }

            @Override
            public void onTransactionCancel(String s, Bundle bundle) {
                Log.e(TAG, " transaction cancel "+s);
            }
        });

        transactionManager.setShowPaymentUrl(host + "theia/api/v1/showPaymentPage");
        transactionManager.startTransaction(this, ActivityRequestCode);

    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.e(TAG ," result code "+resultCode);
        
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == ActivityRequestCode && data != null) {
            Bundle bundle = data.getExtras();
            if (bundle != null) {
                for (String key : bundle.keySet()) {
                    Log.e(TAG, key + " : " + (bundle.get(key) != null ? bundle.get(key) : "NULL"));
                }
            }
            Log.e(TAG, " data "+  data.getStringExtra("nativeSdkForMerchantMessage"));
            Log.e(TAG, " data response - "+data.getStringExtra("response"));

            Toast.makeText(getApplicationContext(), data.getStringExtra("nativeSdkForMerchantMessage")
                    + data.getStringExtra("response"), Toast.LENGTH_SHORT).show();
        }else{
            Log.e(TAG, " payment failed");
        }
    }

在这里,每次我得到response = true & responseBody = null

这是Logcat的输出:

代码语言:javascript
复制
D/OkHttp: --> POST https://jagdishshop.com/api/paytm http/1.1
D/OkHttp: Content-Type: application/json;charset=UTF-8
D/OkHttp: Content-Length: 816
D/OkHttp: Authorization: Bearer ...
D/OkHttp: X-Requested-With: XMLHttpRequest
D/OkHttp: --a67ac3f9-93a3-4a87-bdf5-85b447044dda
D/OkHttp: Content-Disposition: form-data; name="code"
D/OkHttp: Content-Transfer-Encoding: binary
D/OkHttp: Content-Type: text/plain; charset=utf-8
D/OkHttp: Content-Length: 5
D/OkHttp: 12345
D/OkHttp: --a67ac3f9-93a3-4a87-bdf5-85b447044dda
D/OkHttp: Content-Disposition: form-data; name="MID"
D/OkHttp: Content-Transfer-Encoding: binary
D/OkHttp: Content-Type: text/plain; charset=utf-8
D/OkHttp: Content-Length: 20
D/OkHttp: QKBnVxxxxxxxxx65
D/OkHttp: --a67ac3f9-93a3-4a87-bdf5-85b447044dda
D/OkHttp: Content-Disposition: form-data; name="ORDER_ID"
D/OkHttp: Content-Transfer-Encoding: binary
D/OkHttp: Content-Type: text/plain; charset=utf-8
D/OkHttp: Content-Length: 4
D/OkHttp: 8361
D/OkHttp: --a67ac3f9-93a3-4a87-bdf5-85b447044dda
D/OkHttp: Content-Disposition: form-data; name="AMOUNT"
D/OkHttp: Content-Transfer-Encoding: binary
D/OkHttp: Content-Type: text/plain; charset=utf-8
D/OkHttp: Content-Length: 3
D/OkHttp: 100
D/OkHttp: --a67ac3f9-93a3-4a87-bdf5-85b447044dda--
D/OkHttp: --> END POST (816-byte body)

D/OkHttp: <-- 200 OK https://jagdishshop.com/api/paytm (329ms)
D/OkHttp: Date: Tue, 15 Sep 2020 05:53:09 GMT
D/OkHttp: Server: Apache
D/OkHttp: Cache-Control: no-cache, private
D/OkHttp: X-RateLimit-Limit: 60
D/OkHttp: X-RateLimit-Remaining: 58
D/OkHttp: Vary: Authorization,User-Agent
D/OkHttp: Content-Length: 0
D/OkHttp: Keep-Alive: timeout=5, max=100
D/OkHttp: Connection: Keep-Alive
D/OkHttp: Content-Type: text/html; charset=UTF-8
D/OkHttp: <-- END HTTP (0-byte body)
EN

回答 2

Stack Overflow用户

发布于 2020-09-15 14:14:16

问题可能是,你发布到https://jagdishshop.com/api/paytm而不是PayTM。除非你已经修复了你的服务器端实现,否则修复客户端是毫无意义的。

票数 1
EN

Stack Overflow用户

发布于 2020-09-18 18:53:13

请在Initiate transaction API (服务器端实现)中使用以下回调URL。

试运行:https://securegw-stage.paytm.in/theia/paytmCallback?ORDER_ID= Production:https://securegw.paytm.in/theia/paytmCallback?ORDER_ID=

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63895722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档