From 8fe1f267a6b2fe310d7af0088909f48d68ceee8f Mon Sep 17 00:00:00 2001 From: Hadi Hosseini <111495011+HadiWP@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:21:20 +0330 Subject: [PATCH] add v3 --- Contact-Form-7-PayPing.php | 4 +- inc/CreatePay.php | 24 ++++--- inc/gateway.php | 143 +++++++++++++++++++++++-------------- readme.txt | 27 +++++++ 4 files changed, 132 insertions(+), 66 deletions(-) create mode 100644 readme.txt diff --git a/Contact-Form-7-PayPing.php b/Contact-Form-7-PayPing.php index 84fbab5..0b79603 100644 --- a/Contact-Form-7-PayPing.php +++ b/Contact-Form-7-PayPing.php @@ -1,9 +1,9 @@ Masoud Amini. -Version: 1.0.0 +Version: 1.1.0 Author: Mahdi Sarani Author URI: https://mahdisarani.ir Text Domain: CF7PayPing diff --git a/inc/CreatePay.php b/inc/CreatePay.php index 5627d34..083988b 100644 --- a/inc/CreatePay.php +++ b/inc/CreatePay.php @@ -64,12 +64,13 @@ $clientrefid = $wpdb->insert_id; /* Create Pay */ $pay_data = array( - 'payerName' => $Paymenter, - 'Amount' => $Amount, - 'payerIdentity'=> $payerIdentity , - 'returnUrl' => $CallbackURL, - 'Description' => $Description , - 'clientRefId' => $clientrefid + 'PayerName' => $Paymenter, + 'Amount' => $Amount, + 'PayerIdentity' => $payerIdentity , + 'ReturnUrl' => $CallbackURL, + 'Description' => $Description , + 'clientRefId' => (string) $clientrefid, + 'NationalCode' => '' ); $pay_args = array( 'body' => json_encode( $pay_data ), @@ -78,12 +79,16 @@ 'httpsversion' => '1.0', 'blocking' => true, 'headers' => array( + 'X-Platform' => 'ContactForm7', + 'X-Platform-Version' => '1.1.1', 'Authorization' => 'Bearer ' . $TokenCode, 'Content-Type' => 'application/json', - 'Accept' => 'application/json' ), + 'Accept' => 'application/json' + ), 'cookies' => array() ); - $pay_url = 'https://api.payping.ir/v2/pay'; + //var_dump($pay_data); die(); + $pay_url = 'https://api.payping.ir/v3/pay'; $pay_response = wp_remote_post( $pay_url, $pay_args ); $PAY_XPP_ID = $pay_response["headers"]["x-paypingrequest-id"]; if( is_wp_error( $pay_response ) ){ @@ -96,9 +101,10 @@ if( isset( $pay_response["body"] ) and $pay_response["body"] != '' ){ $code_pay = wp_remote_retrieve_body( $pay_response ); $code_pay = json_decode( $code_pay, true ); + $_x['transid'] = $code_pay["code"]; $wpdb->update( $table_name, $_x, array( 'id' => $clientrefid ), $_y, array( '%d' ) ); - wp_redirect( sprintf( 'https://api.payping.ir/v2/pay/gotoipg/%s', $code_pay["code"] ) ); + wp_redirect($code_pay["url"]); exit; }else{ $Message = ' تراکنش ناموفق بود- کد خطا : '.$PAY_XPP_ID; diff --git a/inc/gateway.php b/inc/gateway.php index 75f0291..5658b00 100644 --- a/inc/gateway.php +++ b/inc/gateway.php @@ -159,7 +159,7 @@ function CF7_PayPing_CreatePage( $title, $body ){ function CF7_PayPing_plugin_admin_notices() { if (!get_option('CF7_PayPing_plugin_notice_shown')) { - echo "

برای تنظیم اطلاعات درگاه کلیک کنید.

"; + echo esc_html_e("

برای تنظیم اطلاعات درگاه کلیک کنید.

"); update_option("CF7_PayPing_plugin_notice_shown", "true"); } } @@ -313,7 +313,7 @@ function CF7_PayPing_save_contact_form( $cf7 ){ function CF7_PayPing_list_trans(){ if( !current_user_can("manage_options" ) ){ - wp_die( __( "You do not have sufficient permissions to access this page." ) ); + wp_die( esc_html( "You do not have sufficient permissions to access this page." ) ); } global $wpdb; @@ -327,7 +327,7 @@ function CF7_PayPing_list_trans(){ $num_of_pages = ceil($total / $limit); $cntx = 0; - echo '
+ echo wp_kses_post('

تراکنش‌ها

@@ -350,13 +350,13 @@ function CF7_PayPing_list_trans(){ - '; + '); if( count( $transactions ) == 0 ){ - echo ' + echo wp_kses_post(' - '; + '); }else{ foreach($transactions as $transaction){ @@ -387,26 +387,26 @@ function CF7_PayPing_list_trans(){ $page_links = paginate_links( array( 'base' => add_query_arg('pagenum', '%#%'), 'format' => '', - 'prev_text' => __('«', 'aag'), - 'next_text' => __('»', 'aag'), + 'prev_text' => esc_html('«', 'aag'), + 'next_text' => esc_html('»', 'aag'), 'total' => $num_of_pages, 'current' => $pagenum )); if ($page_links) { - echo '
' . $page_links . '
+ echo '
' . wp_kses_post($page_links) . '
'; } - echo '
+ echo wp_kses_post('

- '; + '); } function CF7_PayPing_table(){ global $wpdb; if (!current_user_can("manage_options")) { - wp_die(__("You do not have sufficient permissions to access this page.")); + wp_die(esc_html_e("You do not have sufficient permissions to access this page.")); } echo '
'; @@ -514,7 +514,7 @@ function CF7_PayPing_table(){ // give warning if contact form 7 is not active function CF7_PayPing_admin_notice(){ echo '
-

' . _e(' افزونه درگاه بانکی برای افزونه Contact Form 7 : Contact Form 7 باید فعال باشد ', 'my-text-domain') . '

+

' . esc_html_e(' افزونه درگاه بانکی برای افزونه Contact Form 7 : Contact Form 7 باید فعال باشد ', 'my-text-domain') . '

'; } @@ -524,16 +524,33 @@ function CF7_PayPing_admin_notice(){ /* ShortCode Result Page */ add_shortcode('result_payment', 'CF7_PayPing_result_payment_func'); function CF7_PayPing_result_payment_func( $atts ){ - if( is_admin() ){ return; } - if( ! isset( $_POST['refid'] ) ){ return CF7_PayPing_CreateMessage("پرداخت ناموفق!", 'شماره پرداخت پیدا نشد!', "" ); } - if( ! isset( $_POST['clientrefid'] ) ){ return CF7_PayPing_CreateMessage("پرداخت ناموفق!", 'شماره فاکتور پیدا نشد!', "" ); } + $payStatus = $_REQUEST['status']; + $paypingResponse = stripslashes($_REQUEST['data']); + $responseData = json_decode($paypingResponse, true); + + if (isset($responseData['paymentRefId'])) { + $refId = sanitize_text_field($responseData['paymentRefId']); + } else { + $refId = null; + } + + $clientrefid = (int) $responseData['clientRefId']; + + if( is_admin() ){ + return; + } + + /*if( ! isset( $refId ) ){ + return CF7_PayPing_CreateMessage("پرداخت ناموفق!", 'شماره پرداخت پیدا نشد!', "" ); + }*/ + + if( ! isset( $clientrefid ) ){ + return CF7_PayPing_CreateMessage("پرداخت ناموفق!", 'شماره فاکتور پیدا نشد!', "" ); + } global $wpdb; - $Status = ''; - $refId = $_POST['refid']; - $clientrefid = $_POST['clientrefid']; - - $Theme_Message = get_option('cf7pp_theme_message', ''); + $Status = ''; + $Theme_Message = get_option('cf7pp_theme_message', ''); $theme_error_message = get_option('cf7pp_theme_error_message', ''); $options = get_option('cf7_PayPing_options'); @@ -551,49 +568,65 @@ function CF7_PayPing_result_payment_func( $atts ){ if( ! isset( $Amount ) || empty( $Amount ) ){ return CF7_PayPing_CreateMessage("پرداخت ناموفق!", 'عدم ارسال مبلغ، لطفا با مدیر سایت در تماس باشید.', "" ); } + + /* Verify Pay */ - $varify_data = array( 'refId' => $refId, 'amount' => $Amount ); - $varify_args = array( - 'body' => json_encode( $varify_data ), - 'timeout' => '45', - 'redirection' => '5', - 'httpsversion' => '1.0', - 'blocking' => true, - 'headers' => array( - 'Authorization' => 'Bearer ' . $TokenCode, - 'Content-Type' => 'application/json', - 'Accept' => 'application/json' - ), - 'cookies' => array() - ); - - $verify_url = 'https://api.payping.ir/v2/pay/verify'; - $verify_response = wp_remote_post( $verify_url, $varify_args ); - - $VERIFY_XPP_ID = wp_remote_retrieve_headers( $verify_response )['x-paypingrequest-id']; - if( is_wp_error( $verify_response ) ){ + if ($payStatus == 0) { $Status = 'error'; - $Message = 'خطا در ارتباط با پی‌پینگ : شرح خطا '.$verify_response->get_error_message(); - return CF7_PayPing_CreateMessage("پرداخت ناموفق!", $Message, "" ); - }else{ - $code = wp_remote_retrieve_response_code( $verify_response ); - if( $code === 200 ){ + $txterror = 'تراکنش توسط کاربر لغو شد'; + } else { + + $varify_data = array( 'PaymentRefId' => $refId, 'Amount' => $Amount ); + $varify_args = array( + 'body' => json_encode( $varify_data ), + 'timeout' => '45', + 'redirection' => '5', + 'httpsversion' => '1.0', + 'blocking' => true, + 'headers' => array( + 'Authorization' => 'Bearer ' . $TokenCode, + 'Content-Type' => 'application/json', + 'Accept' => 'application/json' + ), + 'cookies' => array() + ); + + $verify_url = 'https://api.payping.ir/v3/pay/verify'; + $verify_response = wp_remote_post( $verify_url, $varify_args ); + + $body = wp_remote_retrieve_body( $verify_response ); + $rbody = json_decode( $body, true ); + + + if( is_wp_error( $verify_response ) ){ + $Status = 'error'; + $Message = 'خطا در ارتباط با پی‌پینگ : شرح خطا '.$verify_response->get_error_message(); + return CF7_PayPing_CreateMessage("پرداخت ناموفق!", $Message, "" ); + }elseif (isset($rbody['status']) && $rbody['status'] == 409) { $Status = 'success'; + }else{ - $Message = json_decode( $verify_response['body'], true ); - if( array_key_exists( '15', $Message) ){ + $code = wp_remote_retrieve_response_code( $verify_response ); + if( $code === 200 ){ $Status = 'success'; - }elseif( array_key_exists( 'RefId', $Message) ){ - $Status = 'error'; - $txterror = 'RefId نمی تواند خالی باشد'; - }elseif( array_key_exists( '1', $Message) ){ - $Status = 'error'; - $txterror = 'تراکنش توسط شما لغو شد'; }else{ - $Status = 'error'; + $Message = json_decode( $verify_response['body'], true ); + if( array_key_exists( '15', $Message) ){ + $Status = 'success'; + }elseif( array_key_exists( 'RefId', $Message) ){ + $Status = 'error'; + $txterror = 'RefId نمی تواند خالی باشد'; + }else{ + $Status = 'error'; + } } } } + + + + + if( $Status == 'success' ){ $wpdb->update( $wpdb->prefix . 'cf7_payping_transaction', array( 'status' => 'success', 'transid' => $refId ), array( 'id' => $clientrefid ), array( '%s', '%s' ), array( '%d' ) ); diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..6530df8 --- /dev/null +++ b/readme.txt @@ -0,0 +1,27 @@ +=== Payping CF7 === +Contributors: hadihosseini, mahdisarani, payping +Tags: payping, contact form 7, پی پینگ , فرم تماس 7 +Requires at least: 4.0.0 +Requires Plugin: contact-form-7 +Tested up to: 6.6.2 +Requires PHP: 7.2 +Stable tag: 1.1.0 +License: GPLv3 or later +License URI: https://www.gnu.org/licenses/gpl-3.0.html + +== Description == + افزونه درگاه پرداخت پی‌پینگ برای افزونه فرم تماس 7 + +== Installation == +1. فایل افزونه را در مسیر \'/wp-content/plugins/\' آپلود کنید +2. افزونه را از طریق منوی \'افزونه ها\' در وردپرس فعال کنید + + +== Third-Party Services == +This plugin leverages the following third-party services: + +1. https://api.payping.ir: This plugin adds online payment functionality to the Gravity Forms plugin, allowing us to process payments and check payment statuses through https://api.payping.ir. + + +== Privacy Policy == +This plugin follows strict privacy guidelines. When using the api.payping.ir service, user data is securely transmitted and stored following industry best practices. \ No newline at end of file
وضعیت
هيج تراکنش وجود ندارد.