Код: Выделить всё
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);
}
});
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... in-android
Мобильная версия