当前位置: 首页 > 知识库问答 >
问题:

Payumoney-Android:仅在成功支付后从PayUMoney SDK获取**Paymentid**

谢璞
2023-03-14

我正在我的Android应用程序中集成payUMoney。在测试和生产两个环境中都成功支付后,我只得到paymentId。我需要交易细节以及从Payumoney。我也联系了payUMoney的技术团队,但没有得到任何回应。

请看附上的图片为payUMoney响应,我已经打印在logcat。

我所尝试的如下所示。

public void makePayment() {
    String phone = "8882434664";
    String productName = "product_name";
    String firstName = "piyush";
    String txnId = "0nf7" + System.currentTimeMillis();
    String email = "piyush.jain@payu.in";
    String sUrl = AppConstant.BASE_URL + "/mob-payment/success";
    String fUrl = AppConstant.BASE_URL + "/mob-payment/failure";
    String udf1 = "";
    String udf2 = "";
    String udf3 = "";
    String udf4 = "";
    String udf5 = "";
    boolean isDebug = true;
    String key = "dRQuiA";
    String merchantId = "4928174";

    PayUmoneySdkInitilizer.PaymentParam.Builder builder = new PayUmoneySdkInitilizer.PaymentParam.Builder();

    builder.setAmount(1.0)
            .setTnxId(txnId)
            .setPhone(phone)
            .setProductName(productName)
            .setFirstName(firstName)
            .setEmail(email)
            .setsUrl(sUrl)
            .setfUrl(fUrl)
            .setUdf1(udf1)
            .setUdf2(udf2)
            .setUdf3(udf3)
            .setUdf4(udf4)
            .setUdf5(udf5)
            .setIsDebug(isDebug)
            .setKey(key)
            .setMerchantId(merchantId);

    PayUmoneySdkInitilizer.PaymentParam paymentParam = builder.build();
    calculateServerSideHashAndInitiatePayment(paymentParam);
}

private void calculateServerSideHashAndInitiatePayment(final PayUmoneySdkInitilizer.PaymentParam paymentParam) {

    String url = "https://test.payumoney.com/payment/op/calculateHashForTest";

    StringRequest jsonObjectRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            try {
                JSONObject jsonObject = new JSONObject(response);

                if (jsonObject.has(SdkConstants.STATUS)) {
                    String status = jsonObject.optString(SdkConstants.STATUS);
                    if (status != null || status.equals("1")) {
                        String hash = jsonObject.getString(SdkConstants.RESULT);
                        paymentParam.setMerchantHash(hash);
                        PayUmoneySdkInitilizer.startPaymentActivityForResult(ActivityConfirmOrder.this, paymentParam);
                    } else {
                        Toast.makeText(ActivityConfirmOrder.this,
                                jsonObject.getString(SdkConstants.RESULT),
                                Toast.LENGTH_SHORT).show();
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            if (error instanceof NoConnectionError) {
                Toast.makeText(ActivityConfirmOrder.this,
                        ActivityConfirmOrder.this.getString(R.string.connect_to_internet),
                        Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(ActivityConfirmOrder.this,
                        error.getMessage(),
                        Toast.LENGTH_SHORT).show();
            }
        }
    }) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            return paymentParam.getParams();
        }
    };
    Volley.newRequestQueue(this).add(jsonObjectRequest);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == PayUmoneySdkInitilizer.PAYU_SDK_PAYMENT_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {

            StringBuilder str = new StringBuilder();
            Bundle bundle = data.getExtras();
            if (bundle != null) {
                Set<String> keys = bundle.keySet();
                Iterator<String> it = keys.iterator();
                while (it.hasNext()) {
                    String key = it.next();
                    str.append(key);
                    str.append(":");
                    str.append(bundle.get(key));
                    str.append("\n\r");
                }
                Log.e("res: ", str.toString());
            }

        } else if (resultCode == RESULT_CANCELED) {
        } else if (resultCode == PayUmoneySdkInitilizer.RESULT_FAILED) {
            if (data != null) {
                if (data.getStringExtra(SdkConstants.RESULT).equals("cancel")) {
                } else {
                }
            }
        } else if (resultCode == PayUmoneySdkInitilizer.RESULT_BACK) {
        }
    }
}

共有1个答案

龚奕
2023-03-14

我也面临同样的问题,但经过一点点研究,我发现我们需要使用不同的发票API分别生成发票。您可以找到发票API文档的bellow URL...

https://www.payumoney.com/dev-guide/products/invoicing.html

@Maulikdodia其实你需要自己创建成功url,那么payumoney就会像这样直接在你的成功url中发送所有的数据……

Array
(
    [mihpayid] => 40399371551*******  
    [mode] => DC  
    [status] => success  
    [unmappedstatus] => captured  
    [key] => d****A  
    [txnid] => INV0****0531  
    [amount] => 1000.0  
    [addedon] => 2017-05-31 13:16:12  
    [productinfo] => ****  
    [firstname] => ****  
    [lastname] =>   
    [address1] =>   
    [address2] =>   
    [city] => null  
    [state] =>   
    [country] => null  
    [zipcode] =>       
    [email] => ***@test.xxx  
    [phone] =>   
    [udf1] =>   
    [udf2] =>   
    [udf3] =>   
    [udf4] =>   
    [udf5] =>   
    [udf6] =>   
    [udf7] =>   
    [udf8] =>   
    [udf9] =>   
    [udf10] =>   
    [hash] => ***************  
    [field1] => 715140****61  
    [field2] => 99***9  
    [field3] => 8523310*****511  
    [field4] => -1  
    [field5] =>   
    [field6] =>   
    [field7] =>   
    [field8] =>   
    [field9] => SUCCESS  
    [PG_TYPE] => HDFCPG  
    [encryptedPaymentId] => DB****EB8****02A****9FE4C****CB3  
    [bank_ref_num] => 8****016137****  
    [bankcode] => MAST  
    [error] => E000  
    [error_Message] => No Error  
    [name_on_card] => payu  
    [cardnum] => 512345XXXXXXXX46  
    [cardhash] => This field is no longer supported in postback params.  
    [amount_split] => {"PAYU":"1000.0"}  
    [payuMoneyId] => 1******0  
    [discount] => 0.00  
    [net_amount_debit] => 1000  
)  

然后,您可以在服务器端使用它生成发票,或者做任何您想做的事情。

来源:我已经做了所有的代码,它正在工作。希望有帮助...谢谢

 类似资料:
  • 本文向大家介绍Android集成支付宝支付功能示例,包括了Android集成支付宝支付功能示例的使用技巧和注意事项,需要的朋友参考一下 公司项目中需要支付功能,现在支付宝、微信支付很方便,也很多人使用,因此,他们是首选。在此记录一下支付宝集成过程,下期为微信支付,敬请期待 首先去支付宝官网下载其最新的Android的SDK集成Dmeo 支付宝 选择SDK&Dmeo进行下载 将支付宝jar包添加项目

  • 我已经核实了Payumoney的帐户。当点击沙箱模式下的paynow按钮时,它会显示“发生了一些错误”。我使用了pnp SDK。 此代码用于onclick on paynow按钮。 这是哈希计算函数 执行流程: 用户在选择“在线支付”作为方法后,单击“paynow”按钮。 执行LaunchPayumOneyFlow()函数 所有附加到PayumOneYSDKInitializer.PaymentP

  • 我正在使用php集成的payumoney支付网关。现在我已经差不多做了,但只想在成功或失败后的响应自定义参数,当我从payumoney网站的付款过程返回。 因此,如果有人对此有想法,那么它将非常感谢。

  • 请检查屏幕截图,这个问题是有时发生,有时工作良好。如果有语法错误请原谅

  • 我已经将PayUMoney与我的android应用程序集成在一起,交易正常工作,但我没有得到任何响应数据,我必须根据支付交易的状态执行一些操作(如果成功,我必须执行一些操作,如果失败,我必须执行一些其他操作)。 这是我的代码

  • 我正在尝试整合payumoney支付网关在我的网站。我能完成交易。然而,我正在寻找一种方法,以获得已被收取的金额作为交易费的一个特定的交易。我在payumoney服务器在交易成功后发送的交易响应对象中找不到此字段,请帮助我。 示例: 响应对象:{“Country”:“”,“UDF10”:“”,“Discount”:“0.00”,“CardToken”:“789CE930DF72D5693ADFC”