Je suis nouveau dans Payment Gateway. Actuellement, je travaille sur une application mobile où je dois intégrer la passerelle de paiement PayU dans l'application Android.
Jusqu'à présent, j'ai créé un code pour l'URL TEST et lorsque je lance mon application, je reçois une exception ci-dessous:
An error occurred. Sorry, some problem occurred.
Capture d'écran de l'application mobile
Ceci est mon code:
public class PayMentGateWay extends Activity {
private ArrayList<String> post_val = new ArrayList<String>();
private String post_Data="";
WebView webView ;
final Activity activity = this;
private String tag = "PayMentGateWay";
private String hash,hashSequence;
String merchant_key="JBZaLc";
String salt="GQs7yium";
String action1 ="";
String base_url="https://test.payu.in";
int error=0;
String hashString="";
Map<String,String> params;
String txnid ="";
Handler mHandler = new Handler();
@SuppressLint("JavascriptInterface")
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
final ProgressDialog progressDialog = new ProgressDialog(activity);
getWindow().requestFeature(Window.FEATURE_PROGRESS);
webView = new WebView(this);
setContentView(webView);
post_val.add("key");
post_val.add("JBZaLc");
post_val.add("txnid");
post_val.add("5d59dae66618a14f5020");
post_val.add("amount");
post_val.add("100.00");
post_val.add("productinfo");
post_val.add("{paymentParts:[{name:abc,description:abcd,value:500,isRequired:true,settlementEvent:EmailConfirmation}], paymentIdentifiers:[{field:CompletionDate, value:25/06/2015}]}");
post_val.add("firstname");
post_val.add("pqrs");
post_val.add("email");
post_val.add("[email protected]");
post_val.add("phone");
post_val.add("xxxxxxxxxx");
post_val.add("surl");
post_val.add("https://www.google.com");
post_val.add("furl");
post_val.add("https://www.gmail.com");
post_val.add("hash");
post_val.add("");
post_val.add("provider");
post_val.add("payu_paisa");
Log.d(tag, "post_val: "+post_val);
params= new HashMap<String,String>();
for(int i = 0;i<post_val.size();){
params.put(post_val.get(i), post_val.get(i+1));
i+=2;
}
if(empty(params.get("txnid"))){
Random Rand = new Random();
String rndm = Integer.toString(Rand.nextInt())+(System.currentTimeMillis() / 1000L);
txnid=hashCal("SHA-256",rndm).substring(0,20);
popup("txnid : " + txnid);
System.out.println("......txnid...... " + txnid);
} else {
txnid=params.get("txnid");
System.out.println("....else.......txnid...... " + txnid);
}
//String udf2 = txnid;
String txn="abcd";
hash="";
String hashSequence = "key|txnid|amount|productinfo|firstname|email|udf1|udf2|udf3|udf4|udf5|udf6|udf7|udf8|udf9|udf10";
if(empty(params.get("hash")) && params.size()>0) {
if( empty(params.get("key"))
|| empty(params.get("txnid"))
|| empty(params.get("amount"))
|| empty(params.get("firstname"))
|| empty(params.get("email"))
|| empty(params.get("phone"))
|| empty(params.get("productinfo"))
|| empty(params.get("surl"))
|| empty(params.get("furl"))
|| empty(params.get("service_provider"))
) {
String[] hashVarSeq = hashSequence.split("\\|");
for (int i = 0; i < hashVarSeq.length; i++) {
System.out.println("<<<<<>>>>>>>> " + hashVarSeq[i]);
}
for(String part : hashVarSeq)
{
hashString= (empty(params.get(part))) ? hashString.concat("") : hashString.concat(params.get(part));
hashString=hashString.concat("|");
System.out.println("??????? " + hashString);
}
hashString=hashString.concat(salt);
hash=hashCal("SHA-512",hashString);
System.out.println(hashString + " /////~~~~~~ " + hash);
action1=base_url.concat("/_payment");
}
}
else if(!empty(params.get("hash")))
{
hash=params.get("hash");
action1=base_url.concat("/_payment");
System.out.println("!!!!!!!!HASHHHHHHH!!!!!! " + hash);
}
webView.setWebViewClient(new WebViewClient(){
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
// TODO Auto-generated method stub
System.out.println(">>>>>>>>>>>>>>onReceivedError>>>>>>>>>>>>>>>>>>");
Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();
}
@Override
public void onReceivedSslError(WebView view,
SslErrorHandler handler, SslError error) {
// TODO Auto-generated method stub
System.out.println(">>>>>>>>>>>>>>onReceivedSslError>>>>>>>>>>>>>>>>>>");
Toast.makeText(activity, "SslError! " + error, Toast.LENGTH_SHORT).show();
handler.proceed();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
System.out.println(">>>>>>>>>>>>>>shouldOverrideUrlLoading>>>>>>>>>>>>>>>>>>");
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
System.out.println(">>>>>>>>>>>>>>onPageFinished>>>>>>>>>>>>>>>>>>");
}
});
webView.setVisibility(0);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setCacheMode(2);
webView.getSettings().setDomStorageEnabled(true);
webView.clearHistory();
webView.clearCache(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setUseWideViewPort(false);
webView.getSettings().setLoadWithOverviewMode(false);
webView.addJavascriptInterface(new PayUJavaScriptInterface(activity), "PayUMoney");
Map<String, String> mapParams = new HashMap<String, String>();
mapParams.put("key",merchant_key);
mapParams.put("hash",PayMentGateWay.this.hash);
mapParams.put("txnid",(empty(PayMentGateWay.this.params.get("txnid"))) ? "" : PayMentGateWay.this.params.get("txnid"));
Log.d(tag, "txnid: "+PayMentGateWay.this.params.get("txnid"));
mapParams.put("service_provider","payu_paisa");
mapParams.put("amount",(empty(PayMentGateWay.this.params.get("amount"))) ? "" : PayMentGateWay.this.params.get("amount"));
mapParams.put("firstname",(empty(PayMentGateWay.this.params.get("firstname"))) ? "" : PayMentGateWay.this.params.get("firstname"));
mapParams.put("email",(empty(PayMentGateWay.this.params.get("email"))) ? "" : PayMentGateWay.this.params.get("email"));
mapParams.put("phone",(empty(PayMentGateWay.this.params.get("phone"))) ? "" : PayMentGateWay.this.params.get("phone"));
mapParams.put("productinfo",(empty(PayMentGateWay.this.params.get("productinfo"))) ? "" : PayMentGateWay.this.params.get("productinfo"));
mapParams.put("surl",(empty(PayMentGateWay.this.params.get("surl"))) ? "" : PayMentGateWay.this.params.get("surl"));
mapParams.put("furl",(empty(PayMentGateWay.this.params.get("furl"))) ? "" : PayMentGateWay.this.params.get("furl"));
mapParams.put("lastname",(empty(PayMentGateWay.this.params.get("lastname"))) ? "" : PayMentGateWay.this.params.get("lastname"));
mapParams.put("address1",(empty(PayMentGateWay.this.params.get("address1"))) ? "" : PayMentGateWay.this.params.get("address1"));
mapParams.put("address2",(empty(PayMentGateWay.this.params.get("address2"))) ? "" : PayMentGateWay.this.params.get("address2"));
mapParams.put("city",(empty(PayMentGateWay.this.params.get("city"))) ? "" : PayMentGateWay.this.params.get("city"));
mapParams.put("state",(empty(PayMentGateWay.this.params.get("state"))) ? "" : PayMentGateWay.this.params.get("state"));
mapParams.put("country",(empty(PayMentGateWay.this.params.get("country"))) ? "" : PayMentGateWay.this.params.get("country"));
mapParams.put("zipcode",(empty(PayMentGateWay.this.params.get("zipcode"))) ? "" : PayMentGateWay.this.params.get("zipcode"));
mapParams.put("udf1",(empty(PayMentGateWay.this.params.get("udf1"))) ? "" : PayMentGateWay.this.params.get("udf1"));
mapParams.put("udf2",(empty(PayMentGateWay.this.params.get("udf2"))) ? "" : PayMentGateWay.this.params.get("udf2"));
mapParams.put("udf3",(empty(PayMentGateWay.this.params.get("udf3"))) ? "" : PayMentGateWay.this.params.get("udf3"));
mapParams.put("udf4",(empty(PayMentGateWay.this.params.get("udf4"))) ? "" : PayMentGateWay.this.params.get("udf4"));
mapParams.put("udf5",(empty(PayMentGateWay.this.params.get("udf5"))) ? "" : PayMentGateWay.this.params.get("udf5"));
mapParams.put("pg",(empty(PayMentGateWay.this.params.get("pg"))) ? "" : PayMentGateWay.this.params.get("pg"));
webview_ClientPost(webView, action1, mapParams.entrySet());
}
public class PayUJavaScriptInterface {
Context mContext;
/** Instantiate the interface and set the context */
PayUJavaScriptInterface(Context c) {
mContext = c;
}
public void success(long id, final String paymentId) {
mHandler.post(new Runnable() {
public void run() {
mHandler = null;
Intent intent = new Intent(PayMentGateWay.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("result", "success");
intent.putExtra("paymentId", paymentId);
startActivity(intent);
finish();
}
});
}
}
public void webview_ClientPost(WebView webView, String url, Collection< Map.Entry<String, String>> postData){
StringBuilder sb = new StringBuilder();
sb.append("<html><head></head>");
sb.append("<body onload='form1.submit()'>");
sb.append(String.format("<form id='form1' action='%s' method='%s'>", url, "post"));
for (Map.Entry<String, String> item : postData) {
sb.append(String.format("<input name='%s' type='hidden' value='%s' />", item.getKey(), item.getValue()));
}
sb.append("</form></body></html>");
Log.d(tag, "webview_ClientPost called");
webView.loadData(sb.toString(), "text/html", "utf-8");
}
public void success(long id, final String paymentId) {
mHandler.post(new Runnable() {
public void run() {
mHandler = null;
Intent intent = new Intent(PayMentGateWay.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra(Constants.ACCOUNT_NAME, "success");
intent.putExtra(Constants._ID, paymentId);
startActivity(intent);
finish();
}
});
}
public boolean empty(String s)
{
if(s== null || s.trim().equals(""))
return true;
else
return false;
}
public 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 nsae){ }
return hexString.toString();
}
public void popup(String msg) {
Toast.makeText(PayMentGateWay.this, "" + msg, Toast.LENGTH_LONG).show();
}
}
Je ne sais vraiment pas quel est le problème exact. Pourquoi je ne peux pas voir la page suivante ou est-ce qu'il me manque quelque chose?
C'est arrivé à cause d'une erreur technique chez PayUMoney. Nécessaire pour contacter l'équipe de support pour émettre un nouveau code d'identification du commerçant.
Je pense que votre code est correct, je le fais également et ai appris de payu que test merchant_key et salt ne fonctionne pas actuellement. Essayez de mode de production.
Si vous souhaitez charger des données à partir d'un serveur (postUrl):
post_Data = "hash="+PayMentGateWay.this.hash+"&key="+merchant_key+"&txnid="+PayMentGateWay.this.params.get("txnid")+"&amount="+PayMentGateWay.this.params.get("amount")+
"&productinfo="+PayMentGateWay.this.params.get("productinfo")+"&firstname="+PayMentGateWay.this.params.get("firstname")+
"&email="+PayMentGateWay.this.params.get("email")+"&phone="+PayMentGateWay.this.params.get("phone")+
"&surl="+PayMentGateWay.this.params.get("surl")+"&furl="+ PayMentGateWay.this.params.get("furl")+
"&service_provider="+ "payu_paisa";
webView.postUrl("https://secure.payu.in/_payment", EncodingUtils.getBytes(post_Data, "base64"));
J'espère que cette aide.
Hé les gars, j'ai implémenté avec succès le paiement Gateway
Images utilisées dans le dialogue de progression
PayUMoneyActivity
public class PayUMoneyActivity extends AppCompatActivity {
WebView webView;
Context activity;
/**
* Order Id
* To Request for Updating Payment Status if Payment Successfully Done
*/
int mId;
private String mMerchantKey = "JBZaLc";//For merchant and salt key you need to contact payu money tech support otherwise you get error
private String mSalt = "GQs7yium";//copy and paste works fine
private String mBaseURL = "https://test.payu.in";
private String mAction = ""; // For Final URL
private String mTXNId; // This will create below randomly
private String mHash; // This will create below randomly
private String mProductInfo; // From Previous Activity
private String mFirstName; // From Previous Activity
private String mEmailId; // From Previous Activity
private double mAmount; // From Previous Activity
private String mPhone; // From Previous Activity
private String mServiceProvider = "payu_paisa";
private String mSuccessUrl = "https://payu.herokuapp.com/success";
private String mFailedUrl = "https://payu.herokuapp.com/failure";
boolean isFromOrder;
/**
* Handler os handler
*/
Handler mHandler = new Handler();
private String TAG = "User info";
private ProgressDialog progressDialog;
/**
* @param savedInstanceState
*/
@SuppressLint({"AddJavascriptInterface", "SetJavaScriptEnabled", "JavascriptInterface"})
@Override
protected void onCreate(Bundle savedInstanceState) {
// getWindow().requestFeature(Window.FEATURE_PROGRESS);
super.onCreate(savedInstanceState);
/**
* Setting WebView to Screen
*/
setContentView(R.layout.activity_payumoney);
/**
* start processing Payu dialog
*/
progressBarVisibilityPayuChrome(View.VISIBLE);
/**
* Creating WebView
*/
webView = (WebView) findViewById(R.id.payumoney_webview);
/**
* Context Variable
*/
activity = getApplicationContext();
/**
* Getting Intent Variables...
*/
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
mFirstName = bundle.getString("name");
mEmailId = bundle.getString("email");
mProductInfo = bundle.getString("productInfo");
mAmount = Double.parseDouble(bundle.getString("amount"));//in my case amount getting as String so i parse it double
mPhone = bundle.getString("phone");
mId = bundle.getInt("id");
isFromOrder = bundle.getBoolean("isFromOrder");
Log.i(TAG, "" + mFirstName + " : " + mEmailId + " : " + mAmount + " : " + mPhone);
/**
* Creating Transaction Id
*/
Random Rand = new Random();
String randomString = Integer.toString(Rand.nextInt()) + (System.currentTimeMillis() / 1000L);
mTXNId = hashCal("SHA-256", randomString).substring(0, 20);
mAmount = new BigDecimal(mAmount).setScale(0, RoundingMode.UP).intValue();
/**
* Creating Hash Key
*/
mHash = hashCal("SHA-512", mMerchantKey + "|" +
mTXNId + "|" +
mAmount + "|" +
mProductInfo + "|" +
mFirstName + "|" +
mEmailId + "|||||||||||" +
mSalt);
/**
* Final Action URL...
*/
mAction = mBaseURL.concat("/_payment");
/**
* WebView Client
*/
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
Toast.makeText(activity, "Oh no! " + error, Toast.LENGTH_SHORT).show();
}
@Override
public void onReceivedSslError(WebView view,
SslErrorHandler handler, SslError error) {
Toast.makeText(activity, "SSL Error! " + error, Toast.LENGTH_SHORT).show();
handler.proceed();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
if (url.equals(mSuccessUrl)) {
Intent intent = new Intent(PayUMoneyActivity.this, PaymentStatusActivity.class);
intent.putExtra("status", true);
intent.putExtra("transaction_id", mTXNId);
intent.putExtra("id", mId);
intent.putExtra("isFromOrder", isFromOrder);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
} else if (url.equals(mFailedUrl)) {
Intent intent = new Intent(PayUMoneyActivity.this, PaymentStatusActivity.class);
intent.putExtra("status", false);
intent.putExtra("transaction_id", mTXNId);
intent.putExtra("id", mId);
intent.putExtra("isFromOrder", isFromOrder);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
/**
* wait 10 seconds to dismiss payu money processing dialog in my case
*/
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
progressBarVisibilityPayuChrome(View.GONE);
}
}, 10000);
super.onPageFinished(view, url);
}
});
webView.setVisibility(View.VISIBLE);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setCacheMode(2);
webView.getSettings().setDomStorageEnabled(true);
webView.clearHistory();
webView.clearCache(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setUseWideViewPort(false);
webView.getSettings().setLoadWithOverviewMode(false);
webView.addJavascriptInterface(new PayUJavaScriptInterface(PayUMoneyActivity.this), "PayUMoney");
/**
* Mapping Compulsory Key Value Pairs
*/
Map<String, String> mapParams = new HashMap<>();
mapParams.put("key", mMerchantKey);
mapParams.put("txnid", mTXNId);
mapParams.put("amount", String.valueOf(mAmount));
mapParams.put("productinfo", mProductInfo);
mapParams.put("firstname", mFirstName);
mapParams.put("email", mEmailId);
mapParams.put("phone", mPhone);
mapParams.put("surl", mSuccessUrl);
mapParams.put("furl", mFailedUrl);
mapParams.put("hash", mHash);
mapParams.put("service_provider", mServiceProvider);
webViewClientPost(webView, mAction, mapParams.entrySet());
} else {
Toast.makeText(activity, "Something went wrong, Try again.", Toast.LENGTH_LONG).show();
}
}
/**
* Posting Data on PayUMoney Site with Form
*
* @param webView
* @param url
* @param postData
*/
public void webViewClientPost(WebView webView, String url, Collection<Map.Entry<String, String>> postData) {
StringBuilder sb = new StringBuilder();
sb.append("<html><head></head>");
sb.append("<body onload='form1.submit()'>");
sb.append(String.format("<form id='form1' action='%s' method='%s'>", url, "post"));
for (Map.Entry<String, String> item : postData) {
sb.append(String.format("<input name='%s' type='hidden' value='%s' />", item.getKey(), item.getValue()));
}
sb.append("</form></body></html>");
Log.d("TAG", "webViewClientPost called: " + sb.toString());
webView.loadData(sb.toString(), "text/html", "utf-8");
}
/**
* Hash Key Calculation
*
* @param type
* @param str
* @return
*/
public String hashCal(String type, String str) {
byte[] hashSequence = str.getBytes();
StringBuffer hexString = new StringBuffer();
try {
MessageDigest algorithm = MessageDigest.getInstance(type);
algorithm.reset();
algorithm.update(hashSequence);
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 NSAE) {
}
return hexString.toString();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == Android.R.id.home) {
onPressingBack();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
onPressingBack();
}
/**
* On Pressing Back
* Giving Alert...
*/
private void onPressingBack() {
final Intent intent;
if (isFromOrder)
intent = new Intent(PayUMoneyActivity.this, ProductInCartList.class);
else
intent = new Intent(PayUMoneyActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
AlertDialog.Builder alertDialog = new AlertDialog.Builder(PayUMoneyActivity.this);
alertDialog.setTitle("Warning");
alertDialog.setMessage("Do you cancel this transaction?");
alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finish();
startActivity(intent);
}
});
alertDialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alertDialog.show();
}
public class PayUJavaScriptInterface {
Context mContext;
PayUJavaScriptInterface(Context c) {
mContext = c;
}
public void success(long id, final String paymentId) {
mHandler.post(new Runnable() {
public void run() {
mHandler = null;
Toast.makeText(PayUMoneyActivity.this, "Payment Successfully.", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(PayUMoneyActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("result", "success");
intent.putExtra("paymentId", paymentId);
startActivity(intent);
finish();
}
});
}
}
public void progressBarVisibilityPayuChrome(int visibility) {
if (getApplicationContext() != null && !isFinishing()) {
if (visibility == View.GONE || visibility == View.INVISIBLE) {
if (progressDialog != null && progressDialog.isShowing())
progressDialog.dismiss();
} else if (progressDialog == null || !progressDialog.isShowing()) {
progressDialog = showProgress(this);
}
}
}
public ProgressDialog showProgress(Context context) {
if (getApplicationContext() != null && !isFinishing()) {
LayoutInflater mInflater = LayoutInflater.from(context);
final Drawable[] drawables = {getResources().getDrawable(R.drawable.l_icon1),
getResources().getDrawable(R.drawable.l_icon2),
getResources().getDrawable(R.drawable.l_icon3),
getResources().getDrawable(R.drawable.l_icon4)
};
View layout = mInflater.inflate(R.layout.prog_dialog, null);
final ImageView imageView;
imageView = (ImageView) layout.findViewById(R.id.imageView);
ProgressDialog progDialog = new ProgressDialog(context, R.style.ProgressDialog);
final Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
int i = -1;
@Override
synchronized public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
i++;
if (i >= drawables.length) {
i = 0;
}
imageView.setImageBitmap(null);
imageView.destroyDrawingCache();
imageView.refreshDrawableState();
imageView.setImageDrawable(drawables[i]);
}
});
}
}, 0, 500);
progDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
timer.cancel();
}
});
progDialog.show();
progDialog.setContentView(layout);
progDialog.setCancelable(true);
progDialog.setCanceledOnTouchOutside(false);
return progDialog;
}
return null;
}
}
prog_dialog.xml
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:padding="5dp">
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_centerInParent="true"
Android:layout_marginLeft="30dp"
Android:layout_marginRight="30dp"
Android:background="@drawable/shape_progress"
Android:gravity="center_horizontal"
Android:orientation="vertical">
<ImageView
Android:id="@+id/imageView"
Android:layout_width="90dp"
Android:layout_height="90dp"
Android:paddingTop="10dp"
Android:scaleType="centerInside"
Android:src="@drawable/l_icon1" />
<TextView
Android:id="@+id/dialog_title"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
Android:paddingTop="30dp"
Android:text="Processing Your Request"
Android:textSize="20dp"
Android:textStyle="normal"/>
<TextView
Android:id="@+id/dialog_desc"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:paddingTop="10dp"
Android:text="Please Wait..."
Android:textSize="15dp"
Android:textStyle="italic"/>
</LinearLayout>
</RelativeLayout>
activity_payumoney.xml
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/r_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:gravity="center_horizontal">
<FrameLayout
Android:id="@+id/parent"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
Android:visibility="gone" />
<WebView
Android:id="@+id/payumoney_webview"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
<LinearLayout
Android:id="@+id/trans_overlay"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@drawable/background_drawable"
Android:orientation="horizontal"/>
</RelativeLayout>
background_drawable.xml
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle">
<solid Android:color="#10000000"></solid>
<corners Android:radius="0dp" />
Ils n'ont pas activé le compte test.
"Désolé, un problème est survenu". Cette erreur survient lorsque vous ne disposez pas d'une clé de commerçant ni d'une clé de sel valides. Dans ce cas, vous devez contacter l’équipe d’assistance clientèle de PayU Money pour obtenir une clé de commerçant et de sel valide. J'espère que ceci vous aidera.
Téléchargez le projet de démonstration à partir d’ici lien vers le projet github
et changer
int env = PayuConstants.STAGING_ENV;
cela fera pour le mode test
Tableau de bord marchand PayUmoney - en haut à droite, vous verrez le "Mode direct", il suffit de l'activer pour le "Mode test". L'intégration de l'application Android de PayUmoney est simple. Ajouter ces dépendances dans le fichier Gradle
implementation 'com.payumoney.core:payumoney-sdk:7.4.4'
implementation 'com.payumoney.sdkui:plug-n-play:1.4.4'
Vous pouvez trouver PHP somme de contrôle. Fichiers de hachage et code source Android dans ce lien de référence .
Je faisais face au même problème et je me nourris de cette intégration.
Mais après avoir contacté l'équipe sportive de payumoney.com, ils m'ont dit que le kit d'intégration indiqué dans le kit de téléchargement n'était pas actif. Nous devons donc envoyer les coordonnées de votre entreprise, y compris les coordonnées bancaires, puis les vérifier, puis nous fournir le nouveau kit d’intégration. Avec ce kit, nous pouvons faire les tests.