getSetting( 'key_id' ), $razorpay->getSetting( 'key_secret' ) );
$data = $this->get_order_creation_data( $orderId, $razorpay );
$razorpay_order = $api->order->create( $data );
$razorpayOrderId = $razorpay_order['id'];
WC()->session->set( $sessionKey, $razorpayOrderId );
return $razorpayOrderId;
}
function get_order_creation_data( $order_id, $razorpay ) {
$order = wc_get_order( $order_id );
if ( ! isset( $this->payment_action ) ) {
$razorpay->payment_action = 'capture';
}
$data = array(
'receipt' => $order_id,
'amount' => (int) ( $order->get_total() * 100 ),
'currency' => get_woocommerce_currency(),
);
switch ( $razorpay->payment_action ) {
case 'authorize':
$data['payment_capture'] = 0;
break;
case 'capture':
default:
$data['payment_capture'] = 1;
break;
}
return $data;
}
public function sdk_config( $return ) {
if(is_wp_error($return)){
return $return;
}
if ( isset( $return['sdk'] ) && 'razorpay' === $return['sdk'] ) {
global $woocommerce;
$orderId = $return['order_id'];
$gateways = WC()->payment_gateways()->payment_gateways();
$razorpay = $gateways['razorpay'];
$order = wc_get_order( $orderId );
$productinfo = "Order $orderId";
$sessionKey = $this->getSessionKey( $orderId );
WC()->session->set( WC_Razorpay::SESSION_KEY, $orderId );
try {
$razorpayOrderId = $woocommerce->session->get( $sessionKey );
// If we don't have an Order
// or the if the order is present in session but doesn't match what we have saved
if ( ( $razorpayOrderId === null ) or
( ( $razorpayOrderId and ( $this->verifyOrderAmount( $razorpayOrderId, $orderId, $razorpay ) ) === false ) )
) {
$razorpayOrderId = $this->createRazorpayOrderId(
$orderId, $sessionKey, $razorpay );
}
} catch ( Exception $e ) {
return new WP_Error( 'failure',$e->getMessage() );
}
$return['sdk_config'] = array(
'key' => $razorpay->getSetting( 'key_id' ),
'name' => get_bloginfo( 'name' ),
'amount' => $order->get_total() * 100,
'currency' => get_woocommerce_currency(),
'description' => $productinfo,
'prefill' => array(),
'notes' => array(
'woocommerce_order_id' => $orderId,
),
'order_id' => $razorpayOrderId,
);
if ( method_exists( $order, 'get_billing_first_name' ) ) {
$return['sdk_config']['prefill'] = array(
'name' => method_exists( $order,'get_billing_first_name' ) ? $order->get_billing_first_name() : $order->billing_first_name . ' ' . $order->get_billing_last_name(),
'email' => $order->get_billing_email(),
'contact' => $order->get_billing_phone(),
);
} else {
$return['sdk_config']['prefill'] = array(
'name' => $order->billing_first_name . ' ' . $order->billing_last_name,
'email' => $order->billing_email,
'contact' => $order->billing_phone,
);
}
}
return $return;
}
function verifyOrderAmount( $razorpayOrderId, $orderId, $razorpay ) {
$order = wc_get_order( $orderId );
$api = new Api( $razorpay->getSetting( 'key_id' ), $razorpay->getsetting('key_secret') );
$razorpayOrder = $api->order->fetch( $razorpayOrderId );
$razorpayOrderArgs = array(
'id' => $razorpayOrderId,
'amount' => (int) $order->get_total() * 100,
'currency' => get_woocommerce_currency(),
'receipt' => (string) $orderId,
);
$orderKeys = array_keys( $razorpayOrderArgs );
foreach ( $orderKeys as $key ) {
if ( $razorpayOrderArgs[ $key ] !== $razorpayOrder[ $key ] ) {
return false;
}
}
return true;
}
public function handle_sdk( $return, $request ) {
$order_id = WC()->session->get( WC_Razorpay::SESSION_KEY );
$gateways = WC()->payment_gateways()->payment_gateways();
/** @var WC_Razorpay $razorpay */
$razorpay = $gateways['razorpay'];
$status = false;
$message = 'order is = ';
//$_POST['razorpay_payment_id']='rzp_test_0iToq7AHeqyuvN';
if ( ! empty( $order_id ) && ! empty( $_POST['razorpay_payment_id'] ) ) {
$razorpay_payment_id = $_POST['razorpay_payment_id'];
$order = wc_get_order( $order_id );
$key_id = $razorpay->getSetting( 'key_id' );
$key_secret = $razorpay->getsetting('key_secret');
$amount = $order->get_total() * 100;
$api = new Api( $key_id, $key_secret );
$payment = $api->payment->fetch( $razorpay_payment_id );
//$razorpay->payment_action = 'authorize';$payment['amount']=7600;
try {
if ( $razorpay->getSetting('payment_action') === 'authorize' && $payment['amount'] === $amount ) {
$success = true;
} else {
//$sessionKey = $this->getSessionKey($order_id);
$razorpay_order_id = $_POST['razorpay_order_id'];
$razorpay_signature = $_POST['razorpay_signature'];
$signature = hash_hmac( 'sha256', $razorpay_order_id . '|' . $razorpay_payment_id, $key_secret );
if ( hash_equals( $signature, $razorpay_signature ) ) {
$success = true;
} else {
$success = false;
$message = 'PAYMENT_ERROR: Payment failed';
}
}
} catch ( Exception $e ) {
$success = false;
$message = 'WOOCOMMERCE_ERROR: Request to Razorpay Failed';
}
if ( $success === true ) {
$status = true;
// $this->msg['message'] = "Thank you for shopping with us. Your account has been charged and your transaction is successful. We will be processing your order soon. Order Id: $order_id";
$order->payment_complete();
$order->add_order_note( "Razorpay payment successful
Razorpay Id: $razorpay_payment_id" );
WC()->cart->empty_cart();
} else {
$message = 'Thank you for shopping with us. However, the payment failed.';
$order->add_order_note( 'Transaction Declined
' );
$order->add_order_note( "Payment Failed. Please check Razorpay Dashboard.
Razorpay Id: $razorpay_payment_id" );
$order->update_status( 'failed' );
}
} // We don't have a proper order id
else {
if ( $order_id !== null ) {
$order = wc_get_order( $order_id );
$order->update_status( 'failed' );
$order->add_order_note( 'Customer cancelled the payment' );
}
$message = 'An error occurred while processing this payment';
}
if ( $status ) {
return array( 'status' => true, 'order_id' => $order_id );
} else {
return new WP_Error( 'error', $message, array( 'order_id' => $order_id ) );
}
}
}
new APPMAKER_WC_Gateway_RazorPay();