修复Ripro主题扫码后空白或null或array的问题

WordPress Ripro主题使用的人比较多,绝大部分用的盗版主题,RiPro主题使用虎皮椒V3支付接口在使用弹窗支付的时候,微信或者支付宝扫码后出现null或array,会发生在ripro所有版本中。下面是修复方法:

打开ripro主题inc目录下的core-ajax.php文件,即如图位置进行编辑:

服务器是宝塔的用户可以直接在宝塔面板中进行修改,非宝塔的用户可以选择FTP的方式进行文件的修改等等。然后搜索关键字pay_qrcode_url可以找到虎皮椒的支付代码的位置,然后将如下图所示的地方修改成$result['url_qrcode']

改成:

然后将其他相应的地方进行同样的改动。一共有四个地方需要修改(虎皮椒支付相关位置),注意不要将这个地方改掉,让它保持原样即可:

全部修改后保存修改或者重新上传修改后的文件,即可正常扫码支付。注意修改之前前,请将文件先行备份。

完整代码:

<?php//**切换暗黑风格
function tap_dark()
{session_start();$is_ripro_dark   = !empty($_POST['is_ripro_dark']) ? intval($_POST['is_ripro_dark']) : 0;$_SESSION['is_ripro_dark'] = $is_ripro_dark;echo $_SESSION['is_ripro_dark'];exit();
}
add_action('wp_ajax_tap_dark', 'tap_dark');
add_action('wp_ajax_nopriv_tap_dark', 'tap_dark');/*** [ajax_search AJAX搜索]* @Author   Dadong2g* @DateTime 2019-08-21T23:35:34+0800* @return   [type]                   [JSON Arr]*/
function ajax_search()
{global $wp_query;header('Content-type:application/json; Charset=utf-8');$text   = !empty($_POST['text']) ? esc_sql($_POST['text']) : null;$args = array('s' => $text,'posts_per_page' => 5);$array_posts = array ();$data = new WP_Query($args);while ( $data->have_posts() ) : $data->the_post();array_push($array_posts, array("title"=>get_the_title(),"url"=>get_permalink(),"img"=>_get_post_timthumb_src() )); endwhile;echo json_encode($array_posts);exit();
}
add_action('wp_ajax_ajax_search', 'ajax_search');
add_action('wp_ajax_nopriv_ajax_search', 'ajax_search');/*** [user_login 用户登录]* @Author   Dadong2g* @DateTime 2019-06-02T15:34:38+0800* @return   [type]                   [description]*/
function user_login()
{session_start();header('Content-type:application/json; Charset=utf-8');$username   = !empty($_POST['username']) ? esc_sql($_POST['username']) : null;$password   = !empty($_POST['password']) ? esc_sql($_POST['password']) : null;$rememberme = !empty($_POST['rememberme']) ? esc_sql($_POST['rememberme']) : null;if (_cao('is_close_wplogin')) {echo json_encode(array('status' => '0', 'msg' => '仅开放社交账号登录'));exit;}$login_data                  = array();$login_data['user_login']    = $username;$login_data['user_password'] = $password;$login_data['remember']      = false;if (isset($rememberme) && $rememberme == '1') {$login_data['remember'] = true;}if (!$username || !$password) {echo json_encode(array('status' => '0', 'msg' => '请输入登录账号/密码'));exit;}//是否腾讯验证if (_cao('is_captcha_qq','0') && @$_SESSION['is_tencentcaptcha'] == 0) {$_SESSION['is_tencentcaptcha'] = 0;echo json_encode(array('status' => '0', 'msg' => '安全验证失败'));exit;}$user_verify = wp_signon($login_data, false);if (is_wp_error($user_verify)) {echo json_encode(array('status' => '0', 'msg' => '用户名或密码错误'));exit;} else {echo json_encode(array('status' => '1', 'msg' => '登录成功'));exit;}exit();
}
add_action('wp_ajax_user_login', 'user_login');
add_action('wp_ajax_nopriv_user_login', 'user_login');/*** [user_register 注册新用户]* @Author   Dadong2g* @DateTime 2019-06-02T15:34:30+0800* @return   [type]                   [description]*/
function user_register()
{session_start();header('Content-type:application/json; Charset=utf-8');$user_name  = !empty($_POST['user_name']) ? sanitize_user($_POST['user_name']) : null;$user_email = !empty($_POST['user_email']) ? apply_filters('user_registration_email', $_POST['user_email']) : null;$user_pass  = !empty($_POST['user_pass']) ? esc_sql($_POST['user_pass']) : null;if (!$user_name || !$user_email || !$user_pass) {echo json_encode(array('status' => '0', 'msg' => '注册信息错误'));exit;}if (_cao('is_close_wpreg')) {echo json_encode(array('status' => '0', 'msg' => '仅开放社交账号注册'));exit;}if (!validate_username($user_name)) {echo json_encode(array('status' => '0', 'msg' => '用户名包含无效字符'));exit;}if (username_exists($user_name)) {echo json_encode(array('status' => '0', 'msg' => '该用户名已被注册'));exit;}if (!is_email($user_email)) {echo json_encode(array('status' => '0', 'msg' => '邮箱地址错误'));exit;}if (email_exists($user_email)) {echo json_encode(array('status' => '0', 'msg' => '邮箱已经被注册'));exit;}if (strlen($user_pass) < 6) {echo json_encode(array('status' => '0', 'msg' => '密码长度不得小于6位'));exit;}// 是否需要邮箱验证if (_cao('is_email_reg_cap')) {if (empty($_POST['captcha']) || empty($_SESSION['CAO_code_captcha']) || trim(strtolower($_POST['captcha'])) != $_SESSION['CAO_code_captcha']) {echo json_encode(array('status' => '0', 'msg' => '验证码错误'));exit;}if ($_SESSION['CAO_code_captcha_email'] != $user_email) {echo json_encode(array('status' => '0', 'msg' => '验证码与邮箱不对应'));exit;}}//是否腾讯验证if (_cao('is_captcha_qq','0') && @$_SESSION['is_tencentcaptcha'] == 0) {$_SESSION['is_tencentcaptcha'] = 0;echo json_encode(array('status' => '0', 'msg' => '安全验证失败'));exit;}// 验证通过$nweUserData = array('ID'         => '','user_login' => $user_name,'user_pass'  => $user_pass,'user_email' => $user_email,'role'       => get_option('default_role'),);$user_id = wp_insert_user($nweUserData);if (is_wp_error($user_id)) {echo json_encode(array('status' => '0', 'msg' => '注册失败,请重试'));exit;} else {wp_set_auth_cookie($user_id, true, false);wp_set_current_user($user_id);//发送邮件$message = __('注册成功!') . "\r\n\r\n";$message .= sprintf(__('用户名: %s'), $user_name) . "\r\n\r\n";//$message .= sprintf(__('密码: %s'), $user_pass) . "\r\n\r\n";if (_cao('is_mail_nitfy_reg')) {_sendMail($user_email, '注册信息', $message);}echo json_encode(array('status' => '1', 'msg' => '注册成功'));exit;}exit();
}
add_action('wp_ajax_user_register', 'user_register');
add_action('wp_ajax_nopriv_user_register', 'user_register');/*** [sessioncode 生产验证码]* @Author   Dadong2g* @DateTime 2019-06-02T15:34:20+0800* @param    [type]                   $email [description]* @return   [type]                          [description]*/
function sessioncode($email)
{session_start();$originalcode = '0,1,2,3,4,5,6,7,8,9';$originalcode = explode(',', $originalcode);$countdistrub = 10;$_dscode      = "";$counts       = 6;for ($j = 0; $j < $counts; $j++) {$dscode = $originalcode[rand(0, $countdistrub - 1)];$_dscode .= $dscode;}$_SESSION['CAO_code_captcha']       = strtolower($_dscode);$_SESSION['CAO_code_captcha_email'] = $email;$message                            = '验证码:' . $_dscode;$send_email                         = _sendMail($email, '验证码', $message);if ($send_email) {return true;}return false;
}/*** [captcha_email 验证邮箱]* @Author   Dadong2g* @DateTime 2019-06-02T15:34:06+0800* @return   [type]                   [description]*/
function captcha_email()
{header('Content-type:application/json; Charset=utf-8');global $wpdb;$user_email = !empty($_POST['user_email']) ? esc_sql($_POST['user_email']) : null;$user_email = apply_filters('user_registration_email', $user_email);$user_email = $wpdb->_escape(trim($user_email));if (email_exists($user_email)) {echo json_encode(array('status' => '0', 'msg' => '邮箱已存在'));exit;} else {$send_email = sessioncode($user_email);if ($send_email) {echo json_encode(array('status' => '1', 'msg' => '发送成功'));exit;} else {echo json_encode(array('status' => '0', 'msg' => '发送失败'));exit;}}exit();
}
add_action('wp_ajax_captcha_email', 'captcha_email');
add_action('wp_ajax_nopriv_captcha_email', 'captcha_email');//腾讯防水墙
function tencentcaptcha()
{session_start();header('Content-type:application/json; Charset=utf-8');if(!empty($_SERVER["HTTP_CLIENT_IP"])){$cip = $_SERVER["HTTP_CLIENT_IP"];}else if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){$cip = $_SERVER["HTTP_X_FORWARDED_FOR"];}else if(!empty($_SERVER["REMOTE_ADDR"])){$cip = $_SERVER["REMOTE_ADDR"];}else{$cip = '';}preg_match("/[\d\.]{7,15}/", $cip, $cips);$cip = isset($cips[0]) ? $cips[0] : 'unknown';unset($cips);$AppSecretKey = _cao('captcha_qq_secretkey','');$appid = !empty($_POST['appid']) ? $_POST['appid'] : null;$Ticket = !empty($_POST['Ticket']) ? $_POST['Ticket'] : null;$Randstr = !empty($_POST['Randstr']) ? $_POST['Randstr'] : null;$UserIP = $cip; $url = "https://ssl.captcha.qq.com/ticket/verify";$params = array("aid" => $appid,"AppSecretKey" => $AppSecretKey,"Ticket" => $Ticket,"Randstr" => $Randstr,"UserIP" => $UserIP);$paramstring = http_build_query($params);$geturl = $url.'?'.$paramstring;$content = tx_http_curl($geturl);$result = json_decode($content,true);if($result){if($result['response'] == 1){$_SESSION['is_tencentcaptcha'] = 1;echo json_encode(array('status' => '1', 'msg' => '验证通过'));exit;}else{$_SESSION['is_tencentcaptcha'] = 0;echo json_encode(array('status' => '0', 'msg' => $result['err_msg']));exit;}}else{$_SESSION['is_tencentcaptcha'] = 0;echo json_encode(array('status' => '0', 'msg' => '请求失败'));exit;}exit();
}
add_action('wp_ajax_tencentcaptcha', 'tencentcaptcha');
add_action('wp_ajax_nopriv_tencentcaptcha', 'tencentcaptcha');function tx_http_curl($url,$type='get',$res='json',$arr=''){//1.初始化curl$ch = curl_init();//2.设置curl的参数curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);if($type == 'post'){curl_setopt($ch, CURLOPT_POST,1);curl_setopt($ch, CURLOPT_POSTFIELDS, $arr);}//3.采集$output = curl_exec($ch);//4.关闭curl_close($ch);if($res=='json'){if(curl_error($ch)){//请求失败,返回错误信息return curl_error($ch);}else{//请求成功,返回信息return $output;}}
}/*** @package caozhuti*//*** [isLoginCheck 登陆状态验证]* @Author   Dadong2g* @DateTime 2019-05-31T13:12:49+0800* @return   boolean                  [description]*/
function isLoginCheck()
{if (!is_user_logged_in()) {header('Allow: POST');header('HTTP/1.1 503 Method Not Allowed');header('Content-Type: text/plain');exit;}
}//投稿 write_post
function cao_write_post()
{header('Content-type:application/json; Charset=utf-8');global $current_user;$uid = $current_user->ID;isLoginCheck(); //检测登录$nonce   = !empty($_POST['nonce']) ? $_POST['nonce'] : null;if ($nonce && !wp_verify_nonce($nonce, 'caoclick-' . $uid)) {echo json_encode(array('status' => '0', 'msg' => '非法请求'));exit;}$edit_id = !empty($_POST['edit_id']) ? (int)sanitize_text_field(trim($_POST['edit_id'])) : 0;$post_title = !empty($_POST['post_title']) ? sanitize_text_field(trim($_POST['post_title'])) : '';$post_content = !empty($_POST['post_content']) ? trim($_POST['post_content']) : '';$post_excerpt = !empty($_POST['post_excerpt']) ? sanitize_text_field(trim($_POST['post_excerpt'])) : '';$post_cat = !empty($_POST['post_cat']) ? (int)sanitize_text_field(trim($_POST['post_cat'])) : 1;$cao_status = !empty($_POST['cao_status']) ? trim($_POST['cao_status']) : 0;$cao_status = ($cao_status == 'fee') ? 1 : 0;$cao_price = !empty($_POST['cao_price']) ? (int)sanitize_text_field(trim($_POST['cao_price'])) : 0;$cao_vip_rate = !empty($_POST['cao_vip_rate']) ? sanitize_text_field(trim($_POST['cao_vip_rate'])) : 1;$cao_pwd = !empty($_POST['cao_pwd']) ? sanitize_text_field(trim($_POST['cao_pwd'])) : '';$cao_downurl = !empty($_POST['cao_downurl']) ? esc_url(trim($_POST['cao_downurl'])) : '';$post_status = !empty($_POST['post_status']) ? $_POST['post_status'] : '';$post_status = in_array($post_status, array('publish', 'draft', 'pending')) ? $post_status : 'draft';if (!_cao('is_all_publish_posts') && !current_user_can('publish_posts')) {echo json_encode(array('status' => '0', 'msg' => '您没有权限发布或修改文章'));exit;}if(strlen($post_content) < 100) {echo json_encode(array('status' => '0', 'msg' => '文章内容最低100个字符'));exit;}// 如果是编辑if ($edit_id > 0) {// 插入文章$new_post = wp_update_post( array( //Return: The ID of the post if the post is successfully updated in the database. Otherwise returns 0'ID'            => $edit_id,'post_title'    => $post_title,'post_excerpt'  => $post_excerpt,'post_content'  => $post_content,'post_status'   => $post_status,'post_author'   => get_current_user_id(),'post_category' => array($post_cat)) );}else{// 插入文章$new_post = wp_insert_post( array('post_title'    => $post_title,'post_excerpt'  => $post_excerpt,'post_content'  => $post_content,'post_status'   => $post_status,'post_author'   => get_current_user_id(),'post_category' => array($post_cat),'tags_input'    => '') );}if($new_post instanceof WP_Error) {echo json_encode(array('status' => '0', 'msg' => '网络错误,请重试或联系管理员'));exit;}// 如果是直接发布的 挂钩 用于后期添加if ($post_status == 'publish') {do_action('cao_immediate_to_publish', $new_post);}// 更新Meta$_cao_status = ($cao_status>0) ? 1 : 0 ;update_post_meta($new_post, 'cao_status', $_cao_status);update_post_meta($new_post, 'cao_price', $cao_price);update_post_meta($new_post, 'cao_vip_rate', $cao_vip_rate);update_post_meta($new_post, 'cao_pwd', $cao_pwd);update_post_meta($new_post, 'cao_downurl', $cao_downurl);update_post_meta($new_post, 'post_style', 'sidebar');echo json_encode(array('status' => '1', 'msg' => '提交成功,审核后公开'));exit;}
add_action('wp_ajax_cao_write_post', 'cao_write_post');
add_action('wp_ajax_nopriv_cao_write_post', 'cao_write_post');// 上传头像avatar_photo
function update_avatar_photo()
{header('Content-type:application/json; Charset=utf-8');global $current_user;$uid = $current_user->ID;isLoginCheck(); //检测登录$nonce   = !empty($_POST['nonce']) ? $_POST['nonce'] : null;$file = !empty($_FILES['file']) ? $_FILES['file'] : null;if ($nonce && !wp_verify_nonce($nonce, 'caoclick-' . $uid)) {echo json_encode(array('status' => '0', 'msg' => '非法请求'));exit;}if (is_uploaded_file($file['tmp_name']) && is_user_logged_in()) {$picname = $file['name'];$picsize = $file['size'];$arrType = array('image/jpg', 'image/gif', 'image/png', 'image/bmp', 'image/pjpeg', "image/jpeg");$userid  = $uid;$rand    = (rand(10, 100));if ($picname != "") {if ($picsize > 200400) {echo json_encode(array('status' => '0', 'msg' => '头像最大限制200KB'));exit;} elseif (!in_array($file['type'], $arrType)) {echo json_encode(array('status' => '0', 'msg' => '图片类型错误'));exit;} else {$pics = 'avatar-' . $userid . '.jpg';// 上传生成的海报图片至指定文件夹$upload_dir = wp_upload_dir();$upfile = $upload_dir['basedir'] . '/avatar/';if (!is_dir($upfile)) {wp_mkdir_p($upfile);}$pic_path = $upfile . $pics;if (move_uploaded_file($file['tmp_name'], $pic_path)) {update_user_meta($userid, 'user_custom_avatar', get_bloginfo('url') . '/wp-content/uploads/avatar/' . $pics);echo json_encode(array('status' => '1', 'msg' => '上传成功'));exit;} else {echo json_encode(array('status' => '0', 'msg' => '上传失败'));exit;}}}}echo json_encode(array('status' => '0', 'msg' => '文件错误'));exit;}
add_action('wp_ajax_update_avatar_photo', 'update_avatar_photo');
add_action('wp_ajax_nopriv_update_avatar_photo', 'update_avatar_photo');/*** [update_img 新增文件类型验证安全]* @Author   Dadong2g* @DateTime 2019-10-25T20:20:45+0800* @return   [type]                   [description]*/
function update_img()
{header('Content-type:application/json; Charset=utf-8');global $current_user;$uid = $current_user->ID;isLoginCheck(); //检测登录$nonce   = !empty($_POST['nonce']) ? $_POST['nonce'] : null;$file = !empty($_FILES['file']) ? $_FILES['file'] : null;if ($nonce && !wp_verify_nonce($nonce, 'caoclick-' . $uid)) {echo json_encode(array('status' => '0', 'msg' => '非法请求'));exit;}$file_index = mb_strrpos($file["name"],'.'); //扩展名定位//图片验证$is_img = getimagesize($file["tmp_name"]);if(!$is_img && true){echo json_encode(array('status' => '0', 'msg' => '上传文件类型错误'));exit;}//图片类型验证$image_type = ['image/jpg', 'image/gif', 'image/png', 'image/bmp', 'image/pjpeg', "image/jpeg"];if(!in_array($file['type'], $image_type) && true){echo json_encode(array('status' => '0', 'msg' => '禁止上传非图片类型文件'));exit;}//图片后缀验证$postfix = ['.png','.jpg','.jpeg','pjpeg','gif','bmp'];$file_postfix = strtolower(mb_substr($file["name"], $file_index));if(!in_array($file_postfix, $postfix) && true){echo json_encode(array('status' => '0', 'msg' => '上传后缀不允许'));exit;}if ( !empty( $file ) ) {// 获取上传目录信息$wp_upload_dir = wp_upload_dir();// 将上传的图片文件移动到上传目录 md5纯命名图片$basename   = _new_filename($file['name']);$filename   = $wp_upload_dir['path'] . '/' . $basename;$re         = rename( $file['tmp_name'], $filename );$attachment = array('guid'           => $wp_upload_dir['url'] . '/' . $basename,'post_mime_type' => $file['type'],'post_title'     => preg_replace( '/\.[^.]+$/', '', $basename ),'post_content'   => '','post_status'    => 'inherit');$attach_id  = wp_insert_attachment( $attachment, $filename );require_once( ABSPATH . 'wp-admin/includes/image.php' );$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );wp_update_attachment_metadata( $attach_id, $attach_data );// 返回图片地址和状态echo json_encode(array('errno' => '0','data' => array(wp_get_attachment_url( $attach_id )) ));exit;}// 返回图片地址和状态echo json_encode(array('errno' => '1', 'data' => array()));exit;
}
add_action('wp_ajax_update_img', 'update_img');
add_action('wp_ajax_nopriv_update_img', 'update_img');/*** [cdk_pay 卡密充值]* @Author   Dadong2g* @DateTime 2019-06-02T15:33:58+0800* @return   [type]                   [description]*/
function cdk_pay()
{header('Content-type:application/json; Charset=utf-8');global $current_user;$uid = $current_user->ID;isLoginCheck(); //检测登录$cdkcode = !empty($_POST['cdkcode']) ? esc_sql($_POST['cdkcode']) : null;$nonce   = !empty($_POST['nonce']) ? $_POST['nonce'] : null;if ($nonce && !wp_verify_nonce($nonce, 'caoclick-' . $uid)) {echo json_encode(array('status' => '0', 'msg' => '非法请求'));exit;}// 验证长度if ($cdkcode && strlen($cdkcode) != 12) {echo json_encode(array('status' => '0', 'msg' => '卡密错误'));exit;}// 实例化卡密$CaoCdk    = new CaoCdk();$cdk_money = sprintf('%0.2f', $cdk_money);$cdk_money = $CaoCdk->checkCdk($cdkcode);if (!$cdk_money) {echo json_encode(array('status' => '0', 'msg' => '卡密无效'));exit;}// 卡密有效 进行换算$CaoUser   = new CaoUser($uid);$old_money = $CaoUser->get_balance();if (!$CaoUser->update_balance($cdk_money)) {echo json_encode(array('status' => '0', 'msg' => '兑换失败'));exit;}// 充值余额成功 废弃卡密 updataCdkif (!$CaoCdk->updataCdk($cdkcode)) {echo json_encode(array('status' => '0', 'msg' => '卡密异常'));exit;}// 添加纪录if ($uid) {$Caolog    = new Caolog();$new_money = $old_money + $cdk_money;$note      = '卡密充值 [' . $cdkcode . '] +' . $cdk_money;$Caolog->addlog($uid, $old_money, $cdk_money, $new_money, 'cdk', $note);}echo json_encode(array('status' => '1', 'msg' => '卡密充值成功'));if (_cao('is_mail_nitfy_cdk')) {_sendMail($current_user->user_email, '卡密充值成功', $note);}exit;
}
add_action('wp_ajax_cdk_pay', 'cdk_pay');
add_action('wp_ajax_nopriv_cdk_pay', 'cdk_pay');// 提现申请
function add_reflog()
{header('Content-type:application/json; Charset=utf-8');if (_cao('is_ref_to_rmb')) {echo json_encode(array('status' => '0', 'msg' => 'RMB提现功能未开启'));exit;}global $current_user;$uid = $current_user->ID;isLoginCheck(); //检测登录$money = !empty($_POST['money']) ? (int)$_POST['money'] : 0;$nonce   = !empty($_POST['nonce']) ? $_POST['nonce'] : null;if ($nonce && !wp_verify_nonce($nonce, 'caoclick-' . $uid)) {echo json_encode(array('status' => '0', 'msg' => '非法请求'));exit;}$site_min_tixian_num = _cao('site_min_tixian_num');$Reflog = new Reflog($uid);// 验证长度if ($money < $site_min_tixian_num) {echo json_encode(array('status' => '0', 'msg' => '提现金额最低'.$site_min_tixian_num.'元起'));exit;}if ($money > $Reflog->get_ke_bonus()) {echo json_encode(array('status' => '0', 'msg' => '可提现金额不足'));exit;}$note = '用户ID:'.$uid.' 申请提现';if ($Reflog->addlog($money,$note)) {echo json_encode(array('status' => '1', 'msg' => '提现申请成功,将尽快为您转账'));exit;}else{echo json_encode(array('status' => '0', 'msg' => '申请失败,稍后再试'));exit;}}
add_action('wp_ajax_add_reflog', 'add_reflog');
add_action('wp_ajax_nopriv_add_reflog', 'add_reflog');// 提现站内余额申请
function add_reflog2()
{header('Content-type:application/json; Charset=utf-8');global $current_user;$uid = $current_user->ID;isLoginCheck(); //检测登录$money = !empty($_POST['money']) ? (int)$_POST['money'] : 0;$nonce   = !empty($_POST['nonce']) ? $_POST['nonce'] : null;if ($nonce && !wp_verify_nonce($nonce, 'caoclick-' . $uid)) {echo json_encode(array('status' => '0', 'msg' => '非法请求'));exit;}$site_min_tixian_num = _cao('site_min_tixian_num');$Reflog = new Reflog($uid);// 验证长度if ($money < $site_min_tixian_num) {echo json_encode(array('status' => '0', 'msg' => '提现金额最低'.$site_min_tixian_num.'元起'));exit;}if ($money > $Reflog->get_ke_bonus()) {echo json_encode(array('status' => '0', 'msg' => '可提现金额不足'));exit;}$note = '用户ID:'.$uid.' 提现到站内余额';if ($Reflog->addlog($money,$note)) {// $money 兑换$charge_rate  = (int) _cao('site_change_rate'); //充值比例$CaoUser   = new CaoUser($uid);$old_money = $CaoUser->get_balance();$add_money = $money*$charge_rate;if (!$CaoUser->update_balance($add_money)) {echo json_encode(array('status' => '0', 'msg' => '佣金兑换失败'));exit;}// 兑换成功 添加纪录if ($uid) {$Caolog    = new Caolog();$new_money = $old_money + $add_money;$note      = '佣金提现兑换 [¥' . $money . '] +' . $add_money;$Caolog->addlog($uid, $old_money, $add_money, $new_money, 'other', $note);}echo json_encode(array('status' => '1', 'msg' => '提现成功,已经自动兑换到您的可用余额'));exit;}else{echo json_encode(array('status' => '0', 'msg' => '申请失败,稍后再试'));exit;}}
add_action('wp_ajax_add_reflog2', 'add_reflog2');
add_action('wp_ajax_nopriv_add_reflog2', 'add_reflog2');/*** [charge_pay 在线付款支付]* @Author   Dadong2g* @DateTime 2019-06-03T22:28:59+0800* @return   [type]                   [JOSN]*/
function charge_pay()
{header('Content-type:application/json; Charset=utf-8');date_default_timezone_set('Asia/Shanghai');$ip = (isset($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : '127.0.0.1'; //客户端IPglobal $current_user;$uid = $current_user->ID;isLoginCheck(); //检测登录$nonce      = !empty($_POST['nonce']) ? $_POST['nonce'] : null;$charge_num = !empty($_POST['charge_num']) ? $_POST['charge_num'] : null;$pay_type   = !empty($_POST['pay_type']) ? (int) $_POST['pay_type'] : null; //1支付宝;2微信if ($nonce && !wp_verify_nonce($nonce, 'caoclick-' . $uid)) {echo json_encode(array('status' => '0', 'msg' => '非法请求'));exit;}// 基础验证通过 验证前台表单数据 充值数量和支付方式$min_cahrge_num =_cao('min_cahrge_num','1');if (!$charge_num || $charge_num < 0) {echo json_encode(array('status' => '0', 'msg' => '请输入充值数量'));exit;}if ($charge_num < $min_cahrge_num) {echo json_encode(array('status' => '0', 'msg' => '最低充值数量为:'.$min_cahrge_num));exit;}if (!isset($pay_type) || $pay_type == 0) {echo json_encode(array('status' => '0', 'msg' => '请选择支付方式'));exit;}// 实例化订单$ShopOrder = new ShopOrder();/商品属性START///$charge_rate    = (int) _cao('site_change_rate'); //充值比例$order_price    = sprintf('%0.2f', $charge_num / $charge_rate); // 订单价格 换算人民币,保留两位小数点$order_trade_no = date("ymdhis") . mt_rand(100, 999) . mt_rand(100, 999) . mt_rand(100, 999); // 订单号$order_name     = get_bloginfo('name') . '-余额充值'; //订单名称$order_type     = 'charge'; //类型 充值/商品属性END/// 判断支付方式 1 支付宝 STARTif ($pay_type == 1) {// 获取后台支付宝配置$aliPayConfig = _cao('alipay');// 判断是否开启手机版跳转if (wp_is_mobile() && $aliPayConfig['is_mobile']) {// 添加订单 ShopOrderif (!$ShopOrder->add($uid, $order_trade_no, $order_type, $order_price, $pay_type)) {echo json_encode(array('status' => '0', 'msg' => '订单创建失败'));exit;}// 支付宝公共配置$params         = new \Yurun\PaySDK\Alipay\Params\PublicParams;$params->appID  = $aliPayConfig['pid'];$params->md5Key = $aliPayConfig['md5Key'];// SDK实例化,传入公共配置$pay       = new \Yurun\PaySDK\Alipay\SDK($params);// 支付接口$request    = new \Yurun\PaySDK\Alipay\Params\WapPay\Request;$request->notify_url    = get_template_directory_uri() . '/shop/alipay/notify.php';$request->return_url    = get_template_directory_uri() . '/shop/alipay/return.php'; // 支付后跳转返回地址$request->businessParams->seller_id    = $aliPayConfig['pid']; // 卖家支付宝用户号$request->businessParams->out_trade_no = $order_trade_no; // 商户订单号$request->businessParams->total_fee    = $order_price; // 价格$request->businessParams->subject      = $order_name; // 商品标题$request->businessParams->show_url     = home_url(); // 用户付款中途退出返回商户网站的地址。$payurl = $pay->redirectExecuteUrl($request);// type 1 = 扫码支付  2 跳转支付echo json_encode(array('status' => '1', 'type' => '2', 'rurl' => $payurl, 'qrcode' => '', 'msg' => $order_trade_no));exit;} elseif (!$aliPayConfig['is_pcqr']) {// 支付宝-电脑网站支付// 添加订单 ShopOrderif (!$ShopOrder->add($uid, $order_trade_no, $order_type, $order_price, $pay_type)) {echo json_encode(array('status' => '0', 'msg' => '订单创建失败'));exit;}// 支付宝公共配置$params         = new \Yurun\PaySDK\Alipay\Params\PublicParams;$params->appID  = $aliPayConfig['pid'];$params->md5Key = $aliPayConfig['md5Key'];// SDK实例化,传入公共配置$pay       = new \Yurun\PaySDK\Alipay\SDK($params);// 支付接口$request = new \Yurun\PaySDK\Alipay\Params\Pay\Request;$request->notify_url    = get_template_directory_uri() . '/shop/alipay/notify.php';$request->return_url    = get_template_directory_uri() . '/shop/alipay/return.php'; // 支付后跳转返回地址$request->businessParams->seller_id    = $aliPayConfig['pid']; // 卖家支付宝用户号$request->businessParams->out_trade_no = $order_trade_no; // 商户订单号$request->businessParams->total_fee    = $order_price; // 价格$request->businessParams->subject      = $order_name; // 商品标题// 跳转到支付宝页面$payurl = $pay->redirectExecuteUrl($request);// var_dump($payurl);// type 1 = 扫码支付  2 跳转支付echo json_encode(array('status' => '1', 'type' => '2', 'rurl' => $payurl, 'qrcode' => '', 'msg' => $order_trade_no));exit;} else {// 应用模式公共配置-当面付// 添加订单 ShopOrderif (!$ShopOrder->add($uid, $order_trade_no, $order_type, $order_price, $pay_type)) {echo json_encode(array('status' => '0', 'msg' => '订单创建失败'));exit;}// 更换公共配置文件$params = new \Yurun\PaySDK\AlipayApp\Params\PublicParams;$params->appID = $aliPayConfig['appid'];$params->appPrivateKey = $aliPayConfig['privateKey'];$params->appPublicKey = $aliPayConfig['publicKey'];// SDK实例化,传入公共配置$pay = new \Yurun\PaySDK\AlipayApp\SDK($params);// 支付接口$request = new \Yurun\PaySDK\AlipayApp\FTF\Params\QR\Request;$request->notify_url    = get_template_directory_uri() . '/shop/alipay/notify2.php'; // 支付后通知地址$request->businessParams->out_trade_no = $order_trade_no; // 商户订单号$request->businessParams->total_amount = $order_price; // 价格$request->businessParams->subject      = $order_name; // 商品标题// 调用接口try{$data = $pay->execute($request);}catch(Exception $e){var_dump($pay->response->body());}// QR内容$qrimg = getQrcode($data['alipay_trade_precreate_response']['qr_code']);$iconstr = '<img src="'.get_template_directory_uri() . '/assets/icons/alipay.png" class="qr-pay">';$html_str = '<div class="qrcon"> <h5> '.$iconstr.' </h5> <div class="title">支付宝扫码支付 '.$order_price.' 元</div> <div align="center" class="qrcode"> <img src="'.$qrimg.'"/> </div> <div class="bottom alipay"> 请使用支付宝扫一扫<br>扫描二维码支付</br> </div> </div>';echo json_encode(array('status' => '1', 'type' => '1', 'msg' => $html_str, 'img' => $qrimg, 'num' => $order_trade_no));exit;}}//END ALIPAY// 2 微信if ($pay_type == 2) {// 获取后台支付配置$wxPayConfig = _cao('weixinpay');// 公共配置$params = new \Yurun\PaySDK\Weixin\Params\PublicParams;$params->appID = $wxPayConfig['appid'];$params->mch_id = $wxPayConfig['mch_id'];$params->key = $wxPayConfig['key'];// SDK实例化,传入公共配置$pay = new \Yurun\PaySDK\Weixin\SDK($params);// 判断是否开启手机版跳转if (wp_is_mobile() && $wxPayConfig['is_mobile']) {// 添加订单 ShopOrderif (!$ShopOrder->add($uid, $order_trade_no, $order_type, $order_price, $pay_type)) {echo json_encode(array('status' => '0', 'msg' => '订单创建失败'));exit;}// 支付接口H5$request = new \Yurun\PaySDK\Weixin\H5\Params\Pay\Request;$request->body = $order_name; // 商品描述$request->out_trade_no = $order_trade_no; // 订单号$request->total_fee = $order_price*100; // 订单总金额,单位为:分$request->spbill_create_ip = $ip; // 客户端ip,必须传正确的用户ip,否则会报错$request->notify_url = get_template_directory_uri() . '/shop/weixin/notify.php'; // 异步通知地址$request->scene_info = new \Yurun\PaySDK\Weixin\H5\Params\SceneInfo;$request->scene_info->type = 'Wap'; // 可选值:IOS、Android、Wap// 下面参数根据type不同而不同$request->scene_info->wap_url = esc_url(home_url());$request->scene_info->wap_name = get_bloginfo('name');// 调用接口$result = $pay->execute($request);if($pay->checkResult()){echo json_encode(array('status' => '1', 'type' => '2', 'rurl' => $result['mweb_url'], 'qrcode' => '', 'msg' => $order_trade_no));exit;}else{$error_msg = $pay->getErrorCode() . ':' . $pay->getError();echo json_encode(array('status' => '0', 'msg' => $error_msg));exit;}} else {// PC使用当面付返回二维码// 添加订单 ShopOrderif (!$ShopOrder->add($uid, $order_trade_no, $order_type, $order_price, $pay_type)) {echo json_encode(array('status' => '0', 'msg' => '订单创建失败'));exit;}// 支付接口 PC扫码$request = new \Yurun\PaySDK\Weixin\Native\Params\Pay\Request;$request->body = $order_name; // 商品描述$request->out_trade_no = $order_trade_no; // 订单号$request->total_fee = $order_price*100; // 订单总金额,单位为:分$request->spbill_create_ip = $ip; // 客户端ip$request->notify_url = get_template_directory_uri() . '/shop/weixin/notify.php'; // 异步通知地址// 调用接口$result = $pay->execute($request);$shortUrl = $result['code_url'];if (is_array($result) && $shortUrl) {// 获取成功 返回QR内容$qrimg = getQrcode($shortUrl);$iconstr = '<img src="'.get_template_directory_uri() . '/assets/icons/weixin.png" class="qr-pay">';$html_str = '<div class="qrcon"> <h5> '.$iconstr.' </h5> <div class="title">微信扫码支付 '.$order_price.' 元</div> <div align="center" class="qrcode"> <img src="'.$qrimg.'"/> </div> <div class="bottom weixinpay"> 请使用微信扫一扫<br>扫描二维码支付</br> </div> </div>';echo json_encode(array('status' => '1', 'type' => '1', 'msg' => $html_str, 'img' => $qrimg, 'num' => $order_trade_no));exit;}else{echo json_encode(array('status' => '0', 'msg' => '接口网络异常'));exit;}}}//PAYJS if ($pay_type == 4) {require_once get_template_directory() . '/inc/class/Payjs.class.php';// 获取后台支付配置$PayJsConfig = _cao('payjs');// 配置通信参数$config = ['mchid' => $PayJsConfig['mchid'],   // 配置商户号'key'   => $PayJsConfig['key'],   // 配置通信密钥];// 初始化 PAYJS$payjs = new Payjs($config);// 添加订单 ShopOrderif (!$ShopOrder->add($uid, $order_trade_no, $order_type, $order_price, $pay_type)) {echo json_encode(array('status' => '0', 'msg' => '订单创建失败'));exit;}if (false) {// 手机模式因openid获取问题 暂时未开放}else{// 构造订单基础信息$data = ['body' => $order_name,                        // 订单标题'total_fee' => $order_price*100,                           // 订单金额'out_trade_no' => $order_trade_no,                   // 订单号'attach' => 'payjs_order_attach',            // 订单附加信息(可选参数)'notify_url' => get_template_directory_uri() . '/shop/payjs/notify.php',    // 异步通知地址(可选参数)];$result = $payjs->native($data);// var_dump($result);die;if (is_array($result) && $result['return_code'] == 1 ) {$iconstr = '<img src="'.get_template_directory_uri() . '/assets/icons/weixin.png" class="qr-pay">';$html_str = '<div class="qrcon"> <h5> '.$iconstr.' </h5> <div class="title">微信扫码支付 '.$order_price.' 元</div> <div align="center" class="qrcode"> <img src="'.$result['qrcode'].'"/> </div> <div class="bottom weixinpay"> 请使用微信扫一扫<br>扫描二维码支付</br> </div> </div>';echo json_encode(array('status' => '1', 'type' => '1', 'msg' => $html_str, 'img' => $result['qrcode'], 'num' => $order_trade_no));exit;}else{echo json_encode(array('status' => '0', 'msg' => 'PAYJS接口异常'));exit;}}echo json_encode(array('status' => '0', 'msg' => '请配置payjs参数'));exit;}//虎皮椒支付 讯虎支付 V3 微信if ($pay_type == 5) {require_once get_template_directory() . '/inc/class/xunhupay.class.php';// 获取后台支付配置$XHpayConfig = _cao('xunhupay');// 添加订单 ShopOrderif (!$ShopOrder->add($uid, $order_trade_no, $order_type, $order_price, $pay_type)) {echo json_encode(array('status' => '0', 'msg' => '订单创建失败'));exit;}$data=array('version'   => '1.1',//固定值,api 版本,目前暂时是1.1'lang'       => 'zh-cn', //必须的,zh-cn或en-us 或其他,根据语言显示页面'plugins'   => 'ripro-xunhupay-v3',//必须的,根据自己需要自定义插件ID,唯一的,匹配[a-zA-Z\d\-_]+'appid'     => $XHpayConfig['appid'], //必须的,APPID'trade_order_id'=> $order_trade_no, //必须的,网站订单ID,唯一的,匹配[a-zA-Z\d\-_]+'payment'   => 'wechat',//必须的,支付接口标识:wechat(微信接口)|alipay(支付宝接口)'total_fee' => $order_price,//人民币,单位精确到分(测试账户只支持0.1元内付款)'title'     => $order_name, //必须的,订单标题,长度32或以内'time'      => time(),//必须的,当前时间戳,根据此字段判断订单请求是否已超时,防止第三方攻击服务器'notify_url'=>  get_template_directory_uri() . '/shop/xunhupay/notify.php', //必须的,支付成功异步回调接口'return_url'=> get_template_directory_uri() . '/shop/xunhupay/return.php',//必须的,支付成功后的跳转地址'callback_url'=> esc_url(home_url('/user?action=charge')),//必须的,支付发起地址(未支付或支付失败,系统会会跳到这个地址让用户修改支付信息)'modal'=>null, //可空,支付模式 ,可选值( full:返回完整的支付网页; qrcode:返回二维码; 空值:返回支付跳转链接)'nonce_str' => str_shuffle(time())//必须的,随机字符串,作用:1.避免服务器缓存,2.防止安全密钥被猜测出来);$hashkey =$XHpayConfig['appsecret'];$data['hash']     = XH_Payment_Api::generate_xh_hash($data,$hashkey);$url              = $XHpayConfig['url_do'];try {$response     = XH_Payment_Api::http_post($url, json_encode($data));/*** 支付回调数据* @var array(*      order_id,//支付系统订单ID*      url//支付跳转地址*  )*/$result       = $response?json_decode($response,true):null;if(!$result){throw new Exception('Internal server error',500);}$hash         = XH_Payment_Api::generate_xh_hash($result,$hashkey);if(!isset( $result['hash'])|| $hash!=$result['hash']){throw new Exception(__('Invalid sign!',XH_Wechat_Payment),40029);}if($result['errcode']!=0){throw new Exception($result['errmsg'],$result['errcode']);}$pay_url=$result['url'];$pay_url_qrcode =$result['url_qrcode'];  if ($XHpayConfig['is_pop_qrcode']) {//获取js地址$RiProPay = new RiProPay;$pay_js_url = $RiProPay->_cao_get_xunhupay_js_url($pay_url);//获取二维码地址$pay_qrcode_url = $RiProPay->_cao_get_xunhupay_qrcode($pay_js_url);$iconstr = '<img src="'.get_template_directory_uri() . '/assets/icons/weixin.png" class="qr-pay">';$html_str = '<div class="qrcon"> <h5> '.$iconstr.' </h5> <div class="title">微信扫码支付 '.$order_price.' 元</div> <div align="center" class="qrcode"> <img src="'.$pay_url_qrcode.'"/> </div> <div class="bottom weixinpay"> 请使用微信扫一扫<br>扫描二维码支付</br> </div> </div>';echo json_encode(array('status' => '1', 'type' => '1', 'msg' => $html_str, 'img' => $pay_url_qrcode, 'num' => $order_trade_no));exit;}else{echo json_encode(array('status' => '1', 'type' => '2', 'rurl' => $pay_url, 'qrcode' => '', 'msg' => $order_trade_no));exit;}} catch (Exception $e) {echo "errcode:{$e->getCode()},errmsg:{$e->getMessage()}";exit;//TODO:处理支付调用异常的情况}exit;}//虎皮椒支付 讯虎支付 V3 支付宝if ($pay_type == 6) {require_once get_template_directory() . '/inc/class/xunhupay.class.php';// 获取后台支付配置$XHpayConfig = _cao('xunhualipay');// 添加订单 ShopOrderif (!$ShopOrder->add($uid, $order_trade_no, $order_type, $order_price, $pay_type)) {echo json_encode(array('status' => '0', 'msg' => '订单创建失败'));exit;}$data=array('version'   => '1.1',//固定值,api 版本,目前暂时是1.1'lang'       => 'zh-cn', //必须的,zh-cn或en-us 或其他,根据语言显示页面'plugins'   => 'ripro-xunhupay-v3',//必须的,根据自己需要自定义插件ID,唯一的,匹配[a-zA-Z\d\-_]+'appid'     => $XHpayConfig['appid'], //必须的,APPID'trade_order_id'=> $order_trade_no, //必须的,网站订单ID,唯一的,匹配[a-zA-Z\d\-_]+'payment'   => 'alipay',//必须的,支付接口标识:wechat(微信接口)|alipay(支付宝接口)'total_fee' => $order_price,//人民币,单位精确到分(测试账户只支持0.1元内付款)'title'     => $order_name, //必须的,订单标题,长度32或以内'time'      => time(),//必须的,当前时间戳,根据此字段判断订单请求是否已超时,防止第三方攻击服务器'notify_url'=>  get_template_directory_uri() . '/shop/xunhupay/notify2.php', //必须的,支付成功异步回调接口'return_url'=> get_template_directory_uri() . '/shop/xunhupay/return.php',//必须的,支付成功后的跳转地址'callback_url'=> esc_url(home_url('/user?action=charge')),//必须的,支付发起地址(未支付或支付失败,系统会会跳到这个地址让用户修改支付信息)'modal'=>null, //可空,支付模式 ,可选值( full:返回完整的支付网页; qrcode:返回二维码; 空值:返回支付跳转链接)'nonce_str' => str_shuffle(time())//必须的,随机字符串,作用:1.避免服务器缓存,2.防止安全密钥被猜测出来);$hashkey =$XHpayConfig['appsecret'];$data['hash']     = XH_Payment_Api::generate_xh_hash($data,$hashkey);$url              = $XHpayConfig['url_do'];try {$response     = XH_Payment_Api::http_post($url, json_encode($data));/*** 支付回调数据* @var array(*      order_id,//支付系统订单ID*      url//支付跳转地址*  )*/$result       = $response?json_decode($response,true):null;if(!$result){throw new Exception('Internal server error',500);}$hash         = XH_Payment_Api::generate_xh_hash($result,$hashkey);if(!isset( $result['hash'])|| $hash!=$result['hash']){throw new Exception(__('Invalid sign!',XH_Wechat_Payment),40029);}if($result['errcode']!=0){throw new Exception($result['errmsg'],$result['errcode']);}$pay_url=$result['url'];$pay_url_qrcode =$result['url_qrcode'];  if ($XHpayConfig['is_pop_qrcode']) {//获取js地址$RiProPay = new RiProPay;$pay_js_url = $RiProPay->_cao_get_xunhupay_js_url($pay_url);//获取二维码地址$pay_qrcode_url = $RiProPay->_cao_get_xunhupay_qrcode($pay_js_url);$iconstr = '<img src="'.get_template_directory_uri() . '/assets/icons/alipay.png" class="qr-pay">';$html_str = '<div class="qrcon"> <h5> '.$iconstr.' </h5> <div class="title">支付宝扫码支付 '.$order_price.' 元</div> <div align="center" class="qrcode"> <img src="'.$pay_url_qrcode.'"/> </div> <div class="bottom alipay"> 请使用支付宝扫一扫<br>扫描二维码支付</br> </div> </div>';echo json_encode(array('status' => '1', 'type' => '1', 'msg' => $html_str, 'img' => $pay_url_qrcode, 'num' => $order_trade_no));exit;}else{echo json_encode(array('status' => '1', 'type' => '2', 'rurl' => $pay_url, 'qrcode' => '', 'msg' => $order_trade_no));exit;}} catch (Exception $e) {echo "errcode:{$e->getCode()},errmsg:{$e->getMessage()}";exit;//TODO:处理支付调用异常的情况}exit;}//码支付 codepay 微信 7 8支付宝if ($pay_type == 7 || $pay_type == 8) {// 获取后台支付配置$codepayConfig = _cao('codepay');// 添加订单 ShopOrderif (!$ShopOrder->add($uid, $order_trade_no, $order_type, $order_price, $pay_type)) {echo json_encode(array('status' => '0', 'msg' => '订单创建失败'));exit;}//判断吗支付支付方式switch ($pay_type) {case '7':$paymethod = 1; // 支付宝break;case '8':$paymethod = 3; // 微信break;}$params = array("id" => $codepayConfig['mzf_appid'],"token" => $codepayConfig['mzf_token'],"pay_id" => $order_trade_no, //唯一标识"type" => $paymethod,//1支付宝支付 3微信支付 2QQ钱包"price" => $order_price,//金额"param" => "rimini",//自定义参数"notify_url"=>get_template_directory_uri() . '/shop/codepay/notify.php',//通知地址); //构造需要传递的参数// 请求支付数据$query = 'id='.$params['id'].'&token='.$params['token'].'&price='.$params['price'].'&pay_id='.$params['pay_id'].'&type='.$params['type'].'&notify_url='.$params['notify_url'].'&page=4'; //创建订单所需的参数$urls = 'https://codepay.fateqq.com/creat_order/creat_order?'.trim($query); //支付页面$result = get_url_contents($urls);$resultData = json_decode($result,true);if ($resultData && $resultData['status'] == 0) {if ($paymethod == 3) {$iconstr = '<img src="'.get_template_directory_uri() . '/assets/icons/weixin.png" class="qr-pay">';$html_str = '<div class="qrcon"> <h5> '.$iconstr.' </h5> <div class="title">微信扫码支付 '.$order_price.' 元</div> <div align="center" class="qrcode"> <img src="'.$resultData['qrcode'].'"/> </div> <div class="bottom weixinpay"> 请使用微信扫一扫<br>扫描二维码支付</br> </div> </div>';echo json_encode(array('status' => '1', 'type' => '1', 'msg' => $html_str, 'img' => $resultData['qrcode'], 'num' => $order_trade_no));exit;}else{$iconstr = '<img src="'.get_template_directory_uri() . '/assets/icons/alipay.png" class="qr-pay">';$html_str = '<div class="qrcon"> <h5> '.$iconstr.' </h5> <div class="title">支付宝扫码支付 '.$order_price.' 元</div> <div align="center" class="qrcode"> <img src="'.$resultData['qrcode'].'"/> </div> <div class="bottom alipay"> 请使用支付宝扫一扫<br>扫描二维码支付</br> </div> </div>';echo json_encode(array('status' => '1', 'type' => '1', 'msg' => $html_str , 'img' => $resultData['qrcode'], 'num' => $order_trade_no));exit;}}else{echo json_encode(array('status' => '0', 'msg' => $resultData['msg']));exit;}}}
add_action('wp_ajax_charge_pay', 'charge_pay');
add_action('wp_ajax_nopriv_charge_pay', 'charge_pay');/*** [go_post_pay 支付模式购买文章]* @Author   Dadong2g* @DateTime 2020-01-15T11:41:26+0800* @return   [type]                   [description]*/
function go_post_pay()
{header('Content-type:application/json; Charset=utf-8');date_default_timezone_set('Asia/Shanghai');$ip = (isset($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : '127.0.0.1'; //客户端IPglobal $current_user;$uid = (is_user_logged_in()) ? $current_user->ID : 0 ;if ($uid>0 && !_cao('is_online_pay_status',true)) {echo json_encode(array('status' => '0', 'msg' => '登录用户仅限请使用余额支付'));exit;}// isLoginCheck(); //检测登录$nonce      = !empty($_POST['nonce']) ? $_POST['nonce'] : null;$post_id = !empty($_POST['post_id']) ? $_POST['post_id'] : 0;// 1支付宝官方;2微信官方 ;3 其他  ;4 PAYJS  ;5 讯虎微信  ;6 讯虎支付宝 ;7 吗支付支付宝  ;8 吗支付微信$pay_type   = !empty($_POST['pay_type']) ? (int) $_POST['pay_type'] : null; if ($nonce && !wp_verify_nonce($nonce, 'caopay-' . $post_id)) {echo json_encode(array('status' => '0', 'msg' => '非法请求'));exit;}if ($post_id <= 0) {echo json_encode(array('status' => '0', 'msg' => '购买ID参数错误'));exit;}// 实例化订单$ShopOrder = new ShopOrder();$CaoUser = new CaoUser($uid);$PostPay = new PostPay($uid, $post_id);/商品属性START///$charge_rate    = (int) _cao('site_change_rate'); //网站比例//获取资源文章价格等信息$post_price   = get_post_meta($post_id, 'cao_price', true);$post_price = ($post_price) ? $post_price : '0' ;// 计算价格 验证会员折扣权限$post_vip_rate = get_post_meta($post_id, 'cao_vip_rate', true);$cao_is_boosvip  = get_post_meta($post_id, 'cao_is_boosvip', true);if ($cao_is_boosvip && is_boosvip_status($uid)) {$post_price    = 0;}if (_cao('is_online_pay_reta',true)) {$vip_status    = $CaoUser->vip_status();$order_vip_rate = ($vip_status) ? $post_vip_rate : 1 ;// 折扣信息if ($order_vip_rate == 0) {$post_price = 0;} elseif ($order_vip_rate == 1) {$post_price = $post_price;} elseif ($order_vip_rate > 0 && $order_vip_rate < 1) {$post_price = sprintf('%0.2f', $post_price*$order_vip_rate );}else{$post_price = $post_price;}}else{$order_vip_rate =  1 ;$post_price = $post_price;}$order_price    = sprintf('%0.2f', $post_price / $charge_rate); // 订单价格 换算人民币,保留两位小数点$order_trade_no = date("ymdhis") . mt_rand(100, 999) . mt_rand(100, 999) . mt_rand(100, 999); // 订单号$order_name     = get_bloginfo('name') . '-资源购买'; //订单名称$order_type     = 'other'; //类型 购买 其他if ($post_price <= 0) {echo json_encode(array('status' => '0', 'msg' => '免费或'._cao('site_vip_name').'免费资源仅限余额支付'));exit;}//写入本地文章购买记录if (!$PostPay->add($post_price, $order_vip_rate,$order_trade_no,$pay_type)) {echo json_encode(array('status' => '0', 'msg' => '添加订单异常'));exit;}/商品属性END/// 判断支付方式 1 支付宝 STARTif ($pay_type == 1) {// 获取后台支付宝配置$aliPayConfig = _cao('alipay');// 判断是否开启手机版跳转if (wp_is_mobile() && $aliPayConfig['is_mobile']) {// 添加订单 ShopOrderif (!$ShopOrder->add($uid, $order_trade_no, $order_type, $order_price, $pay_type)) {echo json_encode(array('status' => '0', 'msg' => '订单创建失败'));exit;}// 支付宝公共配置$params         = new \Yurun\PaySDK\Alipay\Params\PublicParams;$params->appID  = $aliPayConfig['pid'];$params->md5Key = $aliPayConfig['md5Key'];// SDK实例化,传入公共配置$pay       = new \Yurun\PaySDK\Alipay\SDK($params);// 支付接口$request    = new \Yurun\PaySDK\Alipay\Params\WapPay\Request;$request->notify_url    = get_template_directory_uri() . '/shop/alipay/notify.php';$request->return_url    = get_template_directory_uri() . '/shop/alipay/return.php'; // 支付后跳转返回地址$request->businessParams->seller_id    = $aliPayConfig['pid']; // 卖家支付宝用户号$request->businessParams->out_trade_no = $order_trade_no; // 商户订单号$request->businessParams->total_fee    = $order_price; // 价格$request->businessParams->subject      = $order_name; // 商品标题$request->businessParams->show_url     = home_url(); // 用户付款中途退出返回商户网站的地址。$payurl = $pay->redirectExecuteUrl($request);// type 1 = 扫码支付  2 跳转支付echo json_encode(array('status' => '1', 'type' => '2', 'rurl' => $payurl, 'qrcode' => '', 'msg' => $order_trade_no));exit;} elseif (!$aliPayConfig['is_pcqr']) {// 支付宝-电脑网站支付// 添加订单 ShopOrderif (!$ShopOrder->add($uid, $order_trade_no, $order_type, $order_price, $pay_type)) {echo json_encode(array('status' => '0', 'msg' => '订单创建失败'));exit;}// 支付宝公共配置$params         = new \Yurun\PaySDK\Alipay\Params\PublicParams;$params->appID  = $aliPayConfig['pid'];$params->md5Key = $aliPayConfig['md5Key'];// SDK实例化,传入公共配置$pay       = new \Yurun\PaySDK\Alipay\SDK($params);// 支付接口$request = new \Yurun\PaySDK\Alipay\Params\Pay\Request;$request->notify_url    = get_template_directory_uri() . '/shop/alipay/notify.php';$request->return_url    = get_template_directory_uri() . '/shop/alipay/return.php'; // 支付后跳转返回地址$request->businessParams->seller_id    = $aliPayConfig['pid']; // 卖家支付宝用户号$request->businessParams->out_trade_no = $order_trade_no; // 商户订单号$request->businessParams->total_fee    = $order_price; // 价格$request->businessParams->subject      = $order_name; // 商品标题// 跳转到支付宝页面$payurl = $pay->redirectExecuteUrl($request);// var_dump($payurl);// type 1 = 扫码支付  2 跳转支付echo json_encode(array('status' => '1', 'type' => '2', 'rurl' => $payurl, 'qrcode' => '', 'msg' => $order_trade_no));exit;} else {// 应用模式公共配置-当面付// 添加订单 ShopOrderif (!$ShopOrder->add($uid, $order_trade_no, $order_type, $order_price, $pay_type)) {echo json_encode(array('status' => '0', 'msg' => '订单创建失败'));exit;}// 更换公共配置文件$params = new \Yurun\PaySDK\AlipayApp\Params\PublicParams;$params->appID = $aliPayConfig['appid'];$params->appPrivateKey = $aliPayConfig['privateKey'];$params->appPublicKey = $aliPayConfig['publicKey'];// SDK实例化,传入公共配置$pay = new \Yurun\PaySDK\AlipayApp\SDK($params);// 支付接口$request = new \Yurun\PaySDK\AlipayApp\FTF\Params\QR\Request;$request->notify_url    = get_template_directory_uri() . '/shop/alipay/notify2.php'; // 支付后通知地址$request->businessParams->out_trade_no = $order_trade_no; // 商户订单号$request->businessParams->total_amount = $order_price; // 价格$request->businessParams->subject      = $order_name; // 商品标题// 调用接口try{$data = $pay->execute($request);}catch(Exception $e){var_dump($pay->response->body());}// QR内容$qrimg = getQrcode($data['alipay_trade_precreate_response']['qr_code']);$iconstr = '<img src="'.get_template_directory_uri() . '/assets/icons/alipay.png" class="qr-pay">';$html_str = '<div class="qrcon"> <h5> '.$iconstr.' </h5> <div class="title">支付宝扫码支付 '.$order_price.' 元</div> <div align="center" class="qrcode"> <img src="'.$qrimg.'"/> </div> <div class="bottom alipay"> 请使用支付宝扫一扫<br>扫描二维码支付</br> </div> </div>';echo json_encode(array('status' => '1', 'type' => '1', 'msg' => $html_str, 'img' => $qrimg, 'num' => $order_trade_no));exit;}}//END ALIPAY// 2 微信if ($pay_type == 2) {// 获取后台支付配置$wxPayConfig = _cao('weixinpay');// 公共配置$params = new \Yurun\PaySDK\Weixin\Params\PublicParams;$params->appID = $wxPayConfig['appid'];$params->mch_id = $wxPayConfig['mch_id'];$params->key = $wxPayConfig['key'];// SDK实例化,传入公共配置$pay = new \Yurun\PaySDK\Weixin\SDK($params);// 判断是否开启手机版跳转if (wp_is_mobile() && $wxPayConfig['is_mobile']) {// 添加订单 ShopOrderif (!$ShopOrder->add($uid, $order_trade_no, $order_type, $order_price, $pay_type)) {echo json_encode(array('status' => '0', 'msg' => '订单创建失败'));exit;}// 支付接口H5$request = new \Yurun\PaySDK\Weixin\H5\Params\Pay\Request;$request->body = $order_name; // 商品描述$request->out_trade_no = $order_trade_no; // 订单号$request->total_fee = $order_price*100; // 订单总金额,单位为:分$request->spbill_create_ip = $ip; // 客户端ip,必须传正确的用户ip,否则会报错$request->notify_url = get_template_directory_uri() . '/shop/weixin/notify.php'; // 异步通知地址$request->scene_info = new \Yurun\PaySDK\Weixin\H5\Params\SceneInfo;$request->scene_info->type = 'Wap'; // 可选值:IOS、Android、Wap// 下面参数根据type不同而不同$request->scene_info->wap_url = esc_url(home_url());$request->scene_info->wap_name = get_bloginfo('name');// 调用接口$result = $pay->execute($request);if($pay->checkResult()){echo json_encode(array('status' => '1', 'type' => '2', 'rurl' => $result['mweb_url'], 'qrcode' => '', 'msg' => $order_trade_no));exit;}else{$error_msg = $pay->getErrorCode() . ':' . $pay->getError();echo json_encode(array('status' => '0', 'msg' => $error_msg));exit;}} else {// PC使用当面付返回二维码// 添加订单 ShopOrderif (!$ShopOrder->add($uid, $order_trade_no, $order_type, $order_price, $pay_type)) {echo json_encode(array('status' => '0', 'msg' => '订单创建失败'));exit;}// 支付接口 PC扫码$request = new \Yurun\PaySDK\Weixin\Native\Params\Pay\Request;$request->body = $order_name; // 商品描述$request->out_trade_no = $order_trade_no; // 订单号$request->total_fee = $order_price*100; // 订单总金额,单位为:分$request->spbill_create_ip = $ip; // 客户端ip$request->notify_url = get_template_directory_uri() . '/shop/weixin/notify.php'; // 异步通知地址// 调用接口$result = $pay->execute($request);$shortUrl = $result['code_url'];if (is_array($result) && $shortUrl) {// 获取成功 返回QR内容$qrimg = getQrcode($shortUrl);$iconstr = '<img src="'.get_template_directory_uri() . '/assets/icons/weixin.png" class="qr-pay">';$html_str = '<div class="qrcon"> <h5> '.$iconstr.' </h5> <div class="title">微信扫码支付 '.$order_price.' 元</div> <div align="center" class="qrcode"> <img src="'.$qrimg.'"/> </div> <div class="bottom weixinpay"> 请使用微信扫一扫<br>扫描二维码支付</br> </div> </div>';echo json_encode(array('status' => '1', 'type' => '1', 'msg' => $html_str, 'img' => $qrimg, 'num' => $order_trade_no));exit;}else{echo json_encode(array('status' => '0', 'msg' => '接口网络异常'));exit;}}}//PAYJS if ($pay_type == 4) {require_once get_template_directory() . '/inc/class/Payjs.class.php';// 获取后台支付配置$PayJsConfig = _cao('payjs');// 配置通信参数$config = ['mchid' => $PayJsConfig['mchid'],   // 配置商户号'key'   => $PayJsConfig['key'],   // 配置通信密钥];// 初始化 PAYJS$payjs = new Payjs($config);// 添加订单 ShopOrderif (!$ShopOrder->add($uid, $order_trade_no, $order_type, $order_price, $pay_type)) {echo json_encode(array('status' => '0', 'msg' => '订单创建失败'));exit;}if (false) {// 手机模式因openid获取问题 暂时未开放}else{// 构造订单基础信息$data = ['body' => $order_name,                        // 订单标题'total_fee' => $order_price*100,                           // 订单金额'out_trade_no' => $order_trade_no,                   // 订单号'attach' => 'payjs_order_attach',            // 订单附加信息(可选参数)'notify_url' => get_template_directory_uri() . '/shop/payjs/notify.php',    // 异步通知地址(可选参数)];$result = $payjs->native($data);// var_dump($result);die;if (is_array($result) && $result['return_code'] == 1 ) {$iconstr = '<img src="'.get_template_directory_uri() . '/assets/icons/weixin.png" class="qr-pay">';$html_str = '<div class="qrcon"> <h5> '.$iconstr.' </h5> <div class="title">微信扫码支付 '.$order_price.' 元</div> <div align="center" class="qrcode"> <img src="'.$result['qrcode'].'"/> </div> <div class="bottom weixinpay"> 请使用微信扫一扫<br>扫描二维码支付</br> </div> </div>';echo json_encode(array('status' => '1', 'type' => '1', 'msg' => $html_str, 'img' => $result['qrcode'], 'num' => $order_trade_no));exit;}else{echo json_encode(array('status' => '0', 'msg' => 'PAYJS接口异常'));exit;}}echo json_encode(array('status' => '0', 'msg' => '请配置payjs参数'));exit;}//虎皮椒支付 讯虎支付 V3 微信if ($pay_type == 5) {require_once get_template_directory() . '/inc/class/xunhupay.class.php';// 获取后台支付配置$XHpayConfig = _cao('xunhupay');// 添加订单 ShopOrderif (!$ShopOrder->add($uid, $order_trade_no, $order_type, $order_price, $pay_type)) {echo json_encode(array('status' => '0', 'msg' => '订单创建失败'));exit;}$data=array('version'   => '1.1',//固定值,api 版本,目前暂时是1.1'lang'       => 'zh-cn', //必须的,zh-cn或en-us 或其他,根据语言显示页面'plugins'   => 'ripro-xunhupay-v3',//必须的,根据自己需要自定义插件ID,唯一的,匹配[a-zA-Z\d\-_]+'appid'     => $XHpayConfig['appid'], //必须的,APPID'trade_order_id'=> $order_trade_no, //必须的,网站订单ID,唯一的,匹配[a-zA-Z\d\-_]+'payment'   => 'wechat',//必须的,支付接口标识:wechat(微信接口)|alipay(支付宝接口)'total_fee' => $order_price,//人民币,单位精确到分(测试账户只支持0.1元内付款)'title'     => $order_name, //必须的,订单标题,长度32或以内'time'      => time(),//必须的,当前时间戳,根据此字段判断订单请求是否已超时,防止第三方攻击服务器'notify_url'=>  get_template_directory_uri() . '/shop/xunhupay/notify.php', //必须的,支付成功异步回调接口'return_url'=> get_template_directory_uri() . '/shop/xunhupay/return.php',//必须的,支付成功后的跳转地址'callback_url'=> esc_url(home_url('/user?action=charge')),//必须的,支付发起地址(未支付或支付失败,系统会会跳到这个地址让用户修改支付信息)'modal'=>null, //可空,支付模式 ,可选值( full:返回完整的支付网页; qrcode:返回二维码; 空值:返回支付跳转链接)'nonce_str' => str_shuffle(time())//必须的,随机字符串,作用:1.避免服务器缓存,2.防止安全密钥被猜测出来);$hashkey =$XHpayConfig['appsecret'];$data['hash']     = XH_Payment_Api::generate_xh_hash($data,$hashkey);$url              = $XHpayConfig['url_do'];try {$response     = XH_Payment_Api::http_post($url, json_encode($data));/*** 支付回调数据* @var array(*      order_id,//支付系统订单ID*      url//支付跳转地址*  )*/$result       = $response?json_decode($response,true):null;if(!$result){throw new Exception('Internal server error',500);}$hash         = XH_Payment_Api::generate_xh_hash($result,$hashkey);if(!isset( $result['hash'])|| $hash!=$result['hash']){throw new Exception(__('Invalid sign!',XH_Wechat_Payment),40029);}if($result['errcode']!=0){throw new Exception($result['errmsg'],$result['errcode']);}$pay_url=$result['url'];$pay_url_qrcode =$result['url_qrcode'];  if ($XHpayConfig['is_pop_qrcode']) {//获取js地址$RiProPay = new RiProPay;$pay_js_url = $RiProPay->_cao_get_xunhupay_js_url($pay_url);//获取二维码地址$pay_qrcode_url = $RiProPay->_cao_get_xunhupay_qrcode($pay_js_url);$iconstr = '<img src="'.get_template_directory_uri() . '/assets/icons/weixin.png" class="qr-pay">';$html_str = '<div class="qrcon"> <h5> '.$iconstr.' </h5> <div class="title">微信扫码支付 '.$order_price.' 元</div> <div align="center" class="qrcode"> <img src="'.$pay_url_qrcode.'"/> </div> <div class="bottom weixinpay"> 请使用微信扫一扫<br>扫描二维码支付</br> </div> </div>';echo json_encode(array('status' => '1', 'type' => '1', 'msg' => $html_str, 'img' => $pay_url_qrcode, 'num' => $order_trade_no));exit;}else{echo json_encode(array('status' => '1', 'type' => '2', 'rurl' => $pay_url, 'qrcode' => '', 'msg' => $order_trade_no));exit;}} catch (Exception $e) {echo "errcode:{$e->getCode()},errmsg:{$e->getMessage()}";exit;//TODO:处理支付调用异常的情况}exit;}//虎皮椒支付 讯虎支付 V3 支付宝if ($pay_type == 6) {require_once get_template_directory() . '/inc/class/xunhupay.class.php';// 获取后台支付配置$XHpayConfig = _cao('xunhualipay');// 添加订单 ShopOrderif (!$ShopOrder->add($uid, $order_trade_no, $order_type, $order_price, $pay_type)) {echo json_encode(array('status' => '0', 'msg' => '订单创建失败'));exit;}$data=array('version'   => '1.1',//固定值,api 版本,目前暂时是1.1'lang'       => 'zh-cn', //必须的,zh-cn或en-us 或其他,根据语言显示页面'plugins'   => 'ripro-xunhupay-v3',//必须的,根据自己需要自定义插件ID,唯一的,匹配[a-zA-Z\d\-_]+'appid'     => $XHpayConfig['appid'], //必须的,APPID'trade_order_id'=> $order_trade_no, //必须的,网站订单ID,唯一的,匹配[a-zA-Z\d\-_]+'payment'   => 'alipay',//必须的,支付接口标识:wechat(微信接口)|alipay(支付宝接口)'total_fee' => $order_price,//人民币,单位精确到分(测试账户只支持0.1元内付款)'title'     => $order_name, //必须的,订单标题,长度32或以内'time'      => time(),//必须的,当前时间戳,根据此字段判断订单请求是否已超时,防止第三方攻击服务器'notify_url'=>  get_template_directory_uri() . '/shop/xunhupay/notify2.php', //必须的,支付成功异步回调接口'return_url'=> get_template_directory_uri() . '/shop/xunhupay/return.php',//必须的,支付成功后的跳转地址'callback_url'=> esc_url(home_url('/user?action=charge')),//必须的,支付发起地址(未支付或支付失败,系统会会跳到这个地址让用户修改支付信息)'modal'=>null, //可空,支付模式 ,可选值( full:返回完整的支付网页; qrcode:返回二维码; 空值:返回支付跳转链接)'nonce_str' => str_shuffle(time())//必须的,随机字符串,作用:1.避免服务器缓存,2.防止安全密钥被猜测出来);$hashkey =$XHpayConfig['appsecret'];$data['hash']     = XH_Payment_Api::generate_xh_hash($data,$hashkey);$url              = $XHpayConfig['url_do'];try {$response     = XH_Payment_Api::http_post($url, json_encode($data));/*** 支付回调数据* @var array(*      order_id,//支付系统订单ID*      url//支付跳转地址*  )*/$result       = $response?json_decode($response,true):null;if(!$result){throw new Exception('Internal server error',500);}$hash         = XH_Payment_Api::generate_xh_hash($result,$hashkey);if(!isset( $result['hash'])|| $hash!=$result['hash']){throw new Exception(__('Invalid sign!',XH_Wechat_Payment),40029);}if($result['errcode']!=0){throw new Exception($result['errmsg'],$result['errcode']);}$pay_url=$result['url'];$pay_url_qrcode =$result['url_qrcode'];  if ($XHpayConfig['is_pop_qrcode']) {//获取js地址$RiProPay = new RiProPay;$pay_js_url = $RiProPay->_cao_get_xunhupay_js_url($pay_url);//获取二维码地址$pay_qrcode_url = $RiProPay->_cao_get_xunhupay_qrcode($pay_js_url);$iconstr = '<img src="'.get_template_directory_uri() . '/assets/icons/alipay.png" class="qr-pay">';$html_str = '<div class="qrcon"> <h5> '.$iconstr.' </h5> <div class="title">支付宝扫码支付 '.$order_price.' 元</div> <div align="center" class="qrcode"> <img src="'.$pay_url_qrcode.'"/> </div> <div class="bottom alipay"> 请使用支付宝扫一扫<br>扫描二维码支付</br> </div> </div>';echo json_encode(array('status' => '1', 'type' => '1', 'msg' => $html_str, 'img' => $pay_url_qrcode, 'num' => $order_trade_no));exit;}else{echo json_encode(array('status' => '1', 'type' => '2', 'rurl' => $pay_url, 'qrcode' => '', 'msg' => $order_trade_no));exit;}} catch (Exception $e) {echo "errcode:{$e->getCode()},errmsg:{$e->getMessage()}";exit;//TODO:处理支付调用异常的情况}exit;}//码支付 codepay 微信 7 8支付宝if ($pay_type == 7 || $pay_type == 8) {// 获取后台支付配置$codepayConfig = _cao('codepay');// 添加订单 ShopOrderif (!$ShopOrder->add($uid, $order_trade_no, $order_type, $order_price, $pay_type)) {echo json_encode(array('status' => '0', 'msg' => '订单创建失败'));exit;}//判断吗支付支付方式switch ($pay_type) {case '7':$paymethod = 1; // 支付宝break;case '8':$paymethod = 3; // 微信break;}$params = array("id" => $codepayConfig['mzf_appid'],"token" => $codepayConfig['mzf_token'],"pay_id" => $order_trade_no, //唯一标识"type" => $paymethod,//1支付宝支付 3微信支付 2QQ钱包"price" => $order_price,//金额"param" => "rimini",//自定义参数"notify_url"=>get_template_directory_uri() . '/shop/codepay/notify.php',//通知地址); //构造需要传递的参数// 请求支付数据$query = 'id='.$params['id'].'&token='.$params['token'].'&price='.$params['price'].'&pay_id='.$params['pay_id'].'&type='.$params['type'].'&notify_url='.$params['notify_url'].'&page=4'; //创建订单所需的参数$urls = 'https://codepay.fateqq.com/creat_order/creat_order?'.trim($query); //支付页面$result = get_url_contents($urls);$resultData = json_decode($result,true);if ($resultData && $resultData['status'] == 0) {if ($paymethod == 3) {$iconstr = '<img src="'.get_template_directory_uri() . '/assets/icons/weixin.png" class="qr-pay">';$html_str = '<div class="qrcon"> <h5> '.$iconstr.' </h5> <div class="title">微信扫码支付 '.$order_price.' 元</div> <div align="center" class="qrcode"> <img src="'.$resultData['qrcode'].'"/> </div> <div class="bottom weixinpay"> 请使用微信扫一扫<br>扫描二维码支付</br> </div> </div>';echo json_encode(array('status' => '1', 'type' => '1', 'msg' => $html_str, 'img' => $resultData['qrcode'], 'num' => $order_trade_no));exit;}else{$iconstr = '<img src="'.get_template_directory_uri() . '/assets/icons/alipay.png" class="qr-pay">';$html_str = '<div class="qrcon"> <h5> '.$iconstr.' </h5> <div class="title">支付宝扫码支付 '.$order_price.' 元</div> <div align="center" class="qrcode"> <img src="'.$resultData['qrcode'].'"/> </div> <div class="bottom alipay"> 请使用支付宝扫一扫<br>扫描二维码支付</br> </div> </div>';echo json_encode(array('status' => '1', 'type' => '1', 'msg' => $html_str , 'img' => $resultData['qrcode'], 'num' => $order_trade_no));exit;}}else{echo json_encode(array('status' => '0', 'msg' => $resultData['msg']));exit;}}}
add_action('wp_ajax_go_post_pay', 'go_post_pay');
add_action('wp_ajax_nopriv_go_post_pay', 'go_post_pay');// 检测支付状态
function check_pay()
{header('Content-type:application/json; Charset=utf-8');global $current_user;$uid = is_user_logged_in() ? $current_user->ID : 0;$post_id = !empty($_POST['post_id']) ? $_POST['post_id'] : 0;$orderNum = !empty($_POST['num']) ? $_POST['num'] : null;$ShopOrder = new ShopOrder();$status = $ShopOrder->check($orderNum);if ($status) {$intstatus = 1;$msg = '恭喜你,支付成功';$RiProPay = new RiProPay;$RiProPay->AddPayPostCookie($uid,$post_id,$orderNum);}else{$intstatus = 0;$msg = '支付中';}$result = array('status' => $intstatus,'msg' => $msg);echo json_encode($result);exit;
}
add_action('wp_ajax_check_pay', 'check_pay');
add_action('wp_ajax_nopriv_check_pay', 'check_pay');/*** [add_pay_post 购买文章资源]* @Author   Dadong2g* @DateTime 2019-06-02T15:33:41+0800*/
function add_pay_post()
{header('Content-type:application/json; Charset=utf-8');global $current_user;isLoginCheck(); //检测登录$uid     = $current_user->ID;$post_id = !empty($_POST['post_id']) ? (int) $_POST['post_id'] : null;$nonce   = !empty($_POST['nonce']) ? $_POST['nonce'] : null;// $create_nonce= wp_create_nonce('caopay-'.$uid);if ($nonce && !wp_verify_nonce($nonce, 'caopay-' . $post_id)) {echo json_encode(array('status' => '0', 'msg' => '非法请求'));exit;}if (!$post_id > 0) {echo json_encode(array('status' => '0', 'msg' => '资源错误'));exit;}// 验证通过 开始处理消费逻辑$PostPay = new PostPay($uid, $post_id);$CaoUser = new CaoUser($uid);// 检测用户是否已经购买过 防止重复扣费if ($PostPay->isPayPost()) {echo json_encode(array('status' => '0', 'msg' => '您已经购买过'));exit;}// 计算价格 验证会员折扣权限$post_price    = get_post_meta($post_id, 'cao_price', true);$post_vip_rate = get_post_meta($post_id, 'cao_vip_rate', true);$cao_is_boosvip  = get_post_meta($post_id, 'cao_is_boosvip', true);if ($cao_is_boosvip && is_boosvip_status($uid)) {$post_price    = 0;}$vip_status    = $CaoUser->vip_status();if ($vip_status) {$order_vip_rate = $post_vip_rate;} else {$order_vip_rate = 1;}// 发起订单请求$order_trade_no = date("ymdhis") . mt_rand(100, 999) . mt_rand(100, 999) . mt_rand(100, 999); // 订单号$payInfo = $PostPay->add($post_price, $order_vip_rate,$order_trade_no,9999);if (!$payInfo || !is_array($payInfo)) {echo json_encode(array('status' => '0', 'msg' => '添加订单失败'));exit;}// 订单添加成功 开始扣费逻辑$amount    = $payInfo['order_amount'] * -1;$old_money = $CaoUser->get_balance();if (!$CaoUser->update_balance($amount)) {echo json_encode(array('status' => '0', 'msg' => '可用余额不足,<b><a href="'.esc_url(home_url('/user?action=charge')).'">去充值</a></b>'));exit;}// 添加纪录if ($uid) {$Caolog    = new Caolog();$new_money = $old_money + $amount;$note      = '站内货币购买资源 ' . $amount;$Caolog->addlog($uid, $old_money, $amount, $new_money, 'post', $note);}// 扣费成功 更具上面返回的订单号更新订单状态if (!$PostPay->update($payInfo['order_trade_no'])) {echo json_encode(array('status' => '0', 'msg' => '订单状态异常,请联系管理员'));exit;}// 更新完成 更新资源销售数量 输出成功信息$before_paynum = get_post_meta($post_id, 'cao_paynum', true);update_post_meta($post_id, 'cao_paynum', (int) $before_paynum + 1);// 发放佣金$author_id = (int)get_post($post_id)->post_author;if ($author_id != $uid) {//自己购买自己不发放add_post_author_bonus($author_id,$payInfo['order_amount']);}echo json_encode(array('status' => '1', 'msg' => '购买成功,扣除:' . $payInfo['order_amount'] . _cao('site_money_ua')));if (_cao('is_mail_nitfy_pay')) {_sendMail($current_user->user_email, '资源购买成功', '成功购买资源,扣除:' . $payInfo['order_amount'] . _cao('site_money_ua'));}exit;
}
add_action('wp_ajax_add_pay_post', 'add_pay_post');
add_action('wp_ajax_nopriv_add_pay_post', 'add_pay_post');function pay_vip()
{header('Content-type:application/json; Charset=utf-8');global $current_user;isLoginCheck(); //检测登录$uid     = $current_user->ID;$pay_id = !empty($_POST['pay_id']) ? (int) $_POST['pay_id'] : null;$nonce   = !empty($_POST['nonce']) ? $_POST['nonce'] : null;if ($nonce && !wp_verify_nonce($nonce, 'caoclick-'.$uid)) {echo json_encode(array('status' => '0', 'msg' => '非法请求'));exit;}// 验证通过 开始处理消费逻辑$PostPay = new PostPay($uid, $post_id);$CaoUser = new CaoUser($uid);// 获取后台价格设置$vip_pay_setting = _cao('vip-pay-setting');$payInfo = [];foreach ($vip_pay_setting as $key => $item) {if ($key == $pay_id) {$payInfo = $item;break; // 当 $value为c时,终止循环}}if (empty($payInfo)) {echo json_encode(array('status' => '0', 'msg' => '购买信息错误'));exit;}// 计算价格 验证会员折扣权限$pay_price = $payInfo['price'] * -1;$pay_daynum = $payInfo['daynum'];if (is_boosvip_status($uid)) {echo json_encode(array('status' => '0', 'msg' => '您已经是终身永久,无需重复开通'));exit;}// 订单计算成功 开始扣费逻辑$amount    = $payInfo['price'] * -1;$old_money = $CaoUser->get_balance();if (!$CaoUser->update_balance($amount)) {echo json_encode(array('status' => '0', 'msg' => '可用余额不足'));exit;}// 添加纪录if ($uid) {$Caolog    = new Caolog();$new_money = $old_money + $amount;$note      = '购买'._cao('site_vip_name') .' '. $amount;$Caolog->addlog($uid, $old_money, $amount, $new_money, 'other', $note);}// 扣费成功 更新会员数据if (!$CaoUser->update_vip_pay($pay_daynum)) {echo json_encode(array('status' => '0', 'msg' => '购买失败,请联系网站管理员'));exit;}if ($pay_daynum == 9999) {$success_msg = '成功开通:终身特权! 扣除:' . $payInfo['price'] . _cao('site_money_ua');}else{$success_msg = '成功开通:'.$pay_daynum.'天特权! 扣除:' . $payInfo['price'] . _cao('site_money_ua');}echo json_encode(array('status' => '1', 'msg' => $success_msg));if (_cao('is_mail_nitfy_vip')) {_sendMail($current_user->user_email, '特权开通成功', $success_msg);}exit;
}
add_action('wp_ajax_pay_vip', 'pay_vip');
add_action('wp_ajax_nopriv_pay_vip', 'pay_vip');/*** [userinfo AJAX保存用户基本信息]* @Author   Dadong2g* @DateTime 2019-05-31T13:12:33+0800* @return   [type]                   [description]*/
function edit_user_info()
{session_start();global $current_user;isLoginCheck(); //检测登录$uid         = $current_user->ID;$nickname    = !empty($_POST['nickname']) ? wp_strip_all_tags($_POST['nickname']) : null;$email       = !empty($_POST['email']) ? $_POST['email'] : null;$avatar_type = !empty($_POST['user_avatar_type']) ? $_POST['user_avatar_type'] : 'gravatar';$phone       = !empty($_POST['phone']) ? $_POST['phone'] : null;$qq          = !empty($_POST['qq']) ? $_POST['qq'] : null;$description = !empty($_POST['description']) ? $_POST['description'] : null;$userdata                 = array();$userdata['ID']           = $uid;$userdata['nickname']     = $nickname;$userdata['display_name'] = @$userdata['nickname'];if ($current_user->user_email != $email) {// 邮箱验证$preg_email = '/^[a-zA-Z0-9]+([-_.][a-zA-Z0-9]+)*@([a-zA-Z0-9]+[-.])+([a-z]{2,5})$/ims';if (preg_match($preg_email, $email)) {$userdata['user_email'] = esc_sql($email);} else {echo "邮箱格式错误";exit();}// 是否需要邮箱验证if (_cao('is_user_bang_email')) {if (empty($_POST['captcha']) || empty($_SESSION['CAO_code_captcha']) || trim(strtolower($_POST['captcha'])) != $_SESSION['CAO_code_captcha']) {echo "新邮箱验证码错误";exit();}if ($_SESSION['CAO_code_captcha_email'] != $email) {echo "验证码与新邮箱不对应";exit();}}}if (wp_update_user($userdata)) {if ($phone && $phone != get_user_meta($uid, 'phone', true)) {// 手机验证if (preg_match("/^1[345678]{1}\d{9}$/", $phone)) {update_user_meta($uid, 'phone', $phone);} else {echo "手机号码格式错误";exit();}}// is_numeric();if ($qq && $qq != get_user_meta($uid, 'qq', true)) {if (is_numeric($qq)) {update_user_meta($uid, 'qq', $qq);} else {echo "QQ号码格式错误";exit();}}if ($description && $description != get_user_meta($uid, 'description', true)) {update_user_meta($uid, 'description', $description);}if ($avatar_type) {update_user_meta($uid, 'user_avatar_type', $avatar_type);}echo "1";exit();} else {echo "修改失败";exit();}exit();
}add_action('wp_ajax_edit_user_info', 'edit_user_info');
add_action('wp_ajax_nopriv_edit_user_info', 'edit_user_info');//修改密码
function edit_repassword()
{global $current_user;isLoginCheck(); //检测登录$uid         = $current_user->ID;$password    = !empty($_POST['password']) ? wp_strip_all_tags($_POST['password']) : null;$new_password    = !empty($_POST['new_password']) ? wp_strip_all_tags($_POST['new_password']) : null;$re_password    = !empty($_POST['re_password']) ? wp_strip_all_tags($_POST['re_password']) : null;if (strlen($password) < 6) {echo "密码长度至少6位";exit();} elseif ($new_password != $re_password) {echo "两次输入密码不一致";exit();} else {$userdata['ID']        = $uid;$userdata['user_pass'] = $re_password;wp_update_user($userdata);echo "1";exit();}exit();
}
add_action('wp_ajax_edit_repassword', 'edit_repassword');
add_action('wp_ajax_nopriv_edit_repassword', 'edit_repassword');function unset_open_oauth()
{global $current_user;isLoginCheck(); //检测登录$uid = $current_user->ID;$unsetid = !empty($_POST['unsetid']) ? $_POST['unsetid'] : null;if ($unsetid) {update_user_meta($uid, 'open_'.$unsetid.'_openid', '');update_user_meta($uid, 'open_'.$unsetid.'_bind', 0);echo "1";exit();}else{echo "0";exit();}}
add_action('wp_ajax_unset_open_oauth', 'unset_open_oauth');
add_action('wp_ajax_nopriv_unset_open_oauth', 'unset_open_oauth');/*** [user_qiandao 签到]* @Author   Dadong2g* @DateTime 2019-09-21T12:11:40+0800* @return   [type]                   [description]*/
function user_qiandao()
{header('Content-type:application/json; Charset=utf-8');global $current_user;$uid         = ($current_user->ID) ? $current_user->ID : 0 ;if ($uid == 0) {echo json_encode(array('status' => '0', 'msg' => '请登录后签到'));exit;}if (!_cao('is_qiandao','1')) {echo json_encode(array('status' => '0', 'msg' => '签到功能暂未开启'));exit;}if (_cao_user_is_qiandao()) {echo json_encode(array('status' => '0', 'msg' => '今日已签到,请明日再来'));exit;}else{$thenTime = time();$qiandao_money = _cao('qiandao_to_money','5');update_user_meta($uid, 'cao_qiandao_time',$thenTime);// 卡密有效 进行换算$CaoUser   = new CaoUser($uid);$old_money = $CaoUser->get_balance();if (!$CaoUser->update_balance($qiandao_money)) {echo json_encode(array('status' => '0', 'msg' => '签到异常,请稍后重试'));exit;}// 添加纪录if ($uid) {$Caolog    = new Caolog();$new_money = $old_money + $qiandao_money;$note      = '签到赠送'. $qiandao_money;$Caolog->addlog($uid, $old_money, $qiandao_money, $new_money, 'other', $note);}echo json_encode(array('status' => '1', 'msg' => '签到成功,赠送'.$qiandao_money._cao('site_money_ua') ));exit;}}
add_action('wp_ajax_user_qiandao', 'user_qiandao');
add_action('wp_ajax_nopriv_user_qiandao', 'user_qiandao');/*** [edit_user_qr AJAX保存收款码]* @Author   Dadong2g* @DateTime 2019-05-31T13:35:53+0800* @return   [type]                   [description]*/
function edit_user_qr()
{global $current_user;isLoginCheck(); //检测登录$uid       = $current_user->ID;$qr_alipay = !empty($_POST['qr_alipay']) ? $_POST['qr_alipay'] : null;$qr_weixin = !empty($_POST['qr_weixin']) ? $_POST['qr_weixin'] : null;if ($qr_alipay && $qr_alipay != get_user_meta($uid, 'qr_alipay', true)) {update_user_meta($uid, 'qr_alipay', $qr_alipay);}if ($qr_weixin && $qr_weixin != get_user_meta($uid, 'qr_weixin', true)) {update_user_meta($uid, 'qr_weixin', $qr_weixin);}echo "1";exit();
}add_action('wp_ajax_edit_user_qr', 'edit_user_qr');
add_action('wp_ajax_nopriv_edit_user_qr', 'edit_user_qr');//收藏文章
function fav_post()
{header('Content-type:application/json; Charset=utf-8');global $current_user;$uid         = ($current_user->ID) ? $current_user->ID : 0 ;$post_id    = !empty($_POST['post_id']) ? (int)$_POST['post_id'] : 0;if ($uid == 0) {echo json_encode(array('status' => '0', 'msg' => '请登录后再收藏'));exit;}if (is_get_post_fav($post_id)) {// 取消收藏_cao_del_follow_post($uid,$post_id);echo json_encode(array('status' => '1', 'msg' => '取消收藏成功'));exit;}else{//新收藏_cao_add_follow_post($uid,$post_id);echo json_encode(array('status' => '1', 'msg' => '收藏成功'));exit;}exit;
}
add_action('wp_ajax_fav_post', 'fav_post');
add_action('wp_ajax_nopriv_fav_post', 'fav_post');///*******下载弹窗********function user_down_ajax()
{header('Content-type:application/json; Charset=utf-8');global $current_user;$uid         = ($current_user->ID) ? $current_user->ID : 0 ;$post_id = !empty($_POST['post_id']) ? (int) $_POST['post_id'] : 0;if ($uid == 0 && !_cao('is_ripro_nologin_pay','1')) {echo json_encode(array('status' => '0', 'msg' => '请登录后下载'));exit;}if (!$post_id) {echo json_encode(array('status' => '0', 'msg' => '下载参数错误,请刷新重试'));exit;}// 判断是否有权限下载$CaoUser = new CaoUser($uid);$PostPay = new PostPay($uid, $post_id);$cao_is_post_free = cao_is_post_free($uid,$post_id);if ($cao_is_post_free && !is_user_logged_in()) {echo json_encode(array('status' => '0', 'msg' => '免费资源请登录后下载'));exit;}if ($PostPay->isPayPost() || $cao_is_post_free) {//免登录购买用户直接下载if(!is_user_logged_in() && _cao('is_ripro_nologin_pay','1')){echo json_encode(array('status' => '1', 'msg' => esc_url(home_url('/go?post_id='.$post_id)) ));exit;}// 判断会员类型 判断下载次数$vip_status = $CaoUser->vip_status();$this_vip_downum = cao_vip_downum($uid,$vip_status);if ($this_vip_downum['is_down'] || ($PostPay->isPayPost()) ) {echo json_encode(array('status' => '1', 'msg' => esc_url(home_url('/go?post_id='.$post_id)) ));exit;} else {$_msg = '<p>今日免费下载次数已用【'.$this_vip_downum['today_down_num'].'】,剩余【'.$this_vip_downum['over_down_num'].'】</p>';$_msg .= '<p style=" font-size: 15px; color: #888; margin: 0; ">'._cao('site_no_vip_name').'用户每日免费下载次数('.($_num=(_cao('is_novip_down_num')) ? _cao('novip_down_num') : '无限').')</p>';$_msg .= '<p style=" font-size: 15px; color: #888; margin: 0; ">'._cao('site_vip_name').'会员每日免费下载次数('.($_num=(_cao('is_vip_down_num')) ? _cao('vip_down_num') : '无限').')</p>';$_msg .= '<p style=" font-size: 15px; color: #888; margin: 0; ">永久'._cao('site_vip_name').'会员每日免费下载次数('.($_num=(_cao('is_boosvip_down_num')) ? _cao('boosvip_down_num') : '无限').')</p>';echo json_encode(array('status' => '0', 'msg' => $_msg));exit;}}else{echo json_encode(array('status' => '0', 'msg' => '您没有购买此资源或下载权限错误' ));exit;}echo json_encode(array('status' => '0', 'msg' => '您没有购买此资源或下载权限错误' ));exit;
}
add_action('wp_ajax_user_down_ajax', 'user_down_ajax');
add_action('wp_ajax_nopriv_user_down_ajax', 'user_down_ajax');

演示地址:醉学网-让您提分更轻松!醉学网是一个大型学习知识分享平台,在这里每个人都能分享自己的学习方法,同时你也可以学习优秀的学习经验。醉学网,让您提分更轻松!icon-default.png?t=N7T8http://www.nongpin88.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/84094.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安科瑞为工业能效提升行动计划提供EMS解决方案-安科瑞黄安南

摘要: 2022年6月29日工信部、发改委、财政部、生态环境部、国资委、市场监管总局六部门联合下发《关于印发工业能效提升行动计划的通知》&#xff08;工信部联节〔2022〕76号&#xff0c;以下简称《行动计划》&#xff09;&#xff0c;主要目的是为了提高工业领域能源利用效率&…

Hbase分布式集群部署

目录 一、环境说明 二、部署Hbase 2.1 解压Hbase 2.2 移动解压包 2.3 修改 hbase-env.sh文件 2.4 修改环境变量 2.5 修改hbase-site.xml文件 2.6 修改regionservers 文件 2.7 分发hbase 2.7.1 分发hbase包 2.7.2 分发环境配置 2.8 启动hbase服务 2.8.1 环境生效 …

Tungsten Fabric数据量过大问题处理初探

开源SDN系统Tungsten Fabric面临数据产生过多问题。 经排查&#xff0c;产生数据多出自analytics组件的Cassandra数据库()。很多分析数据会存储至Cassandra库&#xff0c;并持久化处理。 没有特殊调整的话&#xff0c;目录在 /var/lib/docker/volumes/analytics_database_an…

抗锯齿的线

抗锯齿的线 右下角的时候h是0,到顶部 h是1&#xff0c;然后中间y相距4个像素&#xff0c;那dy就是0.25 如果让h abs(fract(h - 0.5) - 0.5) 中间一行0.5&#xff0c;第一行 第三行都是0.25&#xff0c;两端都是0 根据插值来看 这里是 如果用h/dy 那么第一行以上&#xff0…

【ROS入门】创建工作空间与功能包

文章结构 工作空间文件结构创建工作空间流程创建工作空间编译工作空间设置环境变量/创建功能包创建功能包编译功能包 检查环境变量 工作空间文件结构 工作空间(workspace)是一个存放工程开发相关文件的文件夹&#xff0c;类似于在windows中使用IDE创建的工程。主要分为以下四个…

【element-ui】form表单动态修改rules校验项

在项目开发过程中&#xff0c;该页面有暂存和提交两个按钮&#xff0c;其中暂存和提交必填项校验不一样&#xff0c;此时需要动态增减必填项校验 &#xff0c;解决方法如下&#xff1a; 增加rules校验项 this.$set(this.formRules,name,[{required:true,message:请输入名称,t…

Layui快速入门之第十三节 日期与时间选择器

目录 一&#xff1a;基本用法 API 渲染 属性 弹出提示 2.8 获取实例 2.8 解除实例绑定 2.8 关闭日期面板 2.7 获取某月的最后一天 二&#xff1a;常规用法 三&#xff1a;多类型选择器 四&#xff1a;范围选择 五&#xff1a;直接静态显示 六&#xff1a;更多功能…

断点测试怎么做?一文教你用Charles 工具做好接口测试!

在测试工作过程中&#xff0c;我们经常会在程序的某一行或者某一环节设置断点&#xff0c;在程序请求的过程中&#xff0c;修改断点处的参数、请求或者响应&#xff0c;借此定位问题&#xff0c;这就是所谓的断点测试。这类断点测试主要用于接口测试。 断点测试可以通过查看接…

C语言关于自定义字符函数和字符串函数的相关笔试题(找工作必看)

本篇字符函数和字符串函数 求字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数介绍 strncpy strncat strncmp 字符串查找 strstr strtok 错误信息报告 strerror 内存操作函数 memcpy memmove memset memcmp 在我们笔试时&#xff0c;很…

mysql限制用户登录失败次数,限制时间

mysql用户登录限制设置 mysql 需要进行用户登录次数限制,当使用密码登录超过 3 次认证链接失败之后,登录锁住一段时间,禁止登录这里使用的 mysql: 8.1.0 这种方式不用重启数据库. 配置: 首先进入到 mysql 命令行:然后需要安装两个插件: 在 mysql 命令行中执行: mysql> INS…

易基因|ONT:三代原核甲基化在痤疮杆菌噬菌体表观遗传印迹中的工程选择性研究

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 痤疮表皮杆菌&#xff08;Cutibacterium acnes&#xff0c;C.acnes&#xff09;是一种革兰氏阳性细菌&#xff0c;是人类皮肤微生物组成员。尽管是最丰富的皮肤共生体&#xff0c;但某些…

详细介绍下VLAN隔离与VLAN之间互联

什么VLAN&#xff1f; VLAN代表虚拟局域网&#xff08;Virtual Local Area Network&#xff09;&#xff0c;它是一种在物理网络基础上创建逻辑上独立的虚拟网络的技术。VLAN允许将一个局域网划分为多个虚拟的逻辑网络&#xff0c;这些虚拟网络在逻辑上相互隔离&#xff0c;就…

支付宝开发问题:很抱歉,系统监测到你的支付宝账号有异常,入驻失败,如需帮助请拨打热线

想开发个支付宝小程序&#xff0c;结果困难重重啊 妹的&#xff0c;这一个星期一直都被这个问题困扰&#xff0c;找了一个个体户资质&#xff0c;一直失败&#xff0c;专门去注册了一个公司&#xff0c;还是提交失败。 给支付宝客服打电话&#xff0c;跟没打一样&#xff0c;…

外包干了2个月,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

Windows系统如何部署Wing FTP Server与公网远程访问【内网穿透】

Wing FTP Server安装配置结合内网穿透实现公网访问本地站点 文章目录 Wing FTP Server安装配置结合内网穿透实现公网访问本地站点前言1.Wing FTP Server下载安装2.Wing FTP Server配置部署3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3…

使用 sklearn 进行数学建模的通用模板

前言 无论是本科和研究生都会有的数学建模含金量还是很高的&#xff0c;下面将介绍一下进行数学建模的一些基本操作方法&#xff0c;这里主要是利用sklearn 进行建模&#xff0c;包括前期的一些数据预处理以及一些常用的机器学习模型以及一些简单粗暴的通用建模步骤&#xff0…

在 Simscape Electrical 中对两区 MVDC 电动船的建模和仿真(Simulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

springboot集成mybatis-plus

一、在spring boot中配置mybatis-plus 1、创建一个spring boot项目&#xff0c;注意勾选mysql 2、在pom.xml文件中添加mybatis-plus的依赖包 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0&qu…

Llama-2 推理和微调的硬件要求总结:RTX 3080 就可以微调最小模型

大语言模型微调是指对已经预训练的大型语言模型&#xff08;例如Llama-2&#xff0c;Falcon等&#xff09;进行额外的训练&#xff0c;以使其适应特定任务或领域的需求。微调通常需要大量的计算资源&#xff0c;但是通过量化和Lora等方法&#xff0c;我们也可以在消费级的GPU上…

区块链技术:解密去中心化的革命

文章目录 区块链的基础概念什么是区块链&#xff1f;区块链的核心原理1. 分布式账本2. 区块3. 加密技术4. 共识机制 区块链的工作原理区块链的交易过程区块链的安全性共识机制的作用 区块链的应用领域1. 金融服务2. 供应链管理3. 物联网4. 医疗保健5. 政府与公共服务 区块链的未…