Reputation: 1892
I'm implement Razorpay
with PaymentResultWithDataListener
. Actually i need order_id
and signature
so i use PaymentResultWithDataListener
not used PaymentResultListener
because there are no option to get order_id
and signature
. And I have follow these links
https://docs.razorpay.com/v1/page/orders#verifying-the-signature
https://github.com/razorpay/razorpay-android-sample-app
But not getting any solution.
Menifest File
<meta-data
android:name="com.razorpay.ApiKey"
android:value="rzp_test_PLbERPkkqGZkOF" />
build.gradle
api 'com.razorpay:checkout:1.5.4'
I got an error
{"code":"BAD_REQUEST_ERROR","description":"ay_order_id is not a valid id"}
I am trying with this code
public class CheckoutActivity extends AppCompatActivity implements View.OnClickListener, PaymentResultWithDataListener {
private static final String TAG = CheckoutActivity.class.getSimpleName();
Button mCheckOutView;
String OrderId = "";
String signature = "";
String order_id = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_payment_method);
Checkout.preload(getApplicationContext());
mCheckOutView = findViewById(R.id.check_out);
mCheckOutView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v == mCheckOutView) {
startPayment();
}
}
public void startPayment() {
/*
You need to pass current activity in order to let Razorpay create CheckoutActivity
*/
final Activity activity = this;
final Checkout co = new Checkout();
try {
JSONObject options = new JSONObject();
options.put("name","Test");
options.put("description", getString(R.string.app_name));
options.put("key", getString(R.string.api_key));
options.put("order_id","razorpay_order_id");
options.put("signature","razorpay_signature");
options.put("currency", "INR");
options.put("amount", 100);
JSONObject preFill = new JSONObject();
preFill.put("email", "[email protected]");
preFill.put("contact", "9999999999");
options.put("prefill", preFill);
JSONObject notesData=new JSONObject();
notesData.put("Order Id","order123");
notesData.put("address","Test Address");
options.put("notes", notesData);
JSONObject theme=new JSONObject();
theme.put("color","#738598");
theme.put("emi_mode",true);
options.put("theme", theme);
co.open(activity, options);
} catch (Exception e) {
Toast.makeText(activity, "Error in payment: " + e.getMessage(), Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
@Override
public void onPaymentSuccess(String s, PaymentData paymentData) {
String paymentId = paymentData.getPaymentId();
String signature = paymentData.getSignature(); // got null
String orderId = paymentData.getOrderId(); // got null
}
@Override
public void onPaymentError(int i, String s, PaymentData paymentData) {
Log.e(TAG,s); //error {"code":"BAD_REQUEST_ERROR","description":"ay_order_id is not a valid id"}
}
}
If i remove these 2 lines then this error not comes.
options.put("order_id","razorpay_order_id");
options.put("signature","razorpay_signature");
But paymentData.getSignature()
and paymentData.getOrderId()
is null
.
Any help will be appreciated.
Upvotes: 5
Views: 25499
Reputation: 126
options.put("order_id","**razorpay_order_id**");
you need to generate this order_id from razorpay Order_ID API, only after this order_id which comes as a response from the API you would be able to process smoothly. After getting this Order_id from API, send it in above code in value (in place of razorpay_order_id)
options.put("signature","razorpay_signature");
This is not required in request. This will be generated at your server and will be used when a response is received in PaymentResultWithDataListener
function. Read Signature generation method in official Documentation here : https://razorpay.com/docs/payment-gateway/android-integration/standard/
Upvotes: 2
Reputation: 6037
According to the official docs, by the time you start the checkout, you get the order_id
when the merchant's backend starts an order with the RazorPay backend.
See the diagram here`.
As for the signature, according with the docs that's not something you put but something that comes from server responses and which you have to validate on your end. Check this
Upvotes: 0