gpt4 book ai didi

android - PayUBiz-安卓 : getting Mandatory param hash is missing

转载 作者:行者123 更新时间:2023-11-29 19:15:18 25 4
gpt4 key购买 nike

我正在将 PayUBiz 集成到我的 Android 应用程序中。我已经从 here. 下载了示例应用程序

它在测试环境中运行良好。虽然将实时 merchantId 和其他东西(如我的服务器 url)用于生成哈希,但它不起作用。它给出“缺少强制参数散列”

我试过的如下。

第一步:调用ma​​kePayment方法。

private void makePayment() {
int environment = PayuConstants.PRODUCTION_ENV;
double totalProductPrice = 1.0;
double conveniencePrice = 0.0;
double totalPayableAmount = totalProductPrice + (totalProductPrice * (conveniencePrice / 100));
//int environment = PayuConstants.STAGING_ENV;

sharedPref = new UserSharedPref(this);

userCredentials = merchantKey + ":" + sharedPref.getUserEmail();

mPaymentParams = new PaymentParams();

mPaymentParams.setKey(merchantKey);
mPaymentParams.setAmount(String.valueOf(totalPayableAmount));
mPaymentParams.setProductInfo("Our Store");
mPaymentParams.setFirstName(sharedPref.getUserName());
mPaymentParams.setEmail(sharedPref.getUserEmail());
mPaymentParams.setTxnId("" + System.currentTimeMillis());
mPaymentParams.setSurl("https://payu.herokuapp.com/success");
mPaymentParams.setFurl("https://payu.herokuapp.com/failure");
mPaymentParams.setUdf1("");
mPaymentParams.setUdf2("");
mPaymentParams.setUdf3("");
mPaymentParams.setUdf4("");
mPaymentParams.setUdf5("");
mPaymentParams.setUserCredentials(userCredentials);
//TODO Sets the payment environment in PayuConfig object
payuConfig = new PayuConfig();
payuConfig.setEnvironment(environment);
//TODO It is recommended to generate hash from server only. Keep your key and salt in server side hash generation code.
generatePayUHashFromServer(mPaymentParams);
}

第二步:调用generatePayUHashFromServer方法。

private void generatePayUHashFromServer(PaymentParams mPaymentParams) {
StringBuffer postParamsBuffer = new StringBuffer();
postParamsBuffer.append(concatParams(PayuConstants.KEY, mPaymentParams.getKey()));
postParamsBuffer.append(concatParams(PayuConstants.AMOUNT, mPaymentParams.getAmount()));
postParamsBuffer.append(concatParams(PayuConstants.TXNID, mPaymentParams.getTxnId()));
postParamsBuffer.append(concatParams(PayuConstants.EMAIL, null == mPaymentParams.getEmail() ? "" : mPaymentParams.getEmail()));
postParamsBuffer.append(concatParams(PayuConstants.PRODUCT_INFO, mPaymentParams.getProductInfo()));
postParamsBuffer.append(concatParams(PayuConstants.FIRST_NAME, null == mPaymentParams.getFirstName() ? "" : mPaymentParams.getFirstName()));
postParamsBuffer.append(concatParams(PayuConstants.UDF1, mPaymentParams.getUdf1() == null ? "" : mPaymentParams.getUdf1()));
postParamsBuffer.append(concatParams(PayuConstants.UDF2, mPaymentParams.getUdf2() == null ? "" : mPaymentParams.getUdf2()));
postParamsBuffer.append(concatParams(PayuConstants.UDF3, mPaymentParams.getUdf3() == null ? "" : mPaymentParams.getUdf3()));
postParamsBuffer.append(concatParams(PayuConstants.UDF4, mPaymentParams.getUdf4() == null ? "" : mPaymentParams.getUdf4()));
postParamsBuffer.append(concatParams(PayuConstants.UDF5, mPaymentParams.getUdf5() == null ? "" : mPaymentParams.getUdf5()));
postParamsBuffer.append(concatParams(PayuConstants.USER_CREDENTIALS, mPaymentParams.getUserCredentials() == null ? PayuConstants.DEFAULT : mPaymentParams.getUserCredentials()));
if (null != mPaymentParams.getOfferKey())
postParamsBuffer.append(concatParams(PayuConstants.OFFER_KEY, mPaymentParams.getOfferKey()));

JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("orderId", orderId);
jsonObject.put("userId", sharedPref.getUserId());
} catch (JSONException e) {
e.printStackTrace();
}
String postParams = jsonObject.toString();
// String postParams = postParamsBuffer.charAt(postParamsBuffer.length() - 1) == '&' ? postParamsBuffer.substring(0, postParamsBuffer.length() - 1).toString() : postParamsBuffer.toString();
Log.e("Post PAram for Hash", postParams);
// lets make an api call
GetHashesFromServerTask getHashesFromServerTask = new GetHashesFromServerTask();
getHashesFromServerTask.execute(postParams);
}

第三步:调用GetHashesFromServerTask方法。

private class GetHashesFromServerTask extends AsyncTask<String, String, PayuHashes> {
private ProgressDialog progressDialog;

@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(ActivityConfirmOrder.this);
progressDialog.setMessage("Please wait...");
progressDialog.setCancelable(false);
progressDialog.show();
}

@Override
protected PayuHashes doInBackground(String... postParams) {
PayuHashes payuHashes = new PayuHashes();
try {
URL url = new URL(AppConstant.BASE_URL + "/payment/getPaymentData");
String postParam = postParams[0];
Log.e("Post Params", postParams[0]);
byte[] postParamsByte = postParam.getBytes("UTF-8");

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", String.valueOf(postParamsByte.length));
conn.setDoOutput(true);
conn.getOutputStream().write(postParamsByte);

InputStream responseInputStream = conn.getInputStream();
StringBuffer responseStringBuffer = new StringBuffer();
byte[] byteContainer = new byte[1024];
for (int i; (i = responseInputStream.read(byteContainer)) != -1; ) {
responseStringBuffer.append(new String(byteContainer, 0, i));
}
Log.e("Hash Response:::", responseStringBuffer.toString());

JSONObject response = new JSONObject(responseStringBuffer.toString());

Iterator<String> payuHashIterator = response.keys();
while (payuHashIterator.hasNext()) {
String key = payuHashIterator.next();
switch (key) {
case "payment_hash":
payuHashes.setPaymentHash(response.getString(key));
break;
case "vas_for_mobile_sdk_hash":
payuHashes.setVasForMobileSdkHash(response.getString(key));
break;
case "payment_related_details_for_mobile_sdk_hash":
payuHashes.setPaymentRelatedDetailsForMobileSdkHash(response.getString(key));
break;

case "delete_user_card_hash":
payuHashes.setDeleteCardHash(response.getString(key));
break;
case "get_user_cards_hash":
payuHashes.setStoredCardsHash(response.getString(key));
break;
case "edit_user_card_hash":
payuHashes.setEditCardHash(response.getString(key));
break;
case "save_user_card_hash":
payuHashes.setSaveCardHash(response.getString(key));
break;

case "check_offer_status_hash":
payuHashes.setCheckOfferStatusHash(response.getString(key));
break;
default:
break;
}
}

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return payuHashes;
}

@Override
protected void onPostExecute(PayuHashes payuHashes) {
super.onPostExecute(payuHashes);

progressDialog.dismiss();
launchSdkUI(payuHashes);
}
}

第四步:其他方法

public void launchSdkUI(PayuHashes payuHashes) {
Intent intent = new Intent(ActivityConfirmOrder.this, PayUBaseActivity.class);
intent.putExtra(PayuConstants.PAYU_CONFIG, payuConfig);
intent.putExtra(PayuConstants.PAYMENT_PARAMS, mPaymentParams);
intent.putExtra(PayuConstants.PAYU_HASHES, payuHashes);
intent.putExtra(PayuConstants.SALT, merchantSalt);
intent.putExtra("PaymentType", "PAYU");
startActivityForResult(intent, PayuConstants.PAYU_REQUEST_CODE);
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {

if (requestCode == PayuConstants.PAYU_REQUEST_CODE) {
if (data != null) {
Log.e("PayuResponse", data.getStringExtra("payu_response"));

try {
JSONObject responseObject = new JSONObject(data.getStringExtra("payu_response"));
if (responseObject != null) {
if (responseObject.optString("status").equalsIgnoreCase("failure")) {

Toast.makeText(mContext, "Failure..", Toast.LENGTH_SHORT).show();


} else {
//Toast.makeText(getActivity(), getString(R.string.could_not_receive_data), Toast.LENGTH_LONG).show();
}
} else {
//Toast.makeText(getActivity(), getString(R.string.could_not_receive_data), Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
//Toast.makeText(getActivity(), getString(R.string.could_not_receive_data), Toast.LENGTH_LONG).show();
}

} else {
//Toast.makeText(getActivity(), getString(R.string.could_not_receive_data), Toast.LENGTH_LONG).show();
}
} else {
Log.e("Log MSg", "No Payu SDK Request Code");
}
}

protected String concatParams(String key, String value) {
return key + "=" + value + "&";
}

最佳答案

在 Android 应用程序中,您必须设置 3 个强制哈希键,否则您将收到错误“强制哈希键丢失”。确保您已将这 3 个键设置为 payuHashes 对象。

  1. payuHashes.setPaymentHash(response.getString(key));

  2. payuHashes.setVasForMobileSdkHash(response.getString(key));

  3. payuHashes.setPaymentRelatedDetailsForMobileSdkHash(response.getString(key));

关于android - PayUBiz-安卓 : getting Mandatory param hash is missing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43762234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com