Как Сейчас я генерирую хэш локально для тестирования.
Этот код инициируется, когда я нажимаю кнопку «СДЕЛАТЬ ПЛАТЕЖ» -
Код: Выделить всё
HashGenerator hashGenerator;
PayUPaymentParams payUPaymentParams;
hashGenerator = new HashGenerator();
hashGenerator.setTxnid(String.valueOf(System.currentTimeMillis()));
hashGenerator.setAmount("1.00");
hashGenerator.setProductinfo("Macbook Pro");
hashGenerator.setFirstname("John");
hashGenerator.setEmail("john@gmail.com");
hashGenerator.setPhone("9999999999");
PayUPaymentParams.Builder builder = new PayUPaymentParams.Builder();
builder.setAmount(hashGenerator.getAmount())
.setIsProduction(true)
.setProductInfo(hashGenerator.getProductinfo())
.setKey(hashGenerator.getKey())
.setTransactionId(hashGenerator.getTxnid())
.setFirstName(hashGenerator.getFirstname())
.setEmail(hashGenerator.getEmail())
.setPhone(hashGenerator.getPhone())
.setSurl("https://cbjs.payu.in/sdk/success")
.setFurl("https://cbjs.payu.in/sdk/failure");
payUPaymentParams = builder.build();
PayUCheckoutPro.open(
this,
payUPaymentParams,
new PayUCheckoutProListener() {
@Override
public void onPaymentSuccess(Object response) {
}
@Override
public void onPaymentFailure(Object response) {
}
@Override
public void onPaymentCancel(boolean isTxnInitiated) {
}
@Override
public void onError(ErrorResponse errorResponse) {
}
@Override
public void setWebViewProperties(@Nullable WebView webView, @Nullable Object o) {
//For setting webview properties, if any. Check Customized Integration section for more details on this
}
@Override
public void generateHash(HashMap valueMap, PayUHashGenerationListener hashGenerationListener) {
String hashName = valueMap.get(PayUCheckoutProConstants.CP_HASH_NAME);
String hashData = valueMap.get(PayUCheckoutProConstants.CP_HASH_STRING);
if (!TextUtils.isEmpty(hashName) && !TextUtils.isEmpty(hashData)) {
//Do not generate hash from local, it needs to be calculated from server side only. Here, hashString contains hash created from your server side.
String hash = hashGenerator.generateHash();
Log.d("ABCDE", "HASH: "+hash);
HashMap dataMap = new HashMap();
dataMap.put(hashName, hash);
hashGenerationListener.onHashGenerated(dataMap);
}
}
}
);
Код: Выделить всё
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class HashGenerator {
private String txnid;
private String amount;
private String productinfo;
private String firstname;
private String email;
private String phone;
private final String key = "mykey";
private final String salt = "mysalt";
public HashGenerator() {
}
public String generateHash() {
String input = key + "|" + txnid + "|" + amount + "|" + productinfo + "|" + firstname + "|" + email + "|||||||||||" + salt;
return sha512(input.toLowerCase());
}
private static String sha512(String input) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-512");
byte[] hashBytes = md.digest(input.getBytes(StandardCharsets.UTF_8));
StringBuilder sb = new StringBuilder();
for (byte b : hashBytes) {
sb.append(String.format("%02x", b));
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
public String getKey() {
return key;
}
public String getTxnid() {
return txnid;
}
public void setTxnid(String txnid) {
this.txnid = txnid;
}
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
public String getProductinfo() {
return productinfo;
}
public void setProductinfo(String productinfo) {
this.productinfo = productinfo;
}
public String getSalt() {
return "QcOUKmTPLYigvaniwehruhFAGukJgZ6u";
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
- Использованные ключ и соль верны.
< li>Строка - Log.d("ABCDE", "HASH: "+hash); генерирует одну и ту же строку хэша 3 раза, когда я нажимаю кнопку «СДЕЛАТЬ ПЛАТЕЖ».
Как мне этого добиться? или есть еще какая-то проблема?
Подробнее здесь: https://stackoverflow.com/questions/791 ... in-android
Мобильная версия