增加docke部署

This commit is contained in:
2026-04-10 16:44:13 +08:00
parent e2f8054794
commit cd4ddb606d
5076 changed files with 701092 additions and 0 deletions

View File

@@ -0,0 +1,265 @@
<?php
define('USEDCHARSET', 'utf-8');
// 加载环境变量配置
require_once dirname(dirname(dirname(__DIR__))) . '/env_config.php';
// 域名配置(若 pay/common.php 已先定义则跳过)
if (!defined('SITE_API_DOMAIN')) define('SITE_API_DOMAIN', env('SITE_API_URL', 'https://api.tscce.cn'));
if (!defined('SITE_API2_DOMAIN')) define('SITE_API2_DOMAIN', env('SITE_API2_URL', 'https://api2.tscce.cn'));
/// 接口返回用的信息类
class ResultObject
{
public $error; /// 返回值: 0成功; 非0失败;
public $error_code; /// 错误号
public $msg; /// 错误信息
public $data; /// 返回的数据
public function ResultObject($string)
{
$this->error = 0;
$this->error_code = 0;
$this->msg = null;
$this->data = null;
$this->from_string($string);
}
public function to_array()
{
return (array)$this;
}
public function to_string()
{
return json_encode($this, JSON_UNESCAPED_UNICODE);
}
public function from_array($array)
{
foreach ($array as $key => $value)
{
if (property_exists($this, $key))
{
$this->$key = $value;
}
}
return true;
}
public function from_string($string)
{
return $this->from_array((array)json_decode($string));
}
}
/**
* @note 获取当前页面的完整连接
* @param $always_http bool
* @return string
*/
function getLocaleUrl($always_http = false)
{
$is_https =
(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ||
(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') ||
(isset($_SERVER['REQUEST_SCHEME']) && $_SERVER['REQUEST_SCHEME'] == 'https');
$request_scheme = $is_https ? 'https://' : 'http://';
$hostname = $_SERVER['SERVER_NAME'];
$hostport = (($is_https && '443' == $_SERVER['SERVER_PORT']) || (!$is_https && '80' == $_SERVER['SERVER_PORT'])) ? '' : ':' . intval($_SERVER['SERVER_PORT']);
if ($always_http)
return 'http://' . $hostname . $hostport;
else
return $request_scheme . $hostname . $hostport;
}
function getFullUrl($relatively_url, $always_http = false)
{
if (mb_strstr($relatively_url, '/', false, USEDCHARSET) == $relatively_url)
return getLocaleUrl($always_http) . $relatively_url;
else
return getLocaleUrl($always_http) . '/' . $relatively_url;
}
/**
* @date 2017-03-04
* @note 给参数按key的顺序排序。支持递归
* @param mixed $parameter 要排序的参数
* @return array
* @auth 应俊
*/
function SortParam($parameter)
{
$parameter = (array)$parameter;
foreach ($parameter as $k => $v)
{
if (is_array($v) || is_object($v))
{
$parameter[$k] = SortParam($v);
}
}
// 调用strcmp函数来排序该函数区分大小写。
uksort($parameter, 'strcmp');
return $parameter;
}
/**
* @date 2017-03-06
* @note 转换参数成字符串形式按key=value的形式用&分隔)。
* @param mixed $parameter 要转换的参数
* @return string
* @auth 应俊
*/
function ConvertParam($parameter)
{
$parameter = (array)$parameter;
$return = '';
foreach ($parameter as $k => $v)
{
if (is_array($v) || is_object($v))
{
$return .= sprintf('&%s={%s}', $k, ConvertParam($v));
}
else
{
$return .= sprintf('&%s=%s', $k, $v);
}
}
$sublen = mb_strlen('&', USEDCHARSET);
$retlen = mb_strlen($return, USEDCHARSET);
$return = mb_substr($return, $sublen, $retlen - $sublen, USEDCHARSET);
return $return;
}
/**
* @date 2017-03-04
* @note 为参数生成签名
* @param mixed $parameter 要签名的参数
* @param string $signkey 签名key
* @return string
* @auth 应俊
*/
function SignParameter($parameter, $signkey = '')
{
// 1先把参数按参数名key从小到大排序
$parameter = SortParam($parameter);
// 2连接参数成一个字符串按key=value的形式用&分隔)。
$return = ConvertParam($parameter);
// 3结尾加上key=签名key
$return .= '&key=' . $signkey;
// 4md5加密这个字符串
return md5($return);
}
/**
* @param mixed $data
* @return array|mixed
*/
function ChangePostData($data)
{
switch (gettype($data))
{
case 'array':
{
foreach ($data as $key => $value)
{
$data[$key] = ChangePostData($value);
}
break;
}
case 'object':
{
$array = (array)$data;
foreach ($array as $key => $value)
{
$data->$key = ChangePostData($value);
}
break;
}
default:
{
$data = preg_replace_callback('/\+/', function ($r) { return '%2B'; }, $data);
$data = preg_replace_callback('/\&/', function ($r) { return '%26'; }, $data);
break;
}
}
return $data;
}
/**
* @note 发送post请求
* @param string $url
* @param mixed $data
* @return string
*/
function SendPost($url, $data)
{
$data = http_build_query(ChangePostData($data));
$opts = array(
'http' => array(
'method' => 'POST',
'header' => "Content-type: application/x-www-form-urlencoded\r\n" . "Content-Length: " . strlen($data) . "\r\n",
'content' => $data,
),
);
$context = stream_context_create($opts);
// 抑制警告并捕获错误
$ret = @file_get_contents($url, false, $context);
// 如果请求失败,记录错误并返回空字符串
if ($ret === false) {
// 记录错误到日志文件用于调试
$error_msg = "SendPost failed: URL=$url, Data=" . print_r($data, true);
if (isset($http_response_header)) {
$error_msg .= ", Headers=" . print_r($http_response_header, true);
}
error_log($error_msg);
return '';
}
$ret = trim($ret, "\xEF\xBB\xBF");
return $ret;
}
/**
* @note 从参数中过滤不需要的参数
* @param array|null $ignores 要过滤的参数列表(参数名)
* @param array|null $parameters 目标参数列表
* @return array
*/
function GetAttachParameters($ignores = null, $parameters = null)
{
$return = (array)(empty($parameters) ? $_REQUEST : $parameters);
if (!empty($ignores))
{
foreach ($return as $k => $v)
{
if (in_array($k, $ignores))
unset($return[$k]);
}
}
return $return;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,217 @@
.body_bg{
background-color: #f1f1f1;
}
.body_bg>.yl_logo{
margin: 0 auto;
padding: 15% 20px;
text-align: center;
position: relative;
}
.body_bg>.yl_logo>img{
display: inline-block;
height: 45px;
}
.s_row{
position: relative;
margin: 0 auto 20px auto;
text-align: center;
width: 90%;
overflow: hidden;
}
.s_row .img_tb{
width: 15%;
height: 31px;
position: relative;
clear: both;
}
.s_row .img_tb img{
width: 22px;
height: 27px;
}
.s_row .img_tb img,
.s_row>input{
float: left;
}
.s_row>input{
display: block;
position: relative;
height: 31px;
padding: 12px 10px;
border-top: none;
border-left: none;
border-right: none;
border-bottom: 1px solid #bcbcbc;
line-height: 40px;
font-size: 16px;
color: #666;
background-color: #f1f1f1;
outline: 0;
margin-left: 5%;
width: 85%;
}
.s_row .duanxin{
margin-left: 11%;width: 60%;
}
.s_row .huoqu{
background-color: #02a7f1;
border: 1px solid #02a7f1;
color: #ffffff;
position: absolute;
top: 0;
right: 3%;
padding: 6px 14px;
}
.dr_btn{
text-align: center;
}
.dr_btn .btn{
width: 90%;
padding: 10px;
margin-bottom: 20px;
}
.dr_btn .btn-danger{
background-color: #cb4c02;
border: 1px solid #cb4c02;
}
.dr_btn .btn-info{
background-color: #5c8ceb;
border: 1px solid #5c8ceb;
margin-top: 18%;
}
.dr_btn .btn-info:hover,
.dr_btn .btn-info:active,
.dr_btn .btn-info:active:hover{
background-color: #5174c7;
border: 1px solid #5c8ceb;
}
.dr_btn .btn-default{
background-color: #969696;
border: 1px solid #969696;
color: #ffffff;
}
.wj_row{
text-align: center;
width: 90%;
margin: 0 auto 20% auto;
}
.wj_row a{
color: #7b94f1;
}
.wj_row .wjmm{
text-align: left;
display: inherit;
float: left;
}
.wj_row .zczh{
text-align: right;
display: inline-block;
float: right;
}
.sigma-content{
text-align: center;
background-color: #f1f1f1;
position: relative;
color: #bfbfbf;
width: 90%;
margin: 0 auto;
}
.sigma-middle-line:before{
content: '';
display: block;
height: 1px;
width: 100%;
background-color: #bfbfbf;/*颜色需与主题大背景色一致*/
position: relative;
top: 10px;/*调节线高*/
left: 0;
}
.sigma-line-text{
display: inline-block;
background: #f1f1f1;
padding: 0 18px 0 18px;
position: relative;
font-size: 14px;
font-weight: 500;
}
.fangshi{
width: 80%;
margin: 8% auto;
position: relative;
overflow: hidden;
text-align: center;
}
.fangshi .box{
display: inline-block;
width: 18.1%;
margin-left: 3%;
margin-right: 3%;
text-align: center;
color: #787878;
margin-bottom: 20px;
}
.fangshi .box:first-child{
margin-left: 0;
}
.fangshi .box:last-child{
margin-right: 0;
}
.fangshi .box img{
display: block;
max-width: 100%;
height: auto;
margin: 0 auto 5px auto;
}
.fangshi .box:active{
color: red;
font-size: 12px;
}
.fangshi .box:active img{
padding: 3px;
}
/**/
.hui{
color: #787878;
font-size: 16px;
line-height: 1.8;
}
.w_tongy{
height: 40px;
}
.w_tongy>input[type=checkbox]{
width: 5%;
}
.w_tongy .xieyi{
margin-left: 5%; line-height: 2.8; float: left;color: #666;
}
.w_tongy .xieyi .red{
color: red;
}
.huoqu_duanxin{
height: 35px;overflow: auto;
}
@media screen and (device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)
{
.s_row .duanxin{
margin-left: 14%;
}
.s_row .huoqu{
right: 1%;
}
}
@media screen and (device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2)
{
.s_row .duanxin{
margin-left: 8.5%;
}
.s_row .huoqu{
right: 2%;
}
.s_row>input{
width: 90%;
}
}

View File

@@ -0,0 +1,147 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<script language="JavaScript" src="js/jquery-2.1.4.min.js"></script>
<script language="JavaScript" src="js/common.js"></script>
<title>错误提示</title>
</head>
<style type="text/css">
body {
background-color: #eee;
}
* {
padding: 0;
margin: 0;
}
.container {
margin: 0 auto;
width: 100%;
}
.container .header {
min-height: 45px;
width: 100%;
}
.container .body {
width: 100%;
}
.container .header .header-nav.default {
position: relative;
}
.container .header .header-nav {
background-color: #ec6061;
height: 45px;
width: 100%;
}
.container .header .header-nav-c {
color: #ffffff;
font-size: 16px;
line-height: 45px;
padding: 0 50px;
text-align: center;
}
.container .body .login-box {
text-align: center;
}
.container .body .login-box img {
height: 160px;
margin-top: 50px;
}
.container .body .login-box .login-btn-group, .loading {
margin: 50px 30px;
text-align: left;
}
.container .body .login-box .login-btn-group .btn {
border-radius: 5px;
font-size: 14px;
margin-bottom: 10px;
padding: 7px 0;
}
.btn-block {
display: block;
width: 100%;
}
.btn-success {
background-color: #5cb85c;
border-color: #4cae4c;
color: #ffffff;
}
.btn {
background-image: none;
cursor: pointer;
font-weight: normal;
line-height: 1.4;
outline: medium none;
text-align: center;
vertical-align: middle;
white-space: nowrap;
}
.btn-danger {
background-color: #d9534f;
border-color: #d43f3a;
color: #ffffff;
}
a {
text-decoration: none;
}
.hide {
display: none;
}
</style>
<script type="text/javascript">
$(function () {
var error_code = getQueryString('error_code'); // 错误代码
var msg = getQueryString('msg'); // 错误消息
var html = '<strong><center>系统发生错误!</center></strong><p><br>错误代码: {error_code}<br>错误消息: {msg}</p>'.format({
'error_code': error_code,
'msg': decodeURIComponent(msg)
});
if (error_code && msg) {
$('.loading').addClass('hide');
$('.login-btn-group').html(html).removeClass('hide');
}
else {
$('.loading').html('出现异常错误,请稍后重试!');
}
});
</script>
<body>
<div class="container">
<div id="content">
<div class="header">
<div class="header-nav default">
<div class="header-nav-c">错误提示</div>
</div>
</div>
<div class="body">
<div class="login-box">
<img alt="login" src="http://game.mianwangkeji.com/images/youle.png">
<div class="login-btn-group hide"></div>
<div class="loading">Loading...</div>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,147 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<script language="JavaScript" src="js/jquery-2.1.4.min.js"></script>
<script language="JavaScript" src="js/common.js"></script>
<title>错误提示</title>
</head>
<style type="text/css">
body {
background-color: #eee;
}
* {
padding: 0;
margin: 0;
}
.container {
margin: 0 auto;
width: 100%;
}
.container .header {
min-height: 45px;
width: 100%;
}
.container .body {
width: 100%;
}
.container .header .header-nav.default {
position: relative;
}
.container .header .header-nav {
background-color: #ec6061;
height: 45px;
width: 100%;
}
.container .header .header-nav-c {
color: #ffffff;
font-size: 16px;
line-height: 45px;
padding: 0 50px;
text-align: center;
}
.container .body .login-box {
text-align: center;
}
.container .body .login-box img {
height: 160px;
margin-top: 50px;
}
.container .body .login-box .login-btn-group, .loading {
margin: 50px 30px;
text-align: left;
}
.container .body .login-box .login-btn-group .btn {
border-radius: 5px;
font-size: 14px;
margin-bottom: 10px;
padding: 7px 0;
}
.btn-block {
display: block;
width: 100%;
}
.btn-success {
background-color: #5cb85c;
border-color: #4cae4c;
color: #ffffff;
}
.btn {
background-image: none;
cursor: pointer;
font-weight: normal;
line-height: 1.4;
outline: medium none;
text-align: center;
vertical-align: middle;
white-space: nowrap;
}
.btn-danger {
background-color: #d9534f;
border-color: #d43f3a;
color: #ffffff;
}
a {
text-decoration: none;
}
.hide {
display: none;
}
</style>
<script type="text/javascript">
$(function () {
var error_code = getQueryString('error_code'); // 错误代码
var msg = getQueryString('msg'); // 错误消息
var html = '<strong><center>系统发生错误!</center></strong><p><br>错误代码: {error_code}<br>错误消息: {msg}</p>'.format({
'error_code': error_code,
'msg': decodeURIComponent(msg)
});
if (error_code && msg) {
$('.loading').addClass('hide');
$('.login-btn-group').html(html).removeClass('hide');
}
else {
$('.loading').html('出现异常错误,请稍后重试!');
}
});
</script>
<body>
<div class="container">
<div id="content">
<div class="header">
<div class="header-nav default">
<div class="header-nav-c">错误提示</div>
</div>
</div>
<div class="body">
<div class="login-box">
<img alt="login" src="http://game.mianwangkeji.com/images/youle.png">
<div class="login-btn-group hide"></div>
<div class="loading">Loading...</div>
</div>
</div>
</div>
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 682 B

View File

@@ -0,0 +1,216 @@
//var g_appid = '14919772144482';
//var g_devkey = '14915485974028';
var g_RequestAddress = 'https://api2.tscce.cn';
/**
* @note 字符串格式化
* @param fn_objs
* @returns object
* @constructor
*/
Overload = function (fn_objs) {
var is_match = function (x, y) {
if (x == y) {
return true;
}
if (x.indexOf("*") == -1) {
return false;
}
var x_arr = x.split(","), y_arr = y.split(",");
if (x_arr.length != y_arr.length) {
return false;
}
while (x_arr.length) {
var x_first = x_arr.shift(), y_first = y_arr.shift();
if (x_first != "*" && x_first != y_first) {
return false;
}
}
return true;
};
var ret = function () {
var args = arguments
, args_len = args.length
, args_types = []
, args_type
, fn_objs = args.callee._fn_objs
, match_fn = function () {
};
for (var i = 0; i < args_len; i++) {
var type = typeof args[i];
type == "object" && (args[i].length > -1) && (type = "array");
args_types.push(type);
}
args_type = args_types.join(",");
for (var k in fn_objs) {
if (is_match(k, args_type)) {
match_fn = fn_objs[k];
break;
}
}
return match_fn.apply(this, args);
};
ret._fn_objs = fn_objs;
return ret;
};
/**
* 通过对字符串进行伪重载实现对字符串对象的格式化功能
* @type {Object}
*/
String.prototype.format = Overload({
"array": function (params) {
var reg = /{(\d+)}/gm;
return this.replace(reg, function (match, name) {
return params[~~name];
});
},
"object": function (param) {
var reg = /{([^{}]+)}/gm;
return this.replace(reg, function (match, name) {
return param[name];
});
}
});
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) {
return r[2];
}
return null;
}
//------------设置Cookie参数方法------------//
function setCookie(name, value) {
var Days = 30; //此 cookie 将被保存 30 天
var exp = new Date();
exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);
document.cookie = name + "=" + value + ";expires=" + exp.toGMTString();
}
//------------获取Cookie参数方法------------//
function getCookie(name) {
var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
if (arr != null) {
return arr[2];
}
return null;
}
//------------删除Cookie参数方法------------//
function delCookie(name) {
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval = getCookie(name);
if (cval != null) {
document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
}
}
/**
* 获取随机数
*/
function randomChar(length) {
var x = "0123456789qwertyuioplkjhgfdsazxcvbnm";
var tmp = "";
var timestamp = new Date().getTime();
for (var i = 0; i < length; i++) {
tmp += x.charAt(Math.ceil(Math.random() * 100000000) % x.length);
}
return timestamp + tmp;
}
function localeUrl() {
var url = window.location.origin + window.location.pathname;
var index = url.indexOf('?');
if (-1 == index)
return url;
else
return name.substr(0, index);
}
function extractPath(name) {
var index = name.lastIndexOf('/');
if (-1 == index)
return name;
else
return name.substr(0, index + 1);
}
function HttpRequest(args) {
var defaults =
{
url: g_RequestAddress,
async: true,
OnBeforeSend: function (/*XMLHttpRequest*/object) { },
OnComplete: function (/*XMLHttpRequest, textStatus*/object, status) { },
OnSuccess: function (/*data, textStatus*/message, status) { },
OnError: function (/*XMLHttpRequest, textStatus, errorThrown*/object, status, error) { },
},
settings = $.extend({}, defaults, args);
var data = {};
$.each(settings, function (name, value) {
if (
'async' != name &&
'url' != name &&
'OnBeforeSend' != name &&
'OnComplete' != name &&
'OnSuccess' != name &&
'OnError' != name
) {
data[name] = value;
}
});
//var succ = function (/*data, textStatus*/message, status) {
// var obj = eval("(" + decodeURIComponent(message) + ")");
// if (!obj) {
// //alert('pager6');
// window.location.href = PAGENAME_LOGIN + "?manager_id=" + getCookie(g_managerid);
// return false;
// }
// else if (1 == obj.error && 10008 == obj.error_code) {
// //alert('pager7');
// window.location.href = PAGENAME_LOGIN + "?manager_id=" + getCookie(g_managerid);
// return false;
// }
// else {
// return settings.OnSuccess(message, status);
// }
//};
$.ajax({
url: settings.url,
type: 'post',
async: settings.async,
data: data,
datatype: 'json',
timeout: 1000 * 7,
beforeSend: settings.OnBeforeSend,
success: settings.OnSuccess,
//success: succ,
error: settings.OnError,
complete: settings.OnComplete,
});
return settings;
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,240 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<link href="css/style.css" rel="stylesheet">
<link href="css/bootstrap.min.css" rel="stylesheet">
<script language="JavaScript" src="js/jquery-2.1.4.min.js"></script>
<script language="JavaScript" src="js/common.js"></script>
<title>授权登录</title>
</head>
<script>
function frm_submit(id) {
var frm = document.getElementById(id);
return frm.submit();
}
function bodyload(sender) {
/// appid
var app_id = getQueryString('app_id');
/// 开发者key
var dev_key = getQueryString('dev_key');
/// 门店key
var market_key = getQueryString('market_key');
/// 登陆方式
var login_type = getQueryString('login_type');
/// 回调页面地址
var redirect_uri = getQueryString('redirect_uri');
/// 错误页面地址
var error_uri = getQueryString('error_uri');
/// 随机数
var scode = randomChar(32);
if (!redirect_uri || '' == redirect_uri)
redirect_uri = localeUrl(); /// window.location.href;
if (!error_uri || '' == error_uri)
error_uri = extractPath(localeUrl()) + 'error.html';
HttpRequest({
'url': g_RequestAddress + '/api/login/querylist',
'market_key': market_key,
'logintype': login_type,
OnSuccess: function (/*data, textStatus*/message, status) {
if ('string' == typeof(message)) {
message = eval("(" + decodeURIComponent(message) + ")");
}
if (0 == message.length) {
alert('找不到支援的任何登录方式, 请联系相关管理员!');
return;
}
var type1 = new Array();
var type2 = new Array();
for (var i = 0; i < message.length; i++) {
if ('string' == typeof(message[i].component)) {
message[i].component = eval("(" + decodeURIComponent(message[i].component) + ")");
}
if (0 != message[i].is_third) {
type2.push(message[i]);
}
else
type1.push(message[i]);
}
/// 只存在一种三方的校验方式则直接跳转到目标连接
if (0 == type1.length && 1 == type2.length) {
window.location =
type2[0].url + '?' + (
'appid={appid}&' +
'devkey={devkey}&' +
'scode={scode}&' +
'market_key={market_key}&' +
'target={target}&' +
'fail_target={fail_target}'
).format({
'appid': app_id,
'devkey': dev_key,
'scode': scode,
'market_key': market_key,
'target': redirect_uri,
'fail_target': error_uri
});
}
else {
document.getElementById('splitter').style.display = (0 != type1.length && 0 != type2.length) ? 'inline' : 'none';
var
forms = '',
elements = '',
item = '',
url = '';
if (type1.length > 0) { /// 需要输入信息的登陆方式
for (var i = 0; i < type1.length; i++) {
item =
('<form style="display:none;" id="{frmid}" name="{frmname}" method="post" action="{url}">\r\n' +
' <input name="appid" type="text" value="{appid}" />\r\n' +
' <input name="devkey" type="text" value="{devkey}" />\r\n' +
' <input name="scode" type="text" value="{scode}" />\r\n' +
' <input name="market_key" type="text" value="{market_key}" />\r\n' +
' <input name="target" type="text" value="{target}" />\r\n' +
' <input name="fail_target" type="text" value="{fail_target}" />\r\n' +
'</form>');
forms += item.format({
'frmid': 'frm' + i,
'frmname': 'frm' + i,
'url': type1[i].url,
'appid': app_id,
'devkey': dev_key,
'scode': scode,
'market_key': market_key,
'target': redirect_uri,
'fail_target': error_uri
});
item =
'<p class="s_row">\r\n' +
' <span class="img_tb"><img src="img/zh.png"></span>\r\n' +
' <input type="text" placeholder="账号|手机号|邮箱" autofocus>\r\n' +
'</p>\r\n' +
'<p class="s_row" style="margin-bottom: 30px;">\r\n' +
' <span class="img_tb"><img src="img/mm.png"></span>\r\n' +
' <input type="text" placeholder="请输入密码">\r\n' +
'</p>\r\n' +
'<div class="dr_btn">\r\n' +
' <button onclick="frm_submit(\'frm' + i + '\')" class="btn btn-danger">登录</button>\r\n' +
'</div>\r\n' +
'<div class="wj_row">\r\n' +
' <a href="password.html" class="wjmm">忘记密码?</a>\r\n' +
' <a href="password_detail.html" class="zczh">没有帐号?立即注册>>></a>\r\n' +
'</div>\r\n';
elements += item;
}
$('#mainbody').append(forms);
$('#own').append(elements);
}
if (type2.length > 0) { /// 其他登录方式(三方认证方式)
elements = '';
for (var i = 0; i < type2.length; i++) {
item =
'<a class="box" href="{url}">\r\n' +
' <img src="{image}">\r\n' +
//' <label>{type_name}</label>\r\n' +
'</a>';
url = type2[i].url + '?' + (
'appid={appid}&' +
'devkey={devkey}&' +
'scode={scode}&' +
'market_key={market_key}&' +
'target={target}&' +
'fail_target={fail_target}'
).format({
'appid': app_id,
'devkey': dev_key,
'scode': scode,
'market_key': market_key,
'target': redirect_uri,
'fail_target': error_uri
});
elements += item.format({
'url': url,
'image': type2[i].image,
'type_name': type2[i].type_name
});
}
$('#third').append(elements);
}
}
}
});
}
</script>
<body class="body_bg" id="mainbody" onload="bodyload(this)">
<header class="yl_logo">
<img src="img/yl.png" class="img-responsive">
</header>
<div class="container-fluid">
<div class="fangshi" id="own">
<!--
<p class="s_row">
<span class="img_tb"><img src="img/zh.png"></span>
<input type="text" placeholder="账号|手机号|邮箱" autofocus>
</p>
<p class="s_row" style="margin-bottom: 30px;">
<span class="img_tb"><img src="img/mm.png"></span>
<input type="text" placeholder="请输入密码">
</p>
<div class="dr_btn">
<a href="javascript:;" class="btn btn-danger">登录</a>
</div>
<div class="wj_row">
<a href="password.html" class="wjmm">忘记密码?</a>
<a href="password_detail.html" class="zczh">没有帐号?立即注册>>></a>
</div>
-->
</div>
<div class="sigma-content" id="splitter" style="display:none">
<div class="sigma-middle-line">
<span class="sigma-line-text">更多登录方式</span>
</div>
</div>
<div class="fangshi" id="third">
<!--
<div class="box">
<img src="img/wx.png">
<label>微信</label>
</div>
<div class="box">
<img src="img/zfb.png">
<label>支付宝</label>
</div>
<div class="box">
<img src="img/QQ.png">
<label>QQ</label>
</div>
<div class="box">
<img src="img/jkx.png">
<label>聚开心</label>
</div>
-->
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,252 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<link href="css/style.css" rel="stylesheet">
<link href="css/bootstrap.min.css" rel="stylesheet">
<script language="JavaScript" src="js/jquery-2.1.4.min.js"></script>
<script language="JavaScript" src="js/common.js"></script>
<title>授权登录</title>
</head>
<?php
require_once dirname(__FILE__) . '/common.php';
/// 获取参数GET
$app_id = isset($_GET['app_id']) ? $_GET['app_id'] : ''; /// appid
$dev_key = isset($_GET['dev_key']) ? $_GET['dev_key'] : ''; /// 开发者key
$market_key = isset($_GET['market_key']) ? $_GET['market_key'] : ''; /// 门店key
$login_type = isset($_GET['login_type']) ? $_GET['login_type'] : ''; /// 登陆方式
$redirect_uri = isset($_GET['redirect_uri']) ? $_GET['redirect_uri'] : ''; /// 回调页面地址
$error_uri = isset($_GET['error_uri']) ? $_GET['error_uri'] : ''; /// 错误页面地址
$silence = isset($_GET['silence']) ? $_GET['silence'] : null; /// 是否静默方式登录
$scode = isset($_GET['scode']) ? $_GET['scode'] : md5(date('Ymdhis') . rand(1000, 9999)); /// 随机数
$forms = '';
/// 其他的参数
$attach_array = GetAttachParameters(array('app_id','dev_key','market_key','login_type','redirect_uri','error_uri',), $_GET);
$attach_param = ''; /// 链接用的附加参数
$attach_items = ''; /// 创建表单用的附加参数
foreach ($attach_array as $key => $value)
{
$attach_param .= "&{$key}={$value}";
$attach_items .= " <input name=\"{$key}\" type=\"text\" value=\"{$value}\" />" . PHP_EOL;
}
if (empty($redirect_uri))
$redirect_uri = rawurlencode(getLocaleUrl());
if (empty($error_uri))
$error_uri = rawurlencode(dirname(getLocaleUrl()) . '/error.php');
$data = array(
'market_key' => $market_key,
'logintype' => $login_type,
);
if (!is_null($silence))
$data['silence'] = $silence;
$api_url = getFullUrl('/api/login/querylist');
$response = SendPost($api_url, $data);
// 如果API调用失败直接从数据库查询登录方式
if (empty($response)) {
error_log("Login API Error: Empty response from $api_url, using database fallback");
try {
// 直接连接数据库获取登录方式(从环境变量读取)
require_once dirname(dirname(dirname(__DIR__))) . '/env_config.php';
$dsn = "mysql:host=" . env('API_DB_HOST', 'rm-bp1btyuwq77591x0jpo.mysql.rds.aliyuncs.com') . ":" . env('API_DB_PORT', '3306') . ";dbname=" . env('API_DB_NAME', 'youlehudong') . ";";
$username = env('API_DB_USER', 'games');
$passwd = env('API_DB_PASSWORD', 'Games0791!!');
$pdo = new PDO($dsn, $username, $passwd, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
if (empty($market_key)) {
$condition = 'is_enabled = 1 and is_silence = ' . intval(empty($silence) ? 0 : $silence);
if (!empty($login_type))
$condition .= sprintf(' and type_id = %d', intval($login_type));
$stmt = $pdo->prepare("SELECT type_id,type_key,type_name,image,url,component,is_third,third_flag FROM syweb_logintype_base WHERE $condition");
$stmt->execute();
} else {
$condition = 'a.type_key = b.type_key and a.is_enabled = 1 and b.is_enabled = 1 and market_key = ? and a.is_silence = ' . intval(empty($silence) ? 0 : $silence);
if (!empty($login_type))
$condition .= sprintf(' and a.type_id = %d', intval($login_type));
$stmt = $pdo->prepare("SELECT a.type_id,a.type_key,a.type_name,a.image,a.url,a.component,a.is_third,a.third_flag FROM syweb_logintype_base a, syweb_logintype_market b WHERE $condition");
$stmt->execute(array($market_key));
}
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 处理URL为完整路径
foreach ($data as $key => &$value) {
$value['url'] = getFullUrl($value['url']);
}
$response = rawurlencode(json_encode($data, JSON_UNESCAPED_UNICODE));
} catch (Exception $e) {
error_log("Database fallback error: " . $e->getMessage());
// 最后的备用方案:返回默认微信登录配置
$default_login_types = array(
array(
'type_id' => 2,
'type_key' => '0002',
'type_name' => '微信登录',
'image' => 'img/wx.png',
'url' => getFullUrl('api/login/weixin'),
'component' => null,
'is_third' => 1,
'third_flag' => 'weixin'
)
);
$response = rawurlencode(json_encode($default_login_types, JSON_UNESCAPED_UNICODE));
}
}
$result = json_decode(rawurldecode($response));
if (empty($result)) /// 为空表示没有获取到任何登录方式
{
$html = <<<EOL
<script>
alert('找不到支援的任何登录方式, 请联系相关管理员!');
</script>
EOL;
}
else /// 正常
{
$third_array = array(); /// 三方认证方式(不需要输入账号密码的方式)
$owner_array = array(); /// 本地认证方式(需要输入账号密码的方式)
foreach ($result as $item)
{
$item = (array)$item;
if (0 != $item['is_third']) /// 三方认证方式
array_push($third_array, $item);
else /// 本地认证方式
array_push($owner_array, $item);
}
$third_count = count($third_array);
$owner_count = count($owner_array);
$third_html = '';
$owner_html = '';
$splitter = '';
$forms = '';
if (0 == $owner_count && 1 == $third_count) /// 只存在一种三方的校验方式则直接跳转到目标连接
{
$url = $third_array[0]['url'] . "?appid={$app_id}&devkey={$dev_key}&scode={$scode}&market_key={$market_key}&target={$redirect_uri}&fail_target={$error_uri}{$attach_param}";
header("Location: {$url}");
exit;
}
/// 如果两种方式都有,则需要分隔元素。
if (0 != $owner_count && 0 != $third_count)
$splitter = <<<EOL
<div class="sigma-content">
<div class="sigma-middle-line">
<span class="sigma-line-text">更多登录方式</span>
</div>
</div>
EOL;
if (0 != $owner_count) /// 如果本地验证方式不为空则需要用于输入账号密码的表单元素。
{
$owner_html = ' <div class="fangshi" id="owner">' . PHP_EOL;
$forms = '';
$index = 0;
foreach ($owner_array as $owner)
{
$index++;
/// 用来提交数据的表单
$forms .= <<<EOL
<form style="display:none;" id="frm{$index}" name="frm{$index}" method="post" action="{$owner['url']}">
<input name="appid" type="text" value="{$app_id}" />
<input name="devkey" type="text" value="{$dev_key}" />
<input name="scode" type="text" value="{$scode}" />
<input name="market_key" type="text" value="{$market_key}" />
<input name="target" type="text" value="{$redirect_uri}" />
<input name="fail_target" type="text" value="{$error_uri}" />
{$attach_items}
</form>
EOL;
/// 用来显示的页面元素
$owner_html .= <<<EOL
<p class="s_row">
<span class="img_tb"><img src="img/zh.png"></span>
<input type="text" placeholder="账号|手机号|邮箱" autofocus>
</p>
<p class="s_row" style="margin-bottom: 30px;">
<span class="img_tb"><img src="img/mm.png"></span>
<input type="text" placeholder="请输入密码">
</p>
<div class="dr_btn">
<button onclick="frm_submit(frm{$index})" class="btn btn-danger">登录</button>
</div>
<div class="wj_row">
<a href="password.php" class="wjmm">忘记密码?</a>
<a href="password_detail.php" class="zczh">没有帐号?立即注册>>></a>
</div>
EOL;
}
$owner_html .= ' </div>' . PHP_EOL;
}
if (0 != $third_count)
{
$third_html = ' <div class="fangshi" id="third">' . PHP_EOL;
$index = 0;
foreach ($third_array as $third)
{
$index++;
$url = $third['url'] . "?appid={$app_id}&devkey={$dev_key}&scode={$scode}&market_key={$market_key}&target={$redirect_uri}&fail_target={$error_uri}{$attach_param}";
$third_html .= <<<EOL
<a class="box" href="{$url}">
<img src="{$third['image']}">
<label>{$third['type_name']}</label>
</a>
EOL;
}
}
$html = $owner_html . $splitter . $third_html;
}
?>
<script>
function frm_submit(form) {
return form.submit();
}
</script>
<body class="body_bg">
<?php echo $forms; ?>
<header class="yl_logo">
<img src="img/yl.png" class="img-responsive">
</header>
<div class="container-fluid">
<?php echo $html; ?>
</div>
</body>
</html>

View File

@@ -0,0 +1,187 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<link href="css/style.css" rel="stylesheet">
<link href="css/bootstrap.min.css" rel="stylesheet">
<script language="JavaScript" src="js/jquery-2.1.4.min.js"></script>
<script language="JavaScript" src="js/common.js"></script>
<title>授权登录</title>
</head>
<?php
require_once dirname(__FILE__) . '/common.php';
/// 获取参数GET
$app_id = isset($_GET['app_id']) ? $_GET['app_id'] : ''; /// appid
$dev_key = isset($_GET['dev_key']) ? $_GET['dev_key'] : ''; /// 开发者key
$market_key = isset($_GET['market_key']) ? $_GET['market_key'] : ''; /// 门店key
$login_type = isset($_GET['login_type']) ? $_GET['login_type'] : ''; /// 登陆方式
$redirect_uri = isset($_GET['redirect_uri']) ? $_GET['redirect_uri'] : ''; /// 回调页面地址
$error_uri = isset($_GET['error_uri']) ? $_GET['error_uri'] : ''; /// 错误页面地址
$scode = isset($_GET['scode']) ? $_GET['scode'] : md5(date('Ymdhis') . rand(1000, 9999)); /// 随机数
$forms = '';
/// 其他的参数
$attach_array = GetAttachParameters(array('app_id','dev_key','market_key','login_type','redirect_uri','error_uri',), $_GET);
$attach_param = ''; /// 链接用的附加参数
$attach_items = ''; /// 创建表单用的附加参数
foreach ($attach_array as $key => $value)
{
$attach_param .= "&{$key}={$value}";
$attach_items .= " <input name=\"{$key}\" type=\"text\" value=\"{$value}\" />" . PHP_EOL;
}
if (empty($redirect_uri))
$redirect_uri = rawurlencode(getLocaleUrl());
if (empty($error_uri))
$error_uri = rawurlencode(dirname(getLocaleUrl()) . '/error.php');
$data = array(
'market_key' => $market_key,
'logintype' => $login_type,
);
$result = json_decode(rawurldecode(SendPost(SITE_API2_DOMAIN . '/api/login/querylist', $data)));
if (empty($result)) /// 为空表示没有获取到任何登录方式
{
$html = <<<EOL
<script>
alert('找不到支援的任何登录方式, 请联系相关管理员!');
</script>
EOL;
}
else /// 正常
{
$third_array = array(); /// 三方认证方式(不需要输入账号密码的方式)
$owner_array = array(); /// 本地认证方式(需要输入账号密码的方式)
foreach ($result as $item)
{
$item = (array)$item;
if (0 != $item['is_third']) /// 三方认证方式
array_push($third_array, $item);
else /// 本地认证方式
array_push($owner_array, $item);
}
$third_count = count($third_array);
$owner_count = count($owner_array);
$third_html = '';
$owner_html = '';
$splitter = '';
$forms = '';
if (0 == $owner_count && 1 == $third_count) /// 只存在一种三方的校验方式则直接跳转到目标连接
{
$url = $third_array[0]['url'] . "?appid={$app_id}&devkey={$dev_key}&scode={$scode}&market_key={$market_key}&target={$redirect_uri}&fail_target={$error_uri}{$attach_param}";
header("Location: {$url}");
exit;
}
/// 如果两种方式都有,则需要分隔元素。
if (0 != $owner_count && 0 != $third_count)
$splitter = <<<EOL
<div class="sigma-content">
<div class="sigma-middle-line">
<span class="sigma-line-text">更多登录方式</span>
</div>
</div>
EOL;
if (0 != $owner_count) /// 如果本地验证方式不为空则需要用于输入账号密码的表单元素。
{
$owner_html = ' <div class="fangshi" id="owner">' . PHP_EOL;
$forms = '';
$index = 0;
foreach ($owner_array as $owner)
{
$index++;
/// 用来提交数据的表单
$forms .= <<<EOL
<form style="display:none;" id="frm{$index}" name="frm{$index}" method="post" action="{$owner['url']}">
<input name="appid" type="text" value="{$app_id}" />
<input name="devkey" type="text" value="{$dev_key}" />
<!--<input name="sscode" type="text" value="{$scode}" />-->
<input name="market_key" type="text" value="{$market_key}" />
<input name="target" type="text" value="{$redirect_uri}" />
<input name="fail_target" type="text" value="{$error_uri}" />
{$attach_items}
</form>
EOL;
/// 用来显示的页面元素
$owner_html .= <<<EOL
<p class="s_row">
<span class="img_tb"><img src="img/zh.png"></span>
<input type="text" placeholder="账号|手机号|邮箱" autofocus>
</p>
<p class="s_row" style="margin-bottom: 30px;">
<span class="img_tb"><img src="img/mm.png"></span>
<input type="text" placeholder="请输入密码">
</p>
<div class="dr_btn">
<button onclick="frm_submit(frm{$index})" class="btn btn-danger">登录</button>
</div>
<div class="wj_row">
<a href="password.php" class="wjmm">忘记密码?</a>
<a href="password_detail.php" class="zczh">没有帐号?立即注册>>></a>
</div>
EOL;
}
$owner_html .= ' </div>' . PHP_EOL;
}
if (0 != $third_count)
{
$third_html = ' <div class="fangshi" id="third">' . PHP_EOL;
$index = 0;
foreach ($third_array as $third)
{
$index++;
$url = $third['url'] . "?appid={$app_id}&devkey={$dev_key}&scode={$scode}&market_key={$market_key}&target={$redirect_uri}&fail_target={$error_uri}{$attach_param}";
$third_html .= <<<EOL
<a class="box" href="{$url}">
<img src="{$third['image']}">
<label>{$third['type_name']}</label>
</a>
EOL;
}
}
$html = $owner_html . $splitter . $third_html;
}
?>
<script>
function frm_submit(form) {
return form.submit();
}
</script>
<body class="body_bg">
<?php echo $forms; ?>
<header class="yl_logo">
<img src="img/yl.png" class="img-responsive">
</header>
<div class="container-fluid">
<?php echo $html; ?>
</div>
</body>
</html>

View File

@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<link href="css/style.css" rel="stylesheet">
<link href="css/bootstrap.min.css" rel="stylesheet">
<title>密码找回</title>
</head>
<body class="body_bg">
<header class="yl_logo">
<img src="img/yl.png" class="img-responsive">
</header>
<div class="container-fluid">
<p class="hui">忘记了密码?我们会把重设的密码以短信的形式下发到您绑定的手机!</p>
<div class="dr_btn">
<a href="password_detail.html" class="btn btn-info">发送密码找回短信</a>
<a href="login.html" class="btn btn-default">返回</a>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<link href="css/style.css" rel="stylesheet">
<link href="css/bootstrap.min.css" rel="stylesheet">
<title>密码找回</title>
</head>
<body class="body_bg">
<header class="yl_logo">
<img src="img/yl.png" class="img-responsive">
</header>
<div class="container-fluid">
<p class="hui">忘记了密码?我们会把重设的密码以短信的形式下发到您绑定的手机!</p>
<div class="dr_btn">
<a href="password_detail.html" class="btn btn-info">发送密码找回短信</a>
<a href="login.html" class="btn btn-default">返回</a>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,71 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<link href="css/style.css" rel="stylesheet">
<link href="css/bootstrap.min.css" rel="stylesheet">
<title>密码找回</title>
</head>
<body class="body_bg">
<header class="yl_logo" style="padding-bottom: 10%;">
<img src="img/yl.png" class="img-responsive">
</header>
<div class="container-fluid">
<a href="login.html" class="pull-right" style="margin-right: 7%;color: #42b8f2;">已有账号?点此登录>>></a>
<p class="s_row">
<span class="img_tb"><img src="img/zh.png"></span>
<input type="text" placeholder="请输入账号" autofocus >
</p>
<p class="s_row">
<span class="img_tb"><img src="img/mm.png"></span>
<input type="text" placeholder="请输入密码">
</p>
<p class="s_row">
<span class="img_tb"><img src="img/mm.png"></span>
<input type="text" placeholder="再输入一次密码">
</p>
<p class="s_row">
<span class="img_tb"><img src="img/sj.png"></span>
<input type="text" placeholder="请输入手机号">
</p>
<p class="s_row huoqu_duanxin">
<input type="text" placeholder="请输入短信验证码" class="duanxin">
<a class="btn btn-default huoqu">获取</a>
</p>
<p class="s_row w_tongy">
<input type="checkbox"><label class="xieyi">同意<a href="javascript:;" class="red">用户协议</a></label>
</p>
<div class="sigma-content">
<div class="sigma-middle-line">
<span class="sigma-line-text">更多登录方式</span>
</div>
</div>
<div class="fangshi">
<div class="box">
<img src="img/wx.png">
<label>微信</label>
</div>
<div class="box">
<img src="img/zfb.png">
<label>支付宝</label>
</div>
<div class="box">
<img src="img/QQ.png">
<label>QQ</label>
</div>
<div class="box">
<img src="img/jkx.png">
<label>聚开心</label>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,71 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<link href="css/style.css" rel="stylesheet">
<link href="css/bootstrap.min.css" rel="stylesheet">
<title>密码找回</title>
</head>
<body class="body_bg">
<header class="yl_logo" style="padding-bottom: 10%;">
<img src="img/yl.png" class="img-responsive">
</header>
<div class="container-fluid">
<a href="login.html" class="pull-right" style="margin-right: 7%;color: #42b8f2;">已有账号?点此登录>>></a>
<p class="s_row">
<span class="img_tb"><img src="img/zh.png"></span>
<input type="text" placeholder="请输入账号" autofocus >
</p>
<p class="s_row">
<span class="img_tb"><img src="img/mm.png"></span>
<input type="text" placeholder="请输入密码">
</p>
<p class="s_row">
<span class="img_tb"><img src="img/mm.png"></span>
<input type="text" placeholder="再输入一次密码">
</p>
<p class="s_row">
<span class="img_tb"><img src="img/sj.png"></span>
<input type="text" placeholder="请输入手机号">
</p>
<p class="s_row huoqu_duanxin">
<input type="text" placeholder="请输入短信验证码" class="duanxin">
<a class="btn btn-default huoqu">获取</a>
</p>
<p class="s_row w_tongy">
<input type="checkbox"><label class="xieyi">同意<a href="javascript:;" class="red">用户协议</a></label>
</p>
<div class="sigma-content">
<div class="sigma-middle-line">
<span class="sigma-line-text">更多登录方式</span>
</div>
</div>
<div class="fangshi">
<div class="box">
<img src="img/wx.png">
<label>微信</label>
</div>
<div class="box">
<img src="img/zfb.png">
<label>支付宝</label>
</div>
<div class="box">
<img src="img/QQ.png">
<label>QQ</label>
</div>
<div class="box">
<img src="img/jkx.png">
<label>聚开心</label>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,18 @@
页面地址:
https://api.daoqijuyou77.cn/source/login/login.php
主要功能:
实现无关业务的支付调用
调用方式:
get/post
所需参数:
app_id: appid
dev_key: 开发者key
market_key: 门店key
login_type: 登陆方式
redirect_uri: 回调页面地址
error_uri: 错误页面地址
用户其他参数
调用示例:
https://api.daoqijuyou77.cn/source/login/login.php?app_id=14936872341446&dev_key=14915485974028&market_key=test&redirect_uri=https://www.baidu.com