Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
飞鱼0526
ShopXO
提交
59ca26e6
ShopXO
项目概览
飞鱼0526
/
ShopXO
与 Fork 源项目一致
Fork自
纵之格 / ShopXO
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
ShopXO
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
59ca26e6
编写于
10月 29, 2019
作者:
D
devil_gong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
头条支付
上级
6e38e86b
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
288 addition
and
30 deletion
+288
-30
application/api/controller/Toutiao.php
application/api/controller/Toutiao.php
+56
-0
application/api/controller/User.php
application/api/controller/User.php
+1
-1
application/lang/zh-cn.php
application/lang/zh-cn.php
+1
-0
application/service/ToutiaoService.php
application/service/ToutiaoService.php
+105
-0
extend/base/Toutiao.php
extend/base/Toutiao.php
+27
-2
extend/payment/Alipay.php
extend/payment/Alipay.php
+78
-6
public/appmini/old/toutiao/app.js
public/appmini/old/toutiao/app.js
+1
-1
public/appmini/old/toutiao/pages/user-order/user-order.js
public/appmini/old/toutiao/pages/user-order/user-order.js
+19
-20
未找到文件。
application/api/controller/Toutiao.php
0 → 100644
浏览文件 @
59ca26e6
<?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
app\api\controller
;
use
app\service\ToutiaoService
;
/**
* 头条定制化控制器
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @date 2019-10-29
*/
class
Toutiao
extends
Common
{
/**
* [__construct 构造方法]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-03T12:39:08+0800
*/
public
function
__construct
()
{
// 调用父类前置方法
parent
::
__construct
();
// 是否登录
$this
->
IsLogin
();
}
/**
* 订单支付
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-10-29
* @desc description
*/
public
function
Pay
()
{
// 获取支付信息
$params
=
$this
->
data_post
;
$params
[
'user'
]
=
$this
->
user
;
return
ToutiaoService
::
Pay
(
$params
);
}
}
?>
\ No newline at end of file
application/api/controller/User.php
浏览文件 @
59ca26e6
...
@@ -262,7 +262,7 @@ class User extends Common
...
@@ -262,7 +262,7 @@ class User extends Common
'appid'
=>
MyC
(
'common_app_mini_toutiao_appid'
,
'tt65341389fa1e87f3'
),
'appid'
=>
MyC
(
'common_app_mini_toutiao_appid'
,
'tt65341389fa1e87f3'
),
'secret'
=>
MyC
(
'common_app_mini_toutiao_appsecret'
,
'9ea496422c189390d2d3ec8eec597fbcf3e1e5a7'
),
'secret'
=>
MyC
(
'common_app_mini_toutiao_appsecret'
,
'9ea496422c189390d2d3ec8eec597fbcf3e1e5a7'
),
];
];
$result
=
(
new
\
base\Toutiao
Auth
())
->
GetAuthCode
(
$this
->
data_post
);
$result
=
(
new
\
base\Toutiao
())
->
GetAuthCode
(
$this
->
data_post
);
if
(
$result
[
'status'
]
==
0
)
if
(
$result
[
'status'
]
==
0
)
{
{
return
DataReturn
(
'授权登录成功'
,
0
,
$result
[
'data'
][
'openid'
]);
return
DataReturn
(
'授权登录成功'
,
0
,
$result
[
'data'
][
'openid'
]);
...
...
application/lang/zh-cn.php
浏览文件 @
59ca26e6
...
@@ -128,6 +128,7 @@ return array(
...
@@ -128,6 +128,7 @@ return array(
'alipay'
=>
array
(
'value'
=>
'alipay'
,
'name'
=>
'支付宝小程序'
),
'alipay'
=>
array
(
'value'
=>
'alipay'
,
'name'
=>
'支付宝小程序'
),
'weixin'
=>
array
(
'value'
=>
'weixin'
,
'name'
=>
'微信小程序'
),
'weixin'
=>
array
(
'value'
=>
'weixin'
,
'name'
=>
'微信小程序'
),
'baidu'
=>
array
(
'value'
=>
'baidu'
,
'name'
=>
'百度小程序'
),
'baidu'
=>
array
(
'value'
=>
'baidu'
,
'name'
=>
'百度小程序'
),
'toutiao'
=>
array
(
'value'
=>
'toutiao'
,
'name'
=>
'头条小程序'
),
),
),
// 小程序url跳转类型
// 小程序url跳转类型
...
...
application/service/ToutiaoService.php
0 → 100644
浏览文件 @
59ca26e6
<?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
app\service
;
use
think\Db
;
use
app\service\PaymentService
;
use
app\service\OrderService
;
/**
* 头条定制化服务层
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @date 2019-10-29
*/
class
ToutiaoService
{
/**
* 订单支付
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-10-29
* @desc description
* @param [array] $params [输入参数]
*/
public
static
function
Pay
(
$params
=
[])
{
// 获取支付信息
$ret
=
OrderService
::
Pay
(
$params
);
if
(
$ret
[
'code'
]
!=
0
)
{
return
$ret
;
}
// 获取订单信息
$where
=
[
'id'
=>
intval
(
$params
[
'id'
]),
'user_id'
=>
$params
[
'user'
][
'id'
]];
$order
=
Db
::
name
(
'Order'
)
->
where
(
$where
)
->
find
();
// 支付方式
$payment_id
=
empty
(
$params
[
'payment_id'
])
?
$order
[
'payment_id'
]
:
intval
(
$params
[
'payment_id'
]);
$payment
=
PaymentService
::
PaymentList
([
'where'
=>
[
'id'
=>
$payment_id
]]);
// 头条需要的订单信息
$merchant_id
=
'1900017261'
;
$app_id
=
'800172615976'
;
$secret
=
'4xi2kcrzgancnanghtafqtqrwgy5534itichypud'
;
$order_info
=
[
'merchant_id'
=>
$merchant_id
,
'app_id'
=>
$app_id
,
'sign_type'
=>
'MD5'
,
'timestamp'
=>
time
(),
'version'
=>
'2.0'
,
'trade_type'
=>
'H5'
,
'product_code'
=>
'pay'
,
'payment_type'
=>
'direct'
,
'outorderno'
=>
$order
[
'order_no'
],
'uid'
=>
md5
(
$params
[
'user'
][
'id'
]),
'total_amount'
=>
intval
(
$order
[
'total_price'
]
*
100
),
'currency'
=>
'CNY'
,
'subject'
=>
'订单支付'
,
'body'
=>
$order
[
'order_no'
],
'trade_time'
=>
$order
[
'add_time'
],
'valid_time'
=>
$order
[
'add_time'
]
+
(
intval
(
MyC
(
'common_order_close_limit_time'
,
30
,
true
))
*
60
),
'notify_url'
=>
__MY_URL__
,
];
$order_info
[
'sign'
]
=
(
new
\
base\Toutiao
())
->
PaySignCreated
(
$order_info
,
$secret
);
// 支付方式
$service
=
1
;
switch
(
$payment
[
0
][
'payment'
])
{
// 微信
case
'Weixin'
:
$service
=
3
;
$order_info
[
'wx_url'
]
=
$ret
[
'data'
][
'data'
];
$order_info
[
'wx_type'
]
=
'MWEB'
;
break
;
// 支付宝
case
'Alipay'
:
$service
=
4
;
$order_info
[
'alipay_url'
]
=
$ret
[
'data'
][
'data'
];
break
;
}
// 返回数据
$result
=
[
'order_info'
=>
$order_info
,
'service'
=>
$service
,
'is_online_pay'
=>
$ret
[
'data'
][
'is_online_pay'
],
];
return
DataReturn
(
'success'
,
0
,
$result
);
print_r
(
$result
);
die
;
}
}
?>
\ No newline at end of file
extend/base/Toutiao
Auth
.php
→
extend/base/Toutiao.php
浏览文件 @
59ca26e6
...
@@ -11,11 +11,11 @@
...
@@ -11,11 +11,11 @@
namespace
base
;
namespace
base
;
/**
/**
* 头条
用户授权
驱动
* 头条驱动
* @author Devil
* @author Devil
* @version V_1.0.0
* @version V_1.0.0
*/
*/
class
Toutiao
Auth
class
Toutiao
{
{
/**
/**
* [__construct 构造方法]
* [__construct 构造方法]
...
@@ -51,5 +51,30 @@ class ToutiaoAuth
...
@@ -51,5 +51,30 @@ class ToutiaoAuth
}
}
return
[
'status'
=>
0
,
'msg'
=>
'授权成功'
,
'data'
=>
$result
];
return
[
'status'
=>
0
,
'msg'
=>
'授权成功'
,
'data'
=>
$result
];
}
}
/**
* 支付签名生成
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-10-29
* @desc description
* @param [array] $data [需要生成签名的数据]
* @param [string] $secret [密钥]
*/
public
function
PaySignCreated
(
$data
,
$secret
)
{
ksort
(
$data
);
$sign
=
''
;
foreach
(
$data
AS
$key
=>
$val
)
{
if
(
$key
!=
'sign'
&&
$key
!=
'risk_info'
&&
$val
!=
''
&&
$val
!=
null
)
{
$sign
.
=
"
$key
=
$val
&"
;
}
}
$sign
=
substr
(
$sign
,
0
,
-
1
);
return
md5
(
$sign
.
$secret
);
}
}
}
?>
?>
\ No newline at end of file
extend/payment/Alipay.php
浏览文件 @
59ca26e6
...
@@ -52,7 +52,7 @@ class Alipay
...
@@ -52,7 +52,7 @@ class Alipay
'name'
=>
'支付宝'
,
// 插件名称
'name'
=>
'支付宝'
,
// 插件名称
'version'
=>
'1.1.0'
,
// 插件版本
'version'
=>
'1.1.0'
,
// 插件版本
'apply_version'
=>
'不限'
,
// 适用系统版本描述
'apply_version'
=>
'不限'
,
// 适用系统版本描述
'apply_terminal'
=>
[
'pc'
,
'h5'
],
// 适用终端 默认全部 ['pc', 'h5', 'app', 'alipay', 'weixin', 'baidu
']
'apply_terminal'
=>
[
'pc'
,
'h5'
,
'ios'
,
'android'
,
'toutiao'
],
// 适用终端 默认全部 ['pc', 'h5', 'ios', 'android', 'alipay', 'weixin', 'baidu', 'toutiao
']
'desc'
=>
'2.0版本,适用PC+H5,即时到帐支付方式,买家的交易资金直接打入卖家支付宝账户,快速回笼交易资金。 <a href="http://www.alipay.com/" target="_blank">立即申请</a>'
,
// 插件描述(支持html)
'desc'
=>
'2.0版本,适用PC+H5,即时到帐支付方式,买家的交易资金直接打入卖家支付宝账户,快速回笼交易资金。 <a href="http://www.alipay.com/" target="_blank">立即申请</a>'
,
// 插件描述(支持html)
'author'
=>
'Devil'
,
// 开发者
'author'
=>
'Devil'
,
// 开发者
'author_url'
=>
'http://shopxo.net/'
,
// 开发者主页
'author_url'
=>
'http://shopxo.net/'
,
// 开发者主页
...
@@ -131,16 +131,88 @@ class Alipay
...
@@ -131,16 +131,88 @@ class Alipay
return
DataReturn
(
'支付缺少配置'
,
-
1
);
return
DataReturn
(
'支付缺少配置'
,
-
1
);
}
}
//
手机/PC
//
支付方式
if
(
IsMobile
()
)
switch
(
APPLICATION_CLIENT_TYPE
)
{
{
$ret
=
$this
->
PayMobile
(
$params
);
// web
}
else
{
case
'pc'
:
$ret
=
$this
->
PayWeb
(
$params
);
case
'h5'
:
if
(
IsMobile
())
{
$ret
=
$this
->
PayMobile
(
$params
);
}
else
{
$ret
=
$this
->
PayWeb
(
$params
);
}
break
;
// app,头条小程序
case
'ios'
:
case
'android'
:
case
'toutiao'
:
$ret
=
$this
->
PayApp
(
$params
);
break
;
default
:
$ret
=
DataReturn
(
'没有相关支付模块['
.
APPLICATION_CLIENT_TYPE
.
']'
,
-
1
);
}
}
return
$ret
;
return
$ret
;
}
}
/**
* app支付
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-10-29
* @desc description
* @param [array] $params [输入参数]
*/
private
function
PayApp
(
$params
=
[])
{
// 支付参数
$parameter
=
array
(
'app_id'
=>
$this
->
config
[
'appid'
],
'method'
=>
'alipay.trade.app.pay'
,
'format'
=>
'JSON'
,
'charset'
=>
'utf-8'
,
'sign_type'
=>
'RSA2'
,
'timestamp'
=>
date
(
'Y-m-d H:i:s'
),
'version'
=>
'1.0'
,
'return_url'
=>
$params
[
'call_back_url'
],
'notify_url'
=>
$params
[
'notify_url'
],
);
$biz_content
=
array
(
'product_code'
=>
'QUICK_MSECURITY_PAY'
,
'subject'
=>
$params
[
'name'
],
'out_trade_no'
=>
$params
[
'order_no'
],
'total_amount'
=>
$params
[
'total_price'
],
);
$parameter
[
'biz_content'
]
=
json_encode
(
$biz_content
,
JSON_UNESCAPED_UNICODE
);
// 生成签名参数+签名
$parameter
[
'sign'
]
=
$this
->
MyRsaSign
(
$this
->
GetSignContent
(
$parameter
));
// 生成支付参数
$value
=
''
;
$i
=
0
;
foreach
(
$parameter
as
$k
=>
$v
)
{
if
(
$v
!=
''
&&
$v
!=
null
&&
"@"
!=
substr
(
$v
,
0
,
1
))
{
if
(
$i
==
0
)
{
$value
.
=
$k
.
'='
.
urlencode
(
$v
);
}
else
{
$value
.
=
'&'
.
$k
.
'='
.
urlencode
(
$v
);
}
$i
++
;
}
}
unset
(
$k
,
$v
);
return
DataReturn
(
'处理成功'
,
0
,
$value
);
}
/**
/**
* [PayMobile wap手机支付]
* [PayMobile wap手机支付]
* @author Devil
* @author Devil
...
...
public/appmini/old/toutiao/app.js
浏览文件 @
59ca26e6
...
@@ -67,7 +67,7 @@ App({
...
@@ -67,7 +67,7 @@ App({
// 请求地址
// 请求地址
request_url
:
"
{{request_url}}
"
,
request_url
:
"
{{request_url}}
"
,
request_url
:
'
http://tp5-dev.com/
'
,
request_url
:
'
http://tp5-dev.com/
'
,
request_url
:
'
https://test.shopxo.net/
'
,
//
request_url: 'https://test.shopxo.net/',
// 基础信息
// 基础信息
application_title
:
"
{{application_title}}
"
,
application_title
:
"
{{application_title}}
"
,
...
...
public/appmini/old/toutiao/pages/user-order/user-order.js
浏览文件 @
59ca26e6
...
@@ -215,7 +215,7 @@ Page({
...
@@ -215,7 +215,7 @@ Page({
tt
.
showLoading
({
title
:
"
请求中...
"
});
tt
.
showLoading
({
title
:
"
请求中...
"
});
tt
.
request
({
tt
.
request
({
url
:
app
.
get_request_url
(
"
pay
"
,
"
order
"
),
url
:
app
.
get_request_url
(
"
pay
"
,
"
toutiao
"
),
method
:
"
POST
"
,
method
:
"
POST
"
,
data
:
{
data
:
{
id
:
order_id
,
id
:
order_id
,
...
@@ -234,27 +234,26 @@ Page({
...
@@ -234,27 +234,26 @@ Page({
app
.
showToast
(
"
支付成功
"
,
"
success
"
);
app
.
showToast
(
"
支付成功
"
,
"
success
"
);
}
else
{
}
else
{
tt
.
requestPayment
({
tt
.
pay
({
timeStamp
:
res
.
data
.
data
.
data
.
timeStamp
,
orderInfo
:
res
.
data
.
data
.
order_info
,
nonceStr
:
res
.
data
.
data
.
data
.
nonceStr
,
service
:
res
.
data
.
data
.
service
,
package
:
res
.
data
.
data
.
data
.
package
,
getOrderStatus
(
res
)
{
signType
:
res
.
data
.
data
.
data
.
signType
,
let
{
out_order_no
}
=
res
;
paySign
:
res
.
data
.
data
.
data
.
paySign
,
return
new
Promise
(
function
(
resolve
,
reject
)
{
success
:
function
(
res
)
{
// 商户前端根据 out_order_no 请求商户后端查询微信支付订单状态
// 数据设置
console
.
log
(
'
getOrderStatus
'
)
var
temp_data_list
=
self
.
data
.
data_list
;
temp_data_list
[
index
][
'
status
'
]
=
2
;
temp_data_list
[
index
][
'
status_name
'
]
=
'
待发货
'
;
self
.
setData
({
data_list
:
temp_data_list
});
// 跳转支付页面
tt
.
navigateTo
({
url
:
"
/pages/paytips/paytips?code=9000&total_price=
"
+
self
.
data
.
data_list
[
index
][
'
total_price
'
]
});
});
},
},
fail
:
function
(
res
)
{
success
(
res
)
{
app
.
showToast
(
'
支付失败
'
);
console
.
log
(
res
,
'
pay-success
'
)
if
(
res
.
code
==
0
)
{
// 支付成功处理逻辑,只有res.code=0时,才表示支付成功
// 但是最终状态要以商户后端结果为准
}
},
fail
(
res
)
{
console
.
log
(
res
,
'
pay-fail
'
)
// 调起收银台失败处理逻辑
}
}
});
});
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录