Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
纵之格
ShopXO
提交
02e83521
ShopXO
项目概览
纵之格
/
ShopXO
通知
394
Star
16
Fork
11
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
ShopXO
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
02e83521
编写于
7月 14, 2019
作者:
G
gongfuxiang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
新增个人免签支付,细节优化
上级
96a49ee2
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
531 addition
and
6 deletion
+531
-6
application/service/OrderService.php
application/service/OrderService.php
+2
-2
config/shopxo.sql
config/shopxo.sql
+4
-4
extend/payment/MafubaoAlipay.php
extend/payment/MafubaoAlipay.php
+261
-0
extend/payment/MafubaoWeixin.php
extend/payment/MafubaoWeixin.php
+261
-0
public/static/index/default/css/user.css
public/static/index/default/css/user.css
+3
-0
未找到文件。
application/service/OrderService.php
浏览文件 @
02e83521
...
@@ -316,7 +316,7 @@ class OrderService
...
@@ -316,7 +316,7 @@ class OrderService
// 支付数据校验
// 支付数据校验
$pay_name
=
'payment\\'
.
$payment_name
;
$pay_name
=
'payment\\'
.
$payment_name
;
$ret
=
(
new
$pay_name
(
$payment
[
0
][
'config'
]))
->
Respond
(
array_merge
(
$_GET
,
$_POST
)
);
$ret
=
(
new
$pay_name
(
$payment
[
0
][
'config'
]))
->
Respond
(
$params
);
if
(
isset
(
$ret
[
'code'
])
&&
$ret
[
'code'
]
==
0
)
if
(
isset
(
$ret
[
'code'
])
&&
$ret
[
'code'
]
==
0
)
{
{
if
(
empty
(
$ret
[
'data'
][
'out_trade_no'
]))
if
(
empty
(
$ret
[
'data'
][
'out_trade_no'
]))
...
@@ -358,7 +358,7 @@ class OrderService
...
@@ -358,7 +358,7 @@ class OrderService
// 支付数据校验
// 支付数据校验
$pay_name
=
'payment\\'
.
PAYMENT_TYPE
;
$pay_name
=
'payment\\'
.
PAYMENT_TYPE
;
$ret
=
(
new
$pay_name
(
$payment
[
0
][
'config'
]))
->
Respond
(
array_merge
(
$_GET
,
$_POST
)
);
$ret
=
(
new
$pay_name
(
$payment
[
0
][
'config'
]))
->
Respond
(
$params
);
if
(
!
isset
(
$ret
[
'code'
])
||
$ret
[
'code'
]
!=
0
)
if
(
!
isset
(
$ret
[
'code'
])
||
$ret
[
'code'
]
!=
0
)
{
{
return
$ret
;
return
$ret
;
...
...
config/shopxo.sql
浏览文件 @
02e83521
...
@@ -4,12 +4,12 @@
...
@@ -4,12 +4,12 @@
Source Server : 本机
Source Server : 本机
Source Server Version : 50716
Source Server Version : 50716
Source Host : localhost
Source Host : localhost
Source Database : shopxo_t
tt
Source Database : shopxo_t
p5
Target Server Version : 50716
Target Server Version : 50716
File Encoding : utf-8
File Encoding : utf-8
Date: 0
6/16/2019 21:12:10
PM
Date: 0
7/14/2019 15:15:14
PM
*/
*/
SET NAMES utf8;
SET NAMES utf8;
...
@@ -597,13 +597,13 @@ CREATE TABLE `s_link` (
...
@@ -597,13 +597,13 @@ CREATE TABLE `s_link` (
PRIMARY KEY (`id`),
PRIMARY KEY (`id`),
KEY `sort` (`sort`),
KEY `sort` (`sort`),
KEY `is_enable` (`is_enable`)
KEY `is_enable` (`is_enable`)
) ENGINE=InnoDB AUTO_INCREMENT=1
8
DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='友情链接';
) ENGINE=InnoDB AUTO_INCREMENT=1
9
DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='友情链接';
-- ----------------------------
-- ----------------------------
-- Records of `s_link`
-- Records of `s_link`
-- ----------------------------
-- ----------------------------
BEGIN;
BEGIN;
INSERT INTO `s_link` VALUES ('1', 'SchoolCMS', 'http://schoolcms.org/', 'SchoolCMS学校教务管理系统', '1', '1', '1', '1486292373', '0'), ('12', 'AmazeUI', 'http://amazeui.
org/', 'AmazeUI国内首个HTML5框架', '4', '1', '1', '1486353476', '0'), ('13', '龚哥哥的博客', 'http://gong.gg/', '龚哥哥的博客', '2', '1', '1', '1486353528', '0'), ('14', 'ThinkPHP', 'http://www.thinkphp.cn/', 'ThinkPHP', '3', '1', '1', '1487919160', '0'), ('15', 'ShopXO', 'http://shopxo.net', 'ShopXO企业级B2C免费开源电商系统', '0', '1', '1', '1533711881', '1547450275'), ('16', '码云', 'https://gitee.com/', '代码托管平台', '0', '1', '1', '1547450105', '0'), ('17', 'GitHub', 'https://github.com/', '代码托管平台', '0', '1', '1', '154745014
5', '0');
INSERT INTO `s_link` VALUES ('1', 'SchoolCMS', 'http://schoolcms.org/', 'SchoolCMS学校教务管理系统', '1', '1', '1', '1486292373', '0'), ('12', 'AmazeUI', 'http://amazeui.
shopxo.net/', 'AmazeUI国内首个HTML5框架', '4', '1', '1', '1486353476', '1563088397'), ('13', '龚哥哥的博客', 'http://gong.gg/', '龚哥哥的博客', '2', '1', '1', '1486353528', '0'), ('14', 'ThinkPHP', 'http://www.thinkphp.cn/', 'ThinkPHP', '3', '1', '1', '1487919160', '0'), ('15', 'ShopXO', 'http://shopxo.net', 'ShopXO企业级B2C免费开源电商系统', '0', '1', '1', '1533711881', '1547450275'), ('16', '码云', 'https://gitee.com/gongfuxiang/shopxo', '代码托管平台', '0', '1', '1', '1547450105', '1563088376'), ('17', 'GitHub', 'https://github.com/gongfuxiang/shopxo', '代码托管平台', '0', '1', '1', '1547450145', '1563088388'), ('18', 'ShopXO应用商店', 'https://store.shopxo.net/', 'ShopXO应用商店', '0', '1', '1', '156308843
5', '0');
COMMIT;
COMMIT;
-- ----------------------------
-- ----------------------------
extend/payment/MafubaoAlipay.php
0 → 100644
浏览文件 @
02e83521
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace
payment
;
/**
* 码付宝-支付宝
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-19
* @desc description
*/
class
MafubaoAlipay
{
// 插件配置参数
private
$config
;
/**
* 构造方法
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-17
* @desc description
* @param [array] $params [输入参数(支付配置参数)]
*/
public
function
__construct
(
$params
=
[])
{
$this
->
config
=
$params
;
}
/**
* 配置信息
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-19
* @desc description
*/
public
function
Config
()
{
// 基础信息
$base
=
[
'name'
=>
'码付宝-支付宝'
,
// 插件名称
'version'
=>
'0.0.1'
,
// 插件版本
'apply_version'
=>
'不限'
,
// 适用系统版本描述
'apply_terminal'
=>
[
'pc'
,
'h5'
],
// 适用终端 默认全部 ['pc', 'h5', 'ios', 'android', 'alipay', 'weixin', 'baidu']
'desc'
=>
'适用PC+H5,即时到帐支付方式,个人免签实现支付后立即通知。 <a href="http://pay.shopxo.net/" target="_blank">立即申请</a>'
,
// 插件描述(支持html)
'author'
=>
'Devil'
,
// 开发者
'author_url'
=>
'http://shopxo.net/'
,
// 开发者主页
];
// 配置信息
$element
=
[
[
'element'
=>
'input'
,
'type'
=>
'text'
,
'default'
=>
''
,
'name'
=>
'appid'
,
'placeholder'
=>
'appid'
,
'title'
=>
'appid'
,
'is_required'
=>
0
,
'message'
=>
'请填写appid'
,
],
[
'element'
=>
'input'
,
'type'
=>
'text'
,
'default'
=>
''
,
'name'
=>
'appsecret'
,
'placeholder'
=>
'appsecret'
,
'title'
=>
'appsecret'
,
'is_required'
=>
0
,
'message'
=>
'请填写通信密钥appsecret'
,
],
];
return
[
'base'
=>
$base
,
'element'
=>
$element
,
];
}
/**
* 支付入口
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-19
* @desc description
* @param [array] $params [输入参数]
*/
public
function
Pay
(
$params
=
[])
{
// 参数
if
(
empty
(
$params
))
{
return
DataReturn
(
'参数不能为空'
,
-
1
);
}
// 配置信息
if
(
empty
(
$this
->
config
))
{
return
DataReturn
(
'支付缺少配置'
,
-
1
);
}
// 处理支付
$parameter
=
array
(
'appid'
=>
$this
->
config
[
'appid'
],
'channel'
=>
'alipay'
,
'notify_url'
=>
$params
[
'notify_url'
],
'redirect_url'
=>
$params
[
'call_back_url'
],
'trade_type'
=>
'sync'
,
// 业务参数
'goodsname'
=>
$params
[
'name'
],
'out_trade_no'
=>
$params
[
'order_no'
],
'money'
=>
$params
[
'total_price'
],
);
$param
=
$this
->
GetParamSign
(
$parameter
);
$url
=
'http://payapi.shopxo.net/api/pay/mchCreateOrder/?'
.
$param
[
'urls'
]
.
'&sign='
.
md5
(
$param
[
'sign'
]
.
'&key='
.
$this
->
config
[
'appsecret'
]);
return
DataReturn
(
'处理成功'
,
0
,
$url
);
}
/**
* [GetParamSign 签名生成]
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2018-09-28T00:28:07+0800
* @param [array] $params [输入参数]
*/
private
function
GetParamSign
(
$params
=
[])
{
$sign
=
''
;
$urls
=
''
;
ksort
(
$params
);
foreach
(
$params
AS
$key
=>
$val
)
{
// 跳过这些不参数签名
if
(
$key
==
'sign'
||
$val
===
''
||
$val
===
null
)
{
continue
;
}
//后面追加&拼接URL
if
(
$sign
!=
''
)
{
$sign
.
=
"&"
;
$urls
.
=
"&"
;
}
$sign
.
=
"
$key
=
$val
"
;
//拼接为url参数形式
$urls
.
=
"
$key
="
.
urlencode
(
$val
);
//拼接为url参数形式并URL编码参数值
}
$result
=
array
(
'urls'
=>
$urls
,
'sign'
=>
$sign
,
);
return
$result
;
}
/**
* 支付回调处理
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-19
* @desc description
* @param [array] $params [输入参数]
*/
public
function
Respond
(
$params
=
[])
{
if
(
empty
(
$this
->
config
))
{
return
DataReturn
(
'配置有误'
,
-
1
);
}
if
(
empty
(
$params
[
'trade_no'
]))
{
return
DataReturn
(
'支付失败'
,
-
1
);
}
if
(
empty
(
$params
[
'sign'
]))
{
return
DataReturn
(
'签名为空'
,
-
1
);
}
// 签名验证
$param
=
$this
->
GetParamSign
(
$params
);
if
(
md5
(
$param
[
'sign'
]
.
'&key='
.
$this
->
config
[
'appsecret'
])
!=
$params
[
'sign'
])
{
return
DataReturn
(
'签名错误'
,
-
1
);
}
// 支付状态
if
(
isset
(
$params
[
'status'
]))
{
switch
(
$params
[
'status'
])
{
// 未支付
case
0
:
$ret
=
DataReturn
(
'未支付'
,
-
100
);
break
;
// 成功
case
1
:
$ret
=
DataReturn
(
'支付成功'
,
0
,
$this
->
ReturnData
(
$params
));
break
;
// 支付超时
case
2
:
case
3
:
case
6
:
$ret
=
DataReturn
(
'支付超时'
,
-
1001
);
break
;
// 支付成功,通知失败
case
4
:
case
5
:
$ret
=
DataReturn
(
'支付成功,通知失败'
,
-
1002
);
break
;
// 默认
default
:
$ret
=
DataReturn
(
'支付异常错误'
,
-
1003
);
}
}
else
{
$ret
=
DataReturn
(
'支付异常错误'
,
-
1004
);
}
return
$ret
;
}
/**
* [ReturnData 返回数据统一格式]
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2018-10-06T16:54:24+0800
* @param [array] $data [返回数据]
*/
private
function
ReturnData
(
$data
)
{
// 返回数据固定基础参数
$data
[
'trade_no'
]
=
isset
(
$data
[
'trade_no'
])
?
$data
[
'trade_no'
]
:
''
;
// 支付平台 - 订单号
$data
[
'buyer_user'
]
=
isset
(
$data
[
'mid'
])
?
$data
[
'mid'
]
:
''
;
// 支付平台 - 用户
$data
[
'out_trade_no'
]
=
$data
[
'out_trade_no'
];
// 本系统发起支付的 - 订单号
$data
[
'subject'
]
=
isset
(
$data
[
'goodsname'
])
?
$data
[
'goodsname'
]
:
''
;
// 本系统发起支付的 - 商品名称
$data
[
'pay_price'
]
=
$data
[
'money_real'
];
// 本系统发起支付的 - 总价
return
$data
;
}
}
?>
\ No newline at end of file
extend/payment/MafubaoWeixin.php
0 → 100644
浏览文件 @
02e83521
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace
payment
;
/**
* 码付宝-微信
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-19
* @desc description
*/
class
MafubaoWeixin
{
// 插件配置参数
private
$config
;
/**
* 构造方法
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-17
* @desc description
* @param [array] $params [输入参数(支付配置参数)]
*/
public
function
__construct
(
$params
=
[])
{
$this
->
config
=
$params
;
}
/**
* 配置信息
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-19
* @desc description
*/
public
function
Config
()
{
// 基础信息
$base
=
[
'name'
=>
'码付宝-微信'
,
// 插件名称
'version'
=>
'0.0.1'
,
// 插件版本
'apply_version'
=>
'不限'
,
// 适用系统版本描述
'apply_terminal'
=>
[
'pc'
,
'h5'
],
// 适用终端 默认全部 ['pc', 'h5', 'ios', 'android', 'alipay', 'weixin', 'baidu']
'desc'
=>
'适用PC+H5,即时到帐支付方式,个人免签实现支付后立即通知。 <a href="http://pay.shopxo.net/" target="_blank">立即申请</a>'
,
// 插件描述(支持html)
'author'
=>
'Devil'
,
// 开发者
'author_url'
=>
'http://shopxo.net/'
,
// 开发者主页
];
// 配置信息
$element
=
[
[
'element'
=>
'input'
,
'type'
=>
'text'
,
'default'
=>
''
,
'name'
=>
'appid'
,
'placeholder'
=>
'appid'
,
'title'
=>
'appid'
,
'is_required'
=>
0
,
'message'
=>
'请填写appid'
,
],
[
'element'
=>
'input'
,
'type'
=>
'text'
,
'default'
=>
''
,
'name'
=>
'appsecret'
,
'placeholder'
=>
'appsecret'
,
'title'
=>
'appsecret'
,
'is_required'
=>
0
,
'message'
=>
'请填写通信密钥appsecret'
,
],
];
return
[
'base'
=>
$base
,
'element'
=>
$element
,
];
}
/**
* 支付入口
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-19
* @desc description
* @param [array] $params [输入参数]
*/
public
function
Pay
(
$params
=
[])
{
// 参数
if
(
empty
(
$params
))
{
return
DataReturn
(
'参数不能为空'
,
-
1
);
}
// 配置信息
if
(
empty
(
$this
->
config
))
{
return
DataReturn
(
'支付缺少配置'
,
-
1
);
}
// 处理支付
$parameter
=
array
(
'appid'
=>
$this
->
config
[
'appid'
],
'channel'
=>
'wechat'
,
'notify_url'
=>
$params
[
'notify_url'
],
'redirect_url'
=>
$params
[
'call_back_url'
],
'trade_type'
=>
'sync'
,
// 业务参数
'goodsname'
=>
$params
[
'name'
],
'out_trade_no'
=>
$params
[
'order_no'
],
'money'
=>
$params
[
'total_price'
],
);
$param
=
$this
->
GetParamSign
(
$parameter
);
$url
=
'http://payapi.shopxo.net/api/pay/mchCreateOrder/?'
.
$param
[
'urls'
]
.
'&sign='
.
md5
(
$param
[
'sign'
]
.
'&key='
.
$this
->
config
[
'appsecret'
]);
return
DataReturn
(
'处理成功'
,
0
,
$url
);
}
/**
* [GetParamSign 签名生成]
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2018-09-28T00:28:07+0800
* @param [array] $params [输入参数]
*/
private
function
GetParamSign
(
$params
=
[])
{
$sign
=
''
;
$urls
=
''
;
ksort
(
$params
);
foreach
(
$params
AS
$key
=>
$val
)
{
// 跳过这些不参数签名
if
(
$key
==
'sign'
||
$val
===
''
||
$val
===
null
)
{
continue
;
}
//后面追加&拼接URL
if
(
$sign
!=
''
)
{
$sign
.
=
"&"
;
$urls
.
=
"&"
;
}
$sign
.
=
"
$key
=
$val
"
;
//拼接为url参数形式
$urls
.
=
"
$key
="
.
urlencode
(
$val
);
//拼接为url参数形式并URL编码参数值
}
$result
=
array
(
'urls'
=>
$urls
,
'sign'
=>
$sign
,
);
return
$result
;
}
/**
* 支付回调处理
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-19
* @desc description
* @param [array] $params [输入参数]
*/
public
function
Respond
(
$params
=
[])
{
if
(
empty
(
$this
->
config
))
{
return
DataReturn
(
'配置有误'
,
-
1
);
}
if
(
empty
(
$params
[
'trade_no'
]))
{
return
DataReturn
(
'支付失败'
,
-
1
);
}
if
(
empty
(
$params
[
'sign'
]))
{
return
DataReturn
(
'签名为空'
,
-
1
);
}
// 签名验证
$param
=
$this
->
GetParamSign
(
$params
);
if
(
md5
(
$param
[
'sign'
]
.
'&key='
.
$this
->
config
[
'appsecret'
])
!=
$params
[
'sign'
])
{
return
DataReturn
(
'签名错误'
,
-
1
);
}
// 支付状态
if
(
isset
(
$params
[
'status'
]))
{
switch
(
$params
[
'status'
])
{
// 未支付
case
0
:
$ret
=
DataReturn
(
'未支付'
,
-
100
);
break
;
// 成功
case
1
:
$ret
=
DataReturn
(
'支付成功'
,
0
,
$this
->
ReturnData
(
$params
));
break
;
// 支付超时
case
2
:
case
3
:
case
6
:
$ret
=
DataReturn
(
'支付超时'
,
-
1001
);
break
;
// 支付成功,通知失败
case
4
:
case
5
:
$ret
=
DataReturn
(
'支付成功,通知失败'
,
-
1002
);
break
;
// 默认
default
:
$ret
=
DataReturn
(
'支付异常错误'
,
-
1003
);
}
}
else
{
$ret
=
DataReturn
(
'支付异常错误'
,
-
1004
);
}
return
$ret
;
}
/**
* [ReturnData 返回数据统一格式]
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2018-10-06T16:54:24+0800
* @param [array] $data [返回数据]
*/
private
function
ReturnData
(
$data
)
{
// 返回数据固定基础参数
$data
[
'trade_no'
]
=
isset
(
$data
[
'trade_no'
])
?
$data
[
'trade_no'
]
:
''
;
// 支付平台 - 订单号
$data
[
'buyer_user'
]
=
isset
(
$data
[
'mid'
])
?
$data
[
'mid'
]
:
''
;
// 支付平台 - 用户
$data
[
'out_trade_no'
]
=
$data
[
'out_trade_no'
];
// 本系统发起支付的 - 订单号
$data
[
'subject'
]
=
isset
(
$data
[
'goodsname'
])
?
$data
[
'goodsname'
]
:
''
;
// 本系统发起支付的 - 商品名称
$data
[
'pay_price'
]
=
$data
[
'money_real'
];
// 本系统发起支付的 - 总价
return
$data
;
}
}
?>
\ No newline at end of file
public/static/index/default/css/user.css
浏览文件 @
02e83521
...
@@ -84,6 +84,9 @@
...
@@ -84,6 +84,9 @@
.register-container
.am-tabs-d2
.am-tabs-nav
>
.am-active
:after
{
.register-container
.am-tabs-d2
.am-tabs-nav
>
.am-active
:after
{
border-bottom-color
:
#d2364c
;
border-bottom-color
:
#d2364c
;
}
}
.register-container
.am-tabs-d2
.am-tabs-bd
{
z-index
:
0
;
}
/**
/**
* 表单验证码
* 表单验证码
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录