Razorpay webview не инициализируется на первом щелчке в AndroidAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Razorpay webview не инициализируется на первом щелчке в Android

Сообщение Anonymous »

Я сталкиваюсь с проблемой в моем приложении Android при интеграции Razorpay. WebView не открывает и не открывает инициализируется на первом щелчке, но с второго щелчка он работает, как и ожидалось.
Я получаю ошибку для оформления заказа; Кто -нибудь может помочь мне найти и исправить проблему? Вот полный код: < /p>

Код: Выделить всё

public class Delivery_address_details_page extends AppCompatActivity implements PaymentResultListener {

LinearLayout page_title;
TextView userName, userAddress, userPhone;
Button changeAddressBtn;
ImageView productImg;
TextView product_name, discount_price, totalAmount, deliveryDate;
SharedPref sharedPref;
Button btnProceedToPayment;
String mode, orderId, razorpayOrderId, razorpayKeySecret;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_delivery_address_details_page);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) ->  {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});

sharedPref = new SharedPref(Delivery_address_details_page.this);

deliveryDate = findViewById(R.id.deliveryDate);

page_title = findViewById(R.id.page_title);
page_title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});

btnProceedToPayment = findViewById(R.id.btnProceedToPayment);

userName = findViewById(R.id.userName);
userAddress = findViewById(R.id.userAddress);
userPhone = findViewById(R.id.userPhone);

productImg = findViewById(R.id.productImg);
product_name = findViewById(R.id.product_name);
discount_price = findViewById(R.id.discount_price);
totalAmount = findViewById(R.id.totalAmount);

productImg.setImageBitmap(sharedPref.getImage("product_img"));
product_name.setText(sharedPref.getString("product_name"));
discount_price.setText(sharedPref.getString("discount_price"));
totalAmount.setText(sharedPref.getString("discount_price"));

loadDefaultDeliveryAddressViaServer();
loadDeliveryDateViaServer();

changeAddressBtn = findViewById(R.id.changeAddressBtn);
changeAddressBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(), Choose_delivery_address_page.class);
startActivity(intent);
}
});

// checkout preload razorpay
try {
Checkout.preload(Delivery_address_details_page.this);
} catch (Exception e){
Log.e("OrderApi", "Error in checkout preload :  "+e.getMessage());
Toast.makeText(this, "Checkout", Toast.LENGTH_SHORT).show();
}

ProgressBar progressBar_btn = findViewById(R.id.progressBar_btn);
btnProceedToPayment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
progressBar_btn.setVisibility(View.VISIBLE);
btnProceedToPayment.setText("");

new Handler().postDelayed(new Runnable() {
@Override
public void run() {

if ("buynow".equals(getIntent().getStringExtra("fromPage"))) {
placeOrderViaServer();
} else if ("cart".equals(getIntent().getStringExtra("fromPage"))) {
placeCartOrderViaServer();
}

progressBar_btn.setVisibility(View.GONE);
btnProceedToPayment.setText("Place Order");
}
}, 400);
}
});
}

private void setPaymentMode(String mode, String orderId, String razorpayOrderId, String keySecret) {
this.mode = mode;
this.orderId = orderId;
this.razorpayOrderId = razorpayOrderId;
this.razorpayKeySecret = keySecret;
}

private String getRazorpayOrderId() {
return razorpayOrderId;
}

private String getMode() {
return mode;
}

public String getOrderId() {
return orderId;
}

private void placeCartOrderViaServer() {

JSONObject order = new JSONObject();
try {
order.put("paymentMethod", "ONLINE");
order.put("deliveryAddressId", sharedPref.getString("deliveryAddressId"));
} catch (JSONException e) {
throw new RuntimeException(e);
}

OrderApi.placeCartOrder(Delivery_address_details_page.this, order, new OrderApi.ApiCallback() {
@Override
public void onSuccess(JSONObject response) throws JSONException {
Log.d("OrderApi", response.toString());

String razorpayOrderId = response.getString("razorpayOrderId");
String amount = response.getString("amount");
String currency = response.getString("currency");
String key = response.getString("key");
String keySecret = response.optString("keySecret", "null");
String message = response.getString("message");
String orderId = response.getString("orderId");

Log.d("OrderApi","amount "+ amount);

//                if cart order details are saved to the database, then start payment
startPaymentViaRazorpay(razorpayOrderId, amount, currency, key, keySecret, message, orderId, "cart");

//                Toast.makeText(Delivery_address_details_page.this, "Order placed !", Toast.LENGTH_SHORT).show();
}

@Override
public void onError(String error) {
Log.e("OrderApi", error);
Toast.makeText(Delivery_address_details_page.this, "Error in placing order", Toast.LENGTH_SHORT).show();
}
});
}

private void placeOrderViaServer() {

JSONObject order = new JSONObject();
try {
order.put("productId", sharedPref.getString("productId"));
order.put("quantity", sharedPref.getString("productQuantity"));
order.put("paymentMethod", "ONLINE");
} catch (JSONException e) {
throw new RuntimeException(e);
}

OrderApi.placeOrder(Delivery_address_details_page.this, order, new OrderApi.ApiCallback() {
@Override
public void onSuccess(JSONObject response) throws JSONException {
Log.d("OrderApi",  response.toString());

String razorpayOrderId = response.getString("razorpayOrderId");
String amount = response.getString("amount");
String currency = response.getString("currency");
String key = response.getString("key");
String keySecret = response.optString("keySecret", "null");
String message = response.getString("message");
String orderId = response.getString("orderId");

//                if order details are saved to the database, then start payment
startPaymentViaRazorpay(razorpayOrderId, amount, currency, key, keySecret, message, orderId, "direct");

//                Toast.makeText(Delivery_address_details_page.this, "Order placed !", Toast.LENGTH_SHORT).show();
}

@Override
public void onError(String error) {
Log.e("OrderApi", error);
Toast.makeText(Delivery_address_details_page.this, "Error in placing order", Toast.LENGTH_SHORT).show();
}
});
}

private void loadDeliveryDateViaServer() {
OrderApi.getDeliveryDate(Delivery_address_details_page.this, new OrderApi.ApiCallback() {
@Override
public void onSuccess(JSONObject response) {
try {
String estimatedDeliveryDate = response.getString("estimatedDeliveryDate");
deliveryDate.setText(estimatedDeliveryDate);
//                    Toast.makeText(Delivery_address_details_page.this, "delivery date :" + estimatedDeliveryDate, Toast.LENGTH_SHORT).show();
} catch (JSONException e) {
Log.e("DeliveryDate", e.getMessage());
}
}

@Override
public void onError(String error) {
Toast.makeText(Delivery_address_details_page.this, "Failed to fetch delivery date !", Toast.LENGTH_SHORT).show();
}
});
}

private void startPaymentViaRazorpay(String razorpayOrderId, String total_amount, String currency, String key, String keySecret, String message, String orderId, String mode) {
Log.d("OrderApi", "razorpay");

//        round off the amount
int amountInt = (int) Math.round(Double.parseDouble(total_amount)) * 100;
Log.d("OrderApi", String.valueOf(amountInt));

//        initialize razorpay account
Checkout checkout = new Checkout();

//        set key
checkout.setKeyID(key);

//        set img
checkout.setImage(R.drawable.logo);

//        initialize json object
JSONObject jsonObject = new JSONObject();
try {
Log.d("OrderApi", "jsonobject");
jsonObject.put("name", "Ranu Infotech");
jsonObject.put("description", message);
jsonObject.put("theme.color", "#6699ff");
jsonObject.put("currency", currency);
jsonObject.put("amount", amountInt);
jsonObject.put("order_id", razorpayOrderId);

Log.d("OrderApi", "set payment mode");
setPaymentMode(mode, orderId, razorpayOrderId, keySecret);

Log.d("OrderApi", "Checkout open");
checkout.open(Delivery_address_details_page.this, jsonObject);
Log.d("OrderApi", "Checkout opened");

} catch (Exception e) {
Toast.makeText(this, "Error in payment", Toast.LENGTH_SHORT).show();
Log.e("OrderApi", "Payment failed ! "  +e.getMessage());
}
}

@Override
public void onPaymentSuccess(String razorpayPaymentId) {
//        if payment get success then verify it and change status of order in database
Log.d("OrderApi", "payment success calling");
verifyPaymentViaServer(razorpayPaymentId);
Log.d("OrderApi", "payment success called");
Toast.makeText(this, "Payment Successful", Toast.LENGTH_SHORT).show();
}

private void verifyPaymentViaServer(String razorpayPaymentId) {
Log.d("OrderApi", "payment verification");
try {
if (razorpayOrderId == null || razorpayKeySecret == null) {
Toast.makeText(this, "Payment data missing", Toast.LENGTH_SHORT).show();
return;
}

JSONObject order = new JSONObject();
order.put("razorpayOrderId", getRazorpayOrderId());
order.put("razorpayPaymentId", razorpayPaymentId);
order.put("razorpaySignature", generateSignature(razorpayOrderId, razorpayPaymentId, razorpayKeySecret));
order.put("mode", getMode());
order.put("productId", sharedPref.getString("productId"));
order.put("quantity", sharedPref.getString("productQuantity"));

Log.d("OrderApi", "payment verification called : "+order.toString());

OrderApi.paymentVerification(Delivery_address_details_page.this, order, new OrderApi.ApiCallback() {
@Override
public void onSuccess(JSONObject response) throws JSONException {
Toast.makeText(Delivery_address_details_page.this, "Payment Verified!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getApplicationContext(), HomePage3.class);
startActivity(intent);
finishAffinity();
}

@Override
public void onError(String error) {
Toast.makeText(Delivery_address_details_page.this, "Payment Failed!", Toast.LENGTH_SHORT).show();
Log.e("OrderApi", "Error : " + error);
}
});
} catch (JSONException e) {
Toast.makeText(this, "Payment verification error", Toast.LENGTH_SHORT).show();
}
}

private String generateSignature(String orderId, String paymentId, String keySecret) {
try {
String payload = orderId + "|" + paymentId;
Mac mac = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKeySpec = new SecretKeySpec(keySecret.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
mac.init(secretKeySpec);
byte[] hash = mac.doFinal(payload.getBytes(StandardCharsets.UTF_8));

// Convert hash to hexadecimal string
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) hexString.append('0');
hexString.append(hex);
}

return hexString.toString();
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
Log.e("Signature", "Error generating signature: " + e.getMessage());
return "";
}
}

@Override
public void onPaymentError(int i, String s) {
Toast.makeText(this, "Payment Failed!", Toast.LENGTH_SHORT).show();
Log.e("Payment", "Payment Error: " + s);
}

private void loadDefaultDeliveryAddressViaServer() {
DeliveryApi.getDefaultDeliveryAddress(this, new DeliveryApi.ApiCallback() {
@Override
public void onSuccess(JSONObject response) {
try {
userName.setText(response.getString("name"));
userAddress.setText(response.getString("address").concat("  - ").concat(response.getString("pin")));
userPhone.setText(response.getString("phNumber"));

sharedPref.saveString("deliveryAddressId", response.getString("id"));

} catch (JSONException e) {
e.printStackTrace();
}
}

@Override
public void onError(String error) {
//                handle this error for bad request
userName.setText("");
userAddress.setText("");
userPhone.setText("");

changeAddressBtn.setText("Add address");
changeAddressBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

Intent intent = new Intent(Delivery_address_details_page.this, ChangeDeliveryAddressPage.class);
intent.putExtra("addAddressFirstTime", "true");
startActivity(intent);
}
});
//                Button btnProceedToPayment = findViewById(R.id.btnProceedToPayment);
//                btnProceedToPayment.setEnabled(false);

Log.e("Delivery", "Error : "  + error);
}
});
}
}
< /code>
Это полная трассировка стека (ошибка, которую я получаю)
Это полная ошибка,  я   п о л у ч а ю   <   / p >   < b r   / > < c o d e >                                                                                                                                         j a v a . l a n g . r e f l e c t . I n v o c a t i o n T a r g e t E x c e p t i o n < b r   / >                                                                                                                                                                                                         a t   j a v a . l a n g . r e f l e c t . M e t h o d . i n v o k e ( N a t i v e   M e t h o d ) < b r   / >                                                                                                                                                                                                         a t   a n d r o i d . w e b k i t . W e b V i e w F a c t o r y . g e t P r o v i d e r ( W e b V i e w F a c t o r y . j a v a : 3 5 5 ) < b r   / >                                                                                                                                                                                                         a t   a n d r o i d . w e b k i t . W e b V i e w . g e t F a c t o r y ( W e b V i e w . j a v a : 2 6 2 0 ) < b r   / >                                                                                                                                                                    at android.webkit.WebView.ensureProviderCreated(WebView.java:2614)
at android.webkit.WebView.setOverScrollMode(WebView.java:2682)
at android.view.View.(View.java:5613)
at android.view.View.(View.java:5767)
at android.view.ViewGroup.(ViewGroup.java:719)
at android.widget.AbsoluteLayout.(AbsoluteLayout.java:56)
at android.webkit.WebView.(WebView.java:426)
at android.webkit.WebView.(WebView.java:368)
at android.webkit.WebView.(WebView.java:350)
at android.webkit.WebView.(WebView.java:337)
at android.webkit.WebView.(WebView.java:327)
at com.razorpay.Checkout.preload(Checkout.java:308)
at com.example.ranu_frontend.Delivery_address_details_page.onCreate(Delivery_address_details_page.java:66)
at android.app.Activity.performCreate(Activity.java:8891)
at android.app.Activity.performCreate(Activity.java:8856)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1471)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3973)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4144)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:99)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2589)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:224)
at android.os.Looper.loop(Looper.java:318)
at android.app.ActivityThread.main(ActivityThread.java:8780)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:561)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
Caused by:  java.lang.RuntimeException: Package not found:  c o m . g o o g l e . a n d r o i d . w e b v i e w < b r   / >                                                                                                                                                                                                         a t   a n d r o i d . w e b k i t . W e b V i e w D e l e g a t e . g e t P a c k a g e I d ( W e b V i e w D e l e g a t e . j a v a : 1 5 9 ) < b r   / >                                                                                                                                                                                                         a t   c o m . a n d r o i d . w e b v i e w . c h r o m i u m . W e b V i e w C h r o m i u m F a c t o r y P r o v i d e r . & l t ; i n i t & g t ; ( c h r o m i u m - T r i c h r o m e W e b V i e w G o o g l e 6 4 3 2 . a a b - s t a b l e - 7 2 0 4 0 4 5 3 3 : 3 5 3 ) < b r   / >                                                                                                                                                                                                         a t   c o m . a n d r o i d . w e b v i e w . c h r o m i u m . W e b V i e w C h r o m i u m F a c t o r y P r o v i d e r F o r T . & l t ; i n i t & g t ; ( c h r o m i u m - T r i c h r o m e W e b V i e w G o o g l e 6 4 3 2 . a a b - s t a b l e - 7 2 0 4 0 4 5 3 3 : 1 ) < b r   / >                                                                                                                                                                                                         a t   c o m . a n d r o i d . w e b v i e w . c h r o m i u m . W e b V i e w C h r o m i u m F a c t o r y P r o v i d e r F o r T . c r e a t e ( c h r o m i u m - T r i c h r o m e W e b V i e w G o o g l e 6 4 3 2 . a a b - s t a b l e - 7 2 0 4 0 4 5 3 3 : 3 ) < b r   / >                                                                                                                                                                                                         a t   j a v a . l a n g . r e f l e c t . M e t h o d . i n v o k e ( N a t i v e   M e t h o d )   < b r   / >                                                                                                                                                                                                         a t   a n d r o i d . w e b k i t . W e b V i e w F a c t o r y . g e t P r o v i d e r ( W e b V i e w F a c t o r y . j a v a : 3 5 5 )   < b r   / >                                                                                                                                                                                                         a t   a n d r o i d . w e b k i t . W e b V i e w . g e t F a c t o r y ( W e b V i e w . j a v a : 2 6 2 0 )   < b r   / >                                                                                                                    at android.webkit.WebView.ensureProviderCreated(WebView.java:2614) 
at android.webkit.WebView.setOverScrollMode(WebView.java:2682) 
at android.view.View.(View.java:5613) 
at android.view.View.(View.java:5767) 
at android.view.ViewGroup.(ViewGroup.java:719) 
at android.widget.AbsoluteLayout.(AbsoluteLayout.java:56) 
at android.webkit.WebView.(WebView.java:426) 
at android.webkit.WebView.(WebView.java:368) 
at android.webkit.WebView.(WebView.java:350) 
at android.webkit.WebView.(WebView.java:337) 
at android.webkit.WebView.(WebView.java:327) 
at com.razorpay.Checkout.preload(Checkout.java:308) 
at com.example.ranu_frontend.Delivery_address_details_page.onCreate(Delivery_address_details_page.java:66) 
at android.app.Activity.performCreate(Activity.java:8891) 
at android.app.Activity.performCreate(Activity.java:8856) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1471) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3973) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4144) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:99) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2589) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loopOnce(Looper.java:224) 
at android.os.Looper.loop(Looper.java:318) 
at android.app.ActivityThread.main(ActivityThread.java:8780) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:561) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013) 
2025-07-05 08: 48: 31.761 8001-8001 Razorpay com.example.ranu_frontend e Причина: java.lang.reflect.invocationTargetException


Подробнее здесь: https://stackoverflow.com/questions/796 ... in-android
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»