Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
纵之格
ShopXO
提交
8b744bea
ShopXO
项目概览
纵之格
/
ShopXO
通知
393
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 搜索 >>
提交
8b744bea
编写于
12月 03, 2021
作者:
G
gongfuxiang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
支付优化
上级
bcae35db
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
119 addition
and
51 deletion
+119
-51
app/api/controller/Order.php
app/api/controller/Order.php
+14
-0
app/service/OrderService.php
app/service/OrderService.php
+1
-1
extend/payment/Alipay.php
extend/payment/Alipay.php
+19
-8
extend/payment/AlipayFace.php
extend/payment/AlipayFace.php
+23
-11
extend/payment/QQ.php
extend/payment/QQ.php
+23
-11
extend/payment/Weixin.php
extend/payment/Weixin.php
+39
-20
未找到文件。
app/api/controller/Order.php
浏览文件 @
8b744bea
...
...
@@ -272,5 +272,19 @@ class Order extends Common
return
ApiService
::
ApiDataReturn
(
OrderService
::
OrderDelete
(
$params
));
}
/**
* 支付状态校验
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-01-08
* @desc description
*/
public
function
PayCheck
()
{
$params
=
$this
->
data_post
;
$params
[
'user'
]
=
$this
->
user
;
return
ApiService
::
ApiDataReturn
(
OrderService
::
OrderPayCheck
(
$params
));
}
}
?>
\ No newline at end of file
app/service/OrderService.php
浏览文件 @
8b744bea
...
...
@@ -271,7 +271,7 @@ class OrderService
'call_back_url'
=>
$call_back_url
,
'redirect_url'
=>
$redirect_url
,
'site_name'
=>
MyC
(
'home_site_name'
,
'ShopXO'
,
true
),
'
ajax_url'
=>
MyUrl
(
'index/order/paycheck'
),
'
check_url'
=>
MyUrl
(
'index/order/paycheck'
),
];
// 发起支付处理钩子
...
...
extend/payment/Alipay.php
浏览文件 @
8b744bea
...
...
@@ -145,7 +145,6 @@ class Alipay
// app,头条小程序
case
'ios'
:
case
'android'
:
case
'toutiao'
:
$ret
=
$this
->
PayApp
(
$params
);
break
;
...
...
@@ -246,17 +245,19 @@ class Alipay
$parameter
[
'sign'
]
=
$this
->
MyRsaSign
(
$this
->
GetSignContent
(
$parameter
));
// 接口则直接返回
$html
=
$this
->
BuildRequestForm
(
$parameter
);
if
(
APPLICATION
==
'app'
)
{
$result
=
[
'data'
=>
$parameter
,
'html'
=>
$html
,
'url'
=>
'https://openapi.alipay.com/gateway.do?charset=utf-8'
,
];
return
DataReturn
(
'success'
,
0
,
$result
);
}
// web端输出执行form表单post提交
exit
(
$
this
->
BuildRequestForm
(
$parameter
)
);
exit
(
$
html
);
}
...
...
@@ -293,9 +294,21 @@ class Alipay
// 生成签名参数+签名
$parameter
[
'sign'
]
=
$this
->
MyRsaSign
(
$this
->
GetSignContent
(
$parameter
));
// 输出执行form表单post提交
exit
(
$this
->
BuildRequestForm
(
$parameter
));
// 接口则直接返回
$html
=
$this
->
BuildRequestForm
(
$parameter
);
if
(
APPLICATION
==
'app'
)
{
$result
=
[
'data'
=>
$parameter
,
'html'
=>
$html
,
'url'
=>
'https://openapi.alipay.com/gateway.do?charset=utf-8'
,
];
return
DataReturn
(
'success'
,
0
,
$result
);
}
// web端输出执行form表单post提交
exit
(
$html
);
}
/**
...
...
@@ -504,9 +517,7 @@ class Alipay
//submit按钮控件请不要含有name属性
$html
.
=
"<input type='submit' value='ok' style='display:none;'></form>"
;
$html
.
=
"<script>document.forms['alipaysubmit'].submit();</script>"
;
return
$html
;
}
...
...
extend/payment/AlipayFace.php
浏览文件 @
8b744bea
...
...
@@ -52,7 +52,7 @@ class AlipayFace
'name'
=>
'支付宝'
,
// 插件名称
'version'
=>
'1.0.0'
,
// 插件版本
'apply_version'
=>
'不限'
,
// 适用系统版本描述
'apply_terminal'
=>
[
'pc'
,
'h5'
],
// 适用终端 默认全部 ['pc', 'h5', 'app', 'alipay', 'weixin', 'baidu']
'apply_terminal'
=>
[
'pc'
,
'h5'
,
'weixin'
],
// 适用终端 默认全部 ['pc', 'h5', 'app', 'alipay', 'weixin', 'baidu']
'desc'
=>
'支付宝当面付、适用web端,用户主动扫码支付方式,买家的交易资金直接打入卖家支付宝账户,快速回笼交易资金。 <a href="http://www.alipay.com/" target="_blank">立即申请</a>'
,
// 插件描述(支持html)
'author'
=>
'Devil'
,
// 开发者
'author_url'
=>
'http://shopxo.net/'
,
// 开发者主页
...
...
@@ -171,19 +171,31 @@ class AlipayFace
// 状态
if
(
isset
(
$result
[
$key
][
'code'
])
&&
$result
[
$key
][
'code'
]
==
10000
&&
!
empty
(
$result
[
$key
][
'qr_code'
]))
{
if
(
empty
(
$params
[
'
ajax
_url'
]))
if
(
empty
(
$params
[
'
check
_url'
]))
{
return
DataReturn
(
'支付状态校验地址不能为空'
,
-
50
);
}
$pay_params
=
[
'url'
=>
urlencode
(
base64_encode
(
$result
[
$key
][
'qr_code'
])),
'order_no'
=>
$params
[
'order_no'
],
'name'
=>
urlencode
(
'支付宝支付'
),
'msg'
=>
urlencode
(
'打开支付宝APP扫一扫进行支付'
),
'ajax_url'
=>
urlencode
(
base64_encode
(
$params
[
'ajax_url'
])),
];
$url
=
MyUrl
(
'index/pay/qrcode'
,
$pay_params
);
return
DataReturn
(
'success'
,
0
,
$url
);
if
(
APPLICATION
==
'app'
)
{
$data
=
[
'pay_url'
=>
$result
[
$key
][
'qr_code'
],
'qrcode_url'
=>
MyUrl
(
'index/qrcode/index'
,
[
'content'
=>
urlencode
(
base64_encode
(
$result
[
$key
][
'qr_code'
]))]),
'order_no'
=>
$params
[
'order_no'
],
'name'
=>
'支付宝支付'
,
'msg'
=>
'打开支付宝APP扫一扫进行支付'
,
'check_url'
=>
$params
[
'check_url'
],
];
}
else
{
$pay_params
=
[
'url'
=>
urlencode
(
base64_encode
(
$result
[
$key
][
'qr_code'
])),
'order_no'
=>
$params
[
'order_no'
],
'name'
=>
urlencode
(
'支付宝支付'
),
'msg'
=>
urlencode
(
'打开支付宝APP扫一扫进行支付'
),
'check_url'
=>
urlencode
(
base64_encode
(
$params
[
'check_url'
])),
];
$data
=
MyUrl
(
'index/pay/qrcode'
,
$pay_params
);
}
return
DataReturn
(
'success'
,
0
,
$data
);
}
// 直接返回支付信息
...
...
extend/payment/QQ.php
浏览文件 @
8b744bea
...
...
@@ -227,23 +227,35 @@ class QQ
// 手机模式下直接返回微信的支付url地址,打开支付(缺点是支付后会直接关闭站点)
// QQ支付本身没有提供H5支付方案,这种方式也可以直接支付(缺点是支付后不能回调到原来浏览器)
// 公众号后续再采用公众号的方式支付,体验会更好一些,只是可以不关闭站点
if
(
A
pplicationClientType
()
==
'h5'
)
if
(
A
PPLICATION
==
'web'
&&
IsMobile
()
)
{
$result
=
DataReturn
(
'success'
,
0
,
$data
[
'code_url'
]);
}
else
{
if
(
empty
(
$params
[
'
ajax
_url'
]))
if
(
empty
(
$params
[
'
check
_url'
]))
{
return
DataReturn
(
'支付状态校验地址不能为空'
,
-
50
);
}
$pay_params
=
[
'url'
=>
urlencode
(
base64_encode
(
$data
[
'code_url'
])),
'order_no'
=>
$params
[
'order_no'
],
'name'
=>
urlencode
(
'QQ支付'
),
'msg'
=>
urlencode
(
'打开QQAPP扫一扫进行支付'
),
'ajax_url'
=>
urlencode
(
base64_encode
(
$params
[
'ajax_url'
])),
];
$url
=
MyUrl
(
'index/pay/qrcode'
,
$pay_params
);
$result
=
DataReturn
(
'success'
,
0
,
$url
);
if
(
APPLICATION
==
'app'
)
{
$data
=
[
'pay_url'
=>
$data
[
'code_url'
],
'qrcode_url'
=>
MyUrl
(
'index/qrcode/index'
,
[
'content'
=>
urlencode
(
base64_encode
(
$data
[
'code_url'
]))]),
'order_no'
=>
$params
[
'order_no'
],
'name'
=>
'QQ支付'
,
'msg'
=>
'打开QQAPP扫一扫进行支付'
,
'check_url'
=>
$params
[
'check_url'
],
];
}
else
{
$pay_params
=
[
'url'
=>
urlencode
(
base64_encode
(
$data
[
'code_url'
])),
'order_no'
=>
$params
[
'order_no'
],
'name'
=>
urlencode
(
'QQ支付'
),
'msg'
=>
urlencode
(
'打开QQAPP扫一扫进行支付'
),
'check_url'
=>
urlencode
(
base64_encode
(
$params
[
'check_url'
])),
];
$data
=
MyUrl
(
'index/pay/qrcode'
,
$pay_params
);
}
$result
=
DataReturn
(
'success'
,
0
,
$data
);
}
break
;
...
...
extend/payment/Weixin.php
浏览文件 @
8b744bea
...
...
@@ -249,19 +249,30 @@ class Weixin
{
// web支付
case
'NATIVE'
:
if
(
empty
(
$params
[
'
ajax
_url'
]))
if
(
empty
(
$params
[
'
check
_url'
]))
{
return
DataReturn
(
'支付状态校验地址不能为空'
,
-
50
);
}
$pay_params
=
[
'url'
=>
urlencode
(
base64_encode
(
$data
[
'code_url'
])),
'order_no'
=>
$params
[
'order_no'
],
'name'
=>
urlencode
(
'微信支付'
),
'msg'
=>
urlencode
(
'打开微信APP扫一扫进行支付'
),
'ajax_url'
=>
urlencode
(
base64_encode
(
$params
[
'ajax_url'
])),
];
$url
=
MyUrl
(
'index/pay/qrcode'
,
$pay_params
);
$result
=
DataReturn
(
'success'
,
0
,
$url
);
if
(
APPLICATION
==
'app'
)
{
$data
=
[
'qrcode_url'
=>
MyUrl
(
'index/qrcode/index'
,
[
'content'
=>
urlencode
(
base64_encode
(
$data
[
'code_url'
]))]),
'order_no'
=>
$params
[
'order_no'
],
'name'
=>
'微信支付'
,
'msg'
=>
'打开微信APP扫一扫进行支付'
,
'check_url'
=>
$params
[
'check_url'
],
];
}
else
{
$pay_params
=
[
'url'
=>
urlencode
(
base64_encode
(
$data
[
'code_url'
])),
'order_no'
=>
$params
[
'order_no'
],
'name'
=>
urlencode
(
'微信支付'
),
'msg'
=>
urlencode
(
'打开微信APP扫一扫进行支付'
),
'check_url'
=>
urlencode
(
base64_encode
(
$params
[
'check_url'
])),
];
$data
=
MyUrl
(
'index/pay/qrcode'
,
$pay_params
);
}
$result
=
DataReturn
(
'success'
,
0
,
$data
);
break
;
// h5支付
...
...
@@ -277,19 +288,20 @@ class Weixin
// 微信中/小程序支付
case
'JSAPI'
:
$pay_data
=
array
(
$pay_data
=
[
'appId'
=>
$pay_params
[
'appid'
],
'package'
=>
'prepay_id='
.
$data
[
'prepay_id'
],
'nonceStr'
=>
md5
(
time
()
.
rand
()),
'signType'
=>
$pay_params
[
'sign_type'
],
'timeStamp'
=>
(
string
)
time
(),
)
;
]
;
$pay_data
[
'paySign'
]
=
$this
->
GetSign
(
$pay_data
);
// 微信中
if
(
APPLICATION
==
'web'
&&
IsWeixinEnv
())
{
$this
->
PayHtml
(
$pay_data
,
$redirect_url
);
$html
=
$this
->
PayHtml
(
$pay_data
,
$redirect_url
);
die
(
$pay_data
[
'html'
]);
}
else
{
$result
=
DataReturn
(
'success'
,
0
,
$pay_data
);
}
...
...
@@ -324,10 +336,16 @@ class Weixin
private
function
PayHtml
(
$pay_data
,
$redirect_url
)
{
// 支付代码
exit
(
'<html>
return
'<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title>微信安全支付</title>
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1, maximum-scale=1">
<body style="text-align:center;padding-top:10%;">
<p style="color:#999;">正在支付中...</p>
<p style="color:#f00;margin-top:20px;">请不要关闭页面!</p>
</body>
<script type="text/javascript">
function onBridgeReady()
{
...
...
@@ -359,9 +377,8 @@ class Weixin
onBridgeReady();
}
</script>
</head>
<body>
</html>'
);
</head>
</html>'
;
}
/**
...
...
@@ -490,10 +507,12 @@ class Weixin
'android'
=>
'APP'
,
];
//
微信中打开
if
(
$client_type
==
'h5'
&&
IsWeixinEnv
()
)
//
h5
if
(
$client_type
==
'h5'
)
{
$type_all
[
'h5'
]
=
$type_all
[
'weixin'
];
// 微信中打开
// h5则使用NATIVE二维码的方式
$type_all
[
'h5'
]
=
IsWeixinEnv
()
?
$type_all
[
'weixin'
]
:
$type_all
[
'pc'
];
}
return
isset
(
$type_all
[
$client_type
])
?
$type_all
[
$client_type
]
:
''
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录