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

payUmoney集成出现错误

周超英
2023-03-14

登录后,它生成了一个哈希值,但仍然给出错误“Some problem currened!try tain”。

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

builder.setAmount(10.0)
       .setTnxId("0nf7" + System.currentTimeMillis())
       .setPhone(<My phone>)
       .setProductName("product_name")
       .setFirstName(<My Name>)
       .setEmail(<My email>)
       .setsUrl("https://www.payumoney.com/mobileapp/payumoney/success.php")
       .setfUrl("https://www.payumoney.com/mobileapp/payumoney/failure.php")
       .setUdf1("").setUdf2("").setUdf3("").setUdf4("").setUdf5("")
       .setIsDebug(false)
       .setKey(<mykey>)
       .setMerchantId(<my debug merchant id>);

String tnxId="0nf7" + System.currentTimeMillis();
PayUmoneySdkInitilizer.PaymentParam paymentParam = builder.build();
String hashSequence = "<...>|"+tnxId+"|10.0|product_name|<My name>|<My email>|||||||||||salt";
String serverCalculatedHash= hashCal("SHA-512", hashSequence);
Toast.makeText(getApplicationContext(),
               serverCalculatedHash, Toast.LENGTH_SHORT).show();
paymentParam.setMerchantHash(serverCalculatedHash);
// calculateServerSideHashAndInitiatePayment(paymentParam);
PayUmoneySdkInitilizer.startPaymentActivityForResult(TrayActivity.this, paymentParam);
public static String hashCal(String type, String str) {
    byte[] hashseq = str.getBytes();
    StringBuffer hexString = new StringBuffer();
    try {
        MessageDigest algorithm = MessageDigest.getInstance(type);
        algorithm.reset();
        algorithm.update(hashseq);
        byte messageDigest[] = algorithm.digest();
        for (int i = 0; i<messageDigest.length; i++) {
            String hex = Integer.toHexString(0xFF &messageDigest[i]);
            if (hex.length() == 1) { hexString.append("0"); }
            hexString.append(hex);
        }
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } return hexString.toString();
}

共有1个答案

闾丘淇
2023-03-14

在代码中使用:

.setTnxId("0nf7" + System.currentTimeMillis())

然后稍后:

String tnxId="0nf7" + System.currentTimeMillis();

很可能不是唯一的问题,但是您真的想对这些使用两个不同的值吗(两次调用之间时间可能会改变)?在这两种情况下,您不希望使用相同的tnxid吗?

import java.util.Locale;

public class TransactionIdProvider {

    private final static String DEFAULT_PREFIX = "ID";

    // Convenient prime number for incrementing the counter
    private final static long ID_ADD = 0xF0AD;  // "f*ck off and die"

    // 64b counter with non-trivial start value
    private static long idCounter = 0x0101F00DDEADBEEFL;

    /**
     * Returns ID consisting of prefix string and 64b counter interleaved
     * with 32b per-4s-timestamp.
     * 
     * May produce identical ID (collision) when:
     * 1) class is reloaded within 4s
     *    (to fix: serialize "idCounter" upon shutdown/restart of VM, or
     *    modify prefix per start of VM)
     * 2) more than 2^64 IDs are requested within 4s (no fix, unexpected)
     * 3) more than 2^64 IDs are requested after cca. 550 years.
     *    (no fix, unexpected)
     * 4) more than one static instance of TransactionIdProvider is used
     *    (two or more VMs running the app) (to fix put different prefix in
     *    every VM/server running this)
     * 
     * Length of returned ID is prefix.length() + 24 alphanumeric symbols.
     */
    public static synchronized String getNewId(final String prefix) {
        idCounter += ID_ADD;    // increment counter
        // get 32b timestamp per ~4s (millis/4096) (good for ~550 years)
        final int timeStamp = (int)(System.currentTimeMillis()>>12);
        final int idPart1 = (int)(idCounter>>32);
        final int idPart2 = (int)(idCounter);
        return String.format(Locale.US, "%s%08X%08X%08X",
                             prefix, idPart1, timeStamp, idPart2);
    }

    public static String getNewId() {
        return getNewId(DEFAULT_PREFIX);
    }

}

不确定这个有多大的可用性,如果ID可能这么长。您可以随意使用/修改它。

我也在想,是不是我没有忘记一些重要的事情,却什么也想不起来了。

这一个的安全性方面仍然相当薄弱,因为在4S时间跨度内ID将像简单的相加,但至少它不会产生1、2、3...系列。

 类似资料:
  • 我试图将payUMoney集成到Node.js中,但我得到一个错误,作为 这里显示缺少参数furl,但我提供了这一点。我的代码如下:

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

  • 基本上我是按照这个指示做的:http://thecodeship.com/deployment/deploy-django-apache-virtualenv-and-mod_wsgi/ 但结果是: 尚未找到任何服务器 请求方法:获取请求URL:http://52.25.226.143/admin/ Django版本:1.5.11异常类型:ServerSelectionTimeoutError异常

  • 试图调用不存在的方法。尝试是从以下位置进行的: 以下方法不存在: 该方法的类javax.el.elutil可从以下位置获得:

  • 我正在我的Android应用程序中集成payUMoney。在测试和生产两个环境中都成功支付后,我只得到paymentId。我需要交易细节以及从Payumoney。我也联系了payUMoney的技术团队,但没有得到任何回应。 请看附上的图片为payUMoney响应,我已经打印在logcat。 我所尝试的如下所示。