1
0
Fork 0
mirror of https://github.com/yunluo/gdk.git synced 2024-05-13 11:46:57 +02:00

更新微信登陆功能

This commit is contained in:
云落 2020-02-07 23:57:46 +08:00
parent d322004348
commit 6c0ca32085
6 changed files with 561 additions and 85 deletions

View file

@ -34,6 +34,8 @@ function gdk_enqueue_script_frontend() {
'check_pay_points' => wp_create_nonce('check_pay_points'),
'check_pay_view' => wp_create_nonce('check_pay_view'),
'check_code' => wp_create_nonce('check_code'),
'gdk_weauth_qr_gen' => wp_create_nonce('gdk_weauth_qr_gen'),
'gdk_weauth_check' => wp_create_nonce('gdk_weauth_check'),
]);

View file

@ -114,55 +114,6 @@ function check_pay_points(a, b) {
}
/**
* 获取隐藏内容
* @param {init} a 文章ID
* @param {string} b 提取码
*/
function getcontent(a,b) {
var ajax_data = {
action: 'getcontent',
id: a
};
$.post(ajax.url, ajax_data,
function(c) {
if (c) {
show_hide_content('#hide_notice',c);
}
});
}
/** */
/**
* 检查服务器是否有付费可见订单
* @param {init} a 文章ID
* @param {string} b 订单号
*/
function check_pay_view(a, b) {
var ajax_data = {
check_pay_view: ajax.check_pay_view,
action: 'check_pay_view',
id: a,
orderid: b
};
$.post(ajax.url, ajax_data,function(c) {
c = $.trim(c);
if (c == '200') {
swal("支付成功!", "为了方便您后续再次查看,建议您输入您的常用邮箱作为提取码", "info", {
dangerMode: true,
closeOnClickOutside: false,
content: "input",
})
.then((d) => {/**提取码 */
getcontent(a, `${d}`);
addcode(a, `${d}`);
}); //ok
} else {
swal("支付失败", "您的支付没有成功,请重试", "error");
}
},
'json');
}
/**
@ -224,14 +175,87 @@ $("#submit_pay").click(function() {
}
});
////end
////end////
/**
* 获取隐藏内容
* @param {init} a 文章ID
*/
function get_content(a) {
var ajax_data = {
action: 'get_content',
id: a
};
$.post(ajax.url, ajax_data,
function(c) {
c = $.trim(c);
if (c !== '400') {
show_hide_content('#hide_notice',c);
}else{
show_hide_content('#hide_notice','貌似出了点网络错误,请重试');
}
});
}
/**
*
* @param {init} a 文章ID
* @param {string} b 提取码
*/
function add_code(a, b) { //ID 提取码
var ajax_data = {
action: 'add_code',
id: a,
code: b
};
$.post(ajax.url, ajax_data,
function(c) {
c = $.trim(c);
if (c == '200') {
swal("输入成功", "您的支付提取码是" + b, "success");
localStorage.setItem('payjs_view_id:'+a,b);
}
});
}
/**
* 检查服务器是否有付费可见订单
* @param {init} a 文章ID
* @param {string} b 订单号
*/
function check_pay_view(a, b) {
var ajax_data = {
check_pay_view: ajax.check_pay_view,
action: 'check_pay_view',
id: a,
orderid: b
};
$.post(ajax.url, ajax_data,function(c) {
c = $.trim(c);
if (c == '200') {
swal("支付成功!", "为了方便您后续再次查看,建议您输入您的常用邮箱作为提取码", "info", {
dangerMode: true,
closeOnClickOutside: false,
content: "input",
})
.then((d) => {/**提取码 */
get_content(a);
add_code(a, `${d}`);
}); //ok
} else {
swal("支付失败", "您的支付没有成功,请重试", "error");
}
},
'json');
}
/**
* 检验提取码
* @param {init} a 文章ID
* @param {string} b 提取码
*/
function checkcode(a, b) {
function check_code(a, b) {
var ajax_data = {
check_code: ajax.check_code,
action: 'check_code',
@ -240,8 +264,9 @@ function checkcode(a, b) {
};
$.post(ajax.url, ajax_data,
function(c) {
if (c == '1') {
getcontent(a);
c = $.trim(c);
if (c == '200') {
get_content(a);
localStorage.setItem('payjs_view_id:'+a,b);
} else {
swal("查看失败", "服务器不存在此提取码,请重新输入", "error");
@ -262,14 +287,15 @@ function pay_way(a,b,c) {
buttons: ["支付宝", "微信"],
dangerMode: true,
closeOnClickOutside: false,
})
.then((way) => {
if (way) { //微信
get_payjs_qr(b, 'wechat',a,c);
} else { //支付宝
get_payjs_qr(b, 'alipay',a,c);
}
});
}
)
.then((way) => {
if (way) { //微信
get_payjs_qr(b, 'wechat',a,c);
} else { //支付宝
get_payjs_qr(b, 'alipay',a,c);
}
});
}
@ -292,7 +318,7 @@ function pay_view(a,b,c){
button: "验证提取码"
})
.then((code) => {
checkcode(a, `${code}`);/**文章id, 提取码 */
check_code(a, `${code}`);/**文章id, 提取码 */
});
} else {/* 未支付,选择支付方式*/
pay_way(a,b,c);
@ -310,7 +336,7 @@ if ( $("#pay_view").length > 0 ) {/**如果网站有付费可见,就执行 */
for (var i = 0; i < length; i++) {
var key = localStorage.key(i),value = localStorage.getItem(key);
if (key.indexOf(keys) >= 0) {/**发现目标 */
checkcode(id, value);
check_code(id, value);
break;
}
}
@ -328,6 +354,66 @@ $("#pay_view").click(function() {
pay_view(id,money,action);
});
/**
*
* @param {string} a 微信登陆密钥key,此时是 gitcafe.net@wrhGgveq3LCj 类型,实际需要的是@后面的
*/
function check_weauth_login(a){
var ajax_data = {
gdk_weauth_check: ajax.gdk_weauth_check,
action: 'gdk_weauth_check',
key: a
};
$.post(ajax.url, ajax_data, function(b) {
b = $.trim(b);//登陆信息
if (b !== '400') {
console.log(b);
swal("获取微信信息成功", "您的登陆信息是"+b+"", "success");
} else {
swal("发生错误", "哦嚯,好像发生了什么错误,微信二维码加载失败", "error");
}
});
}
/**
* 生成微信二维码,公共调用
* @param {string} a action操作
*/
function get_weauth_qr(a) {
var ajax_data = {
action: a,
gdk_weauth_qr_gen: ajax.gdk_weauth_qr_gen
};
$.post(ajax.url, ajax_data, function(b) {
b = $.trim(b);//登陆信息
if (b !== '400') {
var c = document.createElement("img"),
d = b.split('|');/**使用|风格,分为数组 */
c.src = d[1];//d[1]=base64
c.width = "300";
console.log(d[0]);//d[0]=key
swal("微信扫码并确认登陆", {
content: c,
closeOnClickOutside: true,
buttons: false
});
console.log('未点击但是我继续执行');
check_weauth_login(d[0]);
} else {
swal("发生错误", "哦嚯,好像发生了什么错误,微信二维码加载失败", "error");
}
});
}
$("#weixin_login_btn").click(function() {
var action = $("#weixin_login_btn").data("action");//gdk_weauth_qr_gen
get_weauth_qr(action);
});
@ -336,16 +422,5 @@ $("#pay_view").click(function() {
/**jQuery结尾,不要超过此行 */
});

248
class/aq_resizer.php Normal file
View file

@ -0,0 +1,248 @@
<?php
/**
* Title : Aqua Resizer
* Description : Resizes WordPress images on the fly
* Version : 1.2.2
* Author : Syamil MJ
* Author URI : http://aquagraphite.com
* License : WTFPL - http://sam.zoy.org/wtfpl/
* Documentation : https://github.com/sy4mil/Aqua-Resizer/
*
* @param string $url - (required) must be uploaded using wp media uploader
* @param int $width - (required)
* @param int $height - (optional)
* @param bool $crop - (optional) default to soft crop
* @param bool $single - (optional) returns an array if false
* @param bool $upscale - (optional) resizes smaller images
* @uses wp_upload_dir()
* @uses image_resize_dimensions()
* @uses wp_get_image_editor()
*
* @return str|array
*/
if(!class_exists('Aq_Resize')) {
class Aq_Exception extends Exception {}
class Aq_Resize
{
/**
* The singleton instance
*/
static private $instance = null;
/**
* Should an Aq_Exception be thrown on error?
* If false (default), then the error will just be logged.
*/
public $throwOnError = false;
/**
* No initialization allowed
*/
private function __construct() {}
/**
* No cloning allowed
*/
private function __clone() {}
/**
* For your custom default usage you may want to initialize an Aq_Resize object by yourself and then have own defaults
*/
static public function getInstance() {
if(self::$instance == null) {
self::$instance = new self;
}
return self::$instance;
}
/**
* Run, forest.
*/
public function process( $url, $width = null, $height = null, $crop = null, $single = true, $upscale = false ) {
try {
// Validate inputs.
if (!$url)
throw new Aq_Exception('$url parameter is required');
if (!$width)
throw new Aq_Exception('$width parameter is required');
// Caipt'n, ready to hook.
if ( true === $upscale ) add_filter( 'image_resize_dimensions', array($this, 'aq_upscale'), 10, 6 );
// Define upload path & dir.
$upload_info = wp_upload_dir();
$upload_dir = $upload_info['basedir'];
$upload_url = $upload_info['baseurl'];
$http_prefix = "http://";
$https_prefix = "https://";
$relative_prefix = "//"; // The protocol-relative URL
/* if the $url scheme differs from $upload_url scheme, make them match
if the schemes differe, images don't show up. */
if(!strncmp($url,$https_prefix,strlen($https_prefix))){ //if url begins with https:// make $upload_url begin with https:// as well
$upload_url = str_replace($http_prefix,$https_prefix,$upload_url);
}
elseif(!strncmp($url,$http_prefix,strlen($http_prefix))){ //if url begins with http:// make $upload_url begin with http:// as well
$upload_url = str_replace($https_prefix,$http_prefix,$upload_url);
}
elseif(!strncmp($url,$relative_prefix,strlen($relative_prefix))){ //if url begins with // make $upload_url begin with // as well
$upload_url = str_replace(array( 0 => "$http_prefix", 1 => "$https_prefix"),$relative_prefix,$upload_url);
}
// Check if $img_url is local.
if ( false === strpos( $url, $upload_url ) )
throw new Aq_Exception('Image must be local: ' . $url);
// Define path of image.
$rel_path = str_replace( $upload_url, '', $url );
$img_path = $upload_dir . $rel_path;
// Check if img path exists, and is an image indeed.
if ( ! file_exists( $img_path ) or ! getimagesize( $img_path ) )
throw new Aq_Exception('Image file does not exist (or is not an image): ' . $img_path);
// Get image info.
$info = pathinfo( $img_path );
$ext = $info['extension'];
list( $orig_w, $orig_h ) = getimagesize( $img_path );
// Get image size after cropping.
$dims = image_resize_dimensions( $orig_w, $orig_h, $width, $height, $crop );
$dst_w = $dims[4];
$dst_h = $dims[5];
// Return the original image only if it exactly fits the needed measures.
if ( ! $dims || ( ( ( null === $height && $orig_w == $width ) xor ( null === $width && $orig_h == $height ) ) xor ( $height == $orig_h && $width == $orig_w ) ) ) {
$img_url = $url;
$dst_w = $orig_w;
$dst_h = $orig_h;
} else {
// Use this to check if cropped image already exists, so we can return that instead.
$suffix = "{$dst_w}x{$dst_h}";
$dst_rel_path = str_replace( '.' . $ext, '', $rel_path );
$destfilename = "{$upload_dir}{$dst_rel_path}-{$suffix}.{$ext}";
if ( ! $dims || ( true == $crop && false == $upscale && ( $dst_w < $width || $dst_h < $height ) ) ) {
// Can't resize, so return false saying that the action to do could not be processed as planned.
throw new Aq_Exception('Unable to resize image because image_resize_dimensions() failed');
}
// Else check if cache exists.
elseif ( file_exists( $destfilename ) && getimagesize( $destfilename ) ) {
$img_url = "{$upload_url}{$dst_rel_path}-{$suffix}.{$ext}";
}
// Else, we resize the image and return the new resized image url.
else {
$editor = wp_get_image_editor( $img_path );
if ( is_wp_error( $editor ) || is_wp_error( $editor->resize( $width, $height, $crop ) ) ) {
throw new Aq_Exception('Unable to get WP_Image_Editor: ' .
$editor->get_error_message() . ' (is GD or ImageMagick installed?)');
}
$resized_file = $editor->save();
if ( ! is_wp_error( $resized_file ) ) {
$resized_rel_path = str_replace( $upload_dir, '', $resized_file['path'] );
$img_url = $upload_url . $resized_rel_path;
} else {
throw new Aq_Exception('Unable to save resized image file: ' . $editor->get_error_message());
}
}
}
// Okay, leave the ship.
if ( true === $upscale ) remove_filter( 'image_resize_dimensions', array( $this, 'aq_upscale' ) );
// Return the output.
if ( $single ) {
// str return.
$image = $img_url;
} else {
// array return.
$image = array (
0 => $img_url,
1 => $dst_w,
2 => $dst_h
);
}
return $image;
}
catch (Aq_Exception $ex) {
error_log('Aq_Resize.process() error: ' . $ex->getMessage());
if ($this->throwOnError) {
// Bubble up exception.
throw $ex;
}
else {
// Return false, so that this patch is backwards-compatible.
return false;
}
}
}
/**
* Callback to overwrite WP computing of thumbnail measures
*/
function aq_upscale( $default, $orig_w, $orig_h, $dest_w, $dest_h, $crop ) {
if ( ! $crop ) return null; // Let the wordpress default function handle this.
// Here is the point we allow to use larger image size than the original one.
$aspect_ratio = $orig_w / $orig_h;
$new_w = $dest_w;
$new_h = $dest_h;
if ( ! $new_w ) {
$new_w = intval( $new_h * $aspect_ratio );
}
if ( ! $new_h ) {
$new_h = intval( $new_w / $aspect_ratio );
}
$size_ratio = max( $new_w / $orig_w, $new_h / $orig_h );
$crop_w = round( $new_w / $size_ratio );
$crop_h = round( $new_h / $size_ratio );
$s_x = floor( ( $orig_w - $crop_w ) / 2 );
$s_y = floor( ( $orig_h - $crop_h ) / 2 );
return array( 0, 0, (int) $s_x, (int) $s_y, (int) $new_w, (int) $new_h, (int) $crop_w, (int) $crop_h );
}
}
}
if(!function_exists('aq_resize')) {
/**
* This is just a tiny wrapper function for the class above so that there is no
* need to change any code in your own WP themes. Usage is still the same :)
*/
function aq_resize( $url, $width = null, $height = null, $crop = null, $single = true, $upscale = false ) {
/* WPML Fix */
if ( defined( 'ICL_SITEPRESS_VERSION' ) ){
global $sitepress;
$url = $sitepress->convert_url( $url, $sitepress->get_default_language() );
}
/* WPML Fix */
$aq_resize = Aq_Resize::getInstance();
return $aq_resize->process( $url, $width, $height, $crop, $single, $upscale );
}
}

View file

@ -87,7 +87,7 @@ add_action('wp_ajax_gdk_pass_view', 'gdk_pass_view');
//在线积分充值
//在线积分充值开始
function pay_points() {
if( !isset( $_POST['action'] ) || $_POST['action'] !== 'pay_points' ) exit('400');
if (!isset($_POST['money']) || !isset($_POST['way'])) exit('400');//无脑输出400错误
@ -113,9 +113,9 @@ function check_pay_points(){
add_action( 'wp_ajax_check_pay_points', 'check_pay_points' );
add_action( 'wp_ajax_nopriv_check_pay_points', 'check_pay_points' );
//积分充值end
//积分充值结束
//游客付费可见
//游客付费可见开始
function pay_view() {
if( !isset( $_POST['action'] ) || $_POST['action'] !== 'pay_view' ) exit('400');
if (!isset($_POST['money']) || !isset($_POST['way'])) exit('400');//无脑输出400错误
@ -126,12 +126,64 @@ function pay_view() {
add_action( 'wp_ajax_pay_view', 'pay_view' );
add_action( 'wp_ajax_nopriv_pay_view', 'pay_view' );
//添加提取码
function add_code() {
$id = $_POST['id'];
$code = $_POST['code'];
if(empty($id) || empty($code)) exit('400');
if ( $_POST['action'] == 'add_code') {
$code = trim($code);//清理一下
$pay_log = get_post_meta($id, 'pay_log', true);//获取旧的购买记录数据
add_post_meta($id, 'pay_log', $code, true) or update_post_meta($id, 'pay_log', $pay_log.','.$code);//没有新建,有就更新
$pay_log = get_post_meta($id, 'pay_log', true);//获取新的购买记录数据
$pay_arr = explode(",", $pay_log);
if(in_array($code,$pay_arr)) {
exit('200');//OK
}else{
exit('400');//NO
}
}
}
add_action( 'wp_ajax_add_code', 'add_code' );
add_action( 'wp_ajax_nopriv_add_code', 'add_code' );
//检测提取码
function check_code() {
$check_code_nonce = $_POST['check_code'];
$code = $_POST['code'];
$action = $_POST['action'];
$id = $_POST['id'];
if( !isset( $check_code_nonce ) || !wp_verify_nonce($check_code_nonce, 'check_code') ) exit('400');
if (!isset($code) || !isset($action) || !isset($id)) exit('400');//无脑输出400错误
if ( $action == 'check_code') {
$code = trim($code);//清理一下
$pay_log = get_post_meta($id, 'pay_log', true);//购买记录数据
$pay_arr = explode(",", $pay_log);
if(in_array($code,$pay_arr)) {
exit('200');
} else {
exit('400');
}
}
}
add_action( 'wp_ajax_check_code', 'check_code' );
add_action( 'wp_ajax_nopriv_check_code', 'check_code' );
//获取加密内容
function get_content(){
if ( !isset($_POST['action']) || $_POST['action'] !== 'get_content') exit('400');//无脑输出400错误
if ( isset($_POST['id'])) {
$pay_content = get_post_meta($_POST['id'], '_pay_content', true);
exit($pay_content);
}
}
add_action( 'wp_ajax_get_content', 'get_content' );
add_action( 'wp_ajax_nopriv_get_content', 'get_content' );
//检查付费可见订单
function check_pay_view() {
if( !isset( $_POST['check_pay_view'] ) || !wp_verify_nonce($_POST['check_pay_view'], 'check_pay_view') ) exit('400');
if (!isset($_POST['id']) || !isset($_POST['orderid'])) exit('400');
//无脑输出400错误
if (!isset($_POST['id']) || !isset($_POST['orderid'])) exit('400');//无脑输出400错误
if ( $_POST['action'] == 'check_pay_view') {
$sid = get_transient('PP'.$_POST['id']);
if(in_string($sid,'E20') && $orderid == $sid) {
@ -143,4 +195,33 @@ function check_pay_view() {
}
add_action( 'wp_ajax_check_pay_view', 'check_pay_view' );
add_action( 'wp_ajax_nopriv_check_pay_view', 'check_pay_view' );
/**END */
//开始微信登陆
//ajax生成登录二维码
function gdk_weauth_qr_gen() {
if( !isset( $_POST['gdk_weauth_qr_gen'] ) || !wp_verify_nonce($_POST['gdk_weauth_qr_gen'], 'gdk_weauth_qr_gen') ) exit('400');
if (isset($_POST['action']) && $_POST['action'] == 'gdk_weauth_qr_gen') {
$rest = implode("|", gdk_weauth_qr());
exit($rest);
} else {
exit('400');
}
}
add_action( 'wp_ajax_gdk_weauth_qr_gen', 'gdk_weauth_qr_gen' );
add_action( 'wp_ajax_nopriv_gdk_weauth_qr_gen', 'gdk_weauth_qr_gen' );
//检查登录状况
function gdk_weauth_check(){
if( !isset( $_POST['gdk_weauth_check'] ) || !wp_verify_nonce($_POST['gdk_weauth_check'], 'gdk_weauth_check') ) exit('400');
if (isset($_POST['key']) && !in_string($_POST['key'],'@') && $_POST['action'] == 'gdk_weauth_check') exit('400');
$sk = substr($_POST['key'],-12);//sk
$oauth_result = get_transient($sk);
if (!empty($oauth_result)) {
exit($oauth_result);//用户信息
}
}
add_action( 'wp_ajax_gdk_weauth_check', 'gdk_weauth_check' );
add_action( 'wp_ajax_nopriv_gdk_weauth_check', 'gdk_weauth_check' );

View file

@ -1085,6 +1085,7 @@ function payjs_notify() {
}
}
//充值按钮
function buy_points(){
if(is_user_logged_in()) {//logined
@ -1108,16 +1109,78 @@ function buy_points(){
<input data-fancybox-close type="button" id="submit_pay" data-action="pay_points" data-id="'.get_current_user_id().'" class="pure-button pure-button-primary" value="提交">
</p>
</form>';
//wp_enqueue_script('qrious', 'https://cdn.bootcss.com/qrious/4.0.2/qrious.min.js', array('jquery'), GDK_PLUGIN_VER, true);
}else{// no login
$result = '<div class=\'alert info\'>本页面需要您登录才可以操作,请先 <a target="_blank" href="'.esc_url( wp_login_url( get_permalink() ) ).'">点击登录</a> 或者<a href="'.esc_url( wp_registration_url() ).'">立即注册</a></div>';
}
return $result;
}
function login_modal(){
$result = '<a data-fancybox="login_fancybox" data-src="#login_fancybox" href="javascript:;">登录</a>
<div id="login_fancybox" style="width: 100%; max-width: 500px;overflow:auto;display:none;">';
$result .= wp_login_form(array(
'echo' => false,
'value_remember' => true,
'value_username' => '请输入用户名...'
));
$result .= '</div>';
return $result;
}
}
/**开始微信* */
//生成随机字符
//sk是12位随机字符, key是域名@sk
function gdk_weauth_token(){
$strs = 'QWERTYUIOPASDFGHJKLZXCVBNM1234567890qwertyuiopasdfghjklzxcvbnm';
$sk = substr(str_shuffle($strs),mt_rand(0,strlen($strs)-11),12);//12位
set_transient($sk, 1, 60*6);//缓存 get_transient($sk) == 1
$key = $_SERVER['HTTP_HOST'].'@'.$sk;
return $key;
}
function gdk_weauth_qr(){
$qr64 = [];
$qr64['key'] = gdk_weauth_token();
$qr64['qrcode'] = gdk_http_request('https://wa.isdot.net/qrcode?str='.$qr64['key'])['qrcode'];
return $qr64;
}
function weauth_rewrite_rules($wp_rewrite){
if (get_option('permalink_structure')) {
$new_rules['^weauth'] = 'index.php?user=$matches[1]&sk=$matches[2]';
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
}
add_action('generate_rewrite_rules', 'weauth_rewrite_rules');
/**
* 微信登陆按钮
*/
function weixin_login_btn(){
$result = '<a id="weixin_login_btn" href="javascript:;" data-action="gdk_weauth_qr_gen" class="button weixin_login_btn">微信登陆</a>';
return $result;
}
function get_weauth_oauth(){
if(in_string($_SERVER['REQUEST_URI'],'weauth')){
$weauth_user = trim($_GET['user']);//weauth发来用户信息
$weauth_sk = trim($_GET['sk']);//weauth返回的12位sk信息
$weauth_res = get_transient($weauth_sk);
if (empty($weauth_res)) return;
$weauth_user = stripslashes($weauth_user);
$weauth_user = json_decode($weauth_user, true);
//$weauth_info['nickname'] = $weauth_user['nickName'];//微信昵称
//$weauth_info['wxavatar'] = $weauth_user['avatarUrl'];//微信头像
//$weauth_info['openid'] = $weauth_user['openid'];//微信Openid
$oauth_result = implode('|',$weauth_user);
set_transient($sk, $oauth_result, 60*6);
echo 'success';
}
}
add_action('wp','get_weauth_oauth');

View file

@ -12,6 +12,13 @@ function gdk_potin() {
}
add_shortcode('gdk_potin_btn', 'gdk_potin');
//
function gdk_login_fancybox() {
return weixin_login_btn();
}
add_shortcode('gdk_login_btn', 'gdk_login_fancybox');
//添加钮Download
function gdk_DownloadUrl($atts, $content = null) {
extract(shortcode_atts(array(