|
@@ -18,6 +18,57 @@ class Vip
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public function getInfo()
|
|
|
+ {
|
|
|
+ $data = array();
|
|
|
+ if (Place::$user[$this->type . '_id'] > 0) {
|
|
|
+ $data['info'] = Dever::db($this->type, 'place')->find(Place::$user[$this->type . '_id']);
|
|
|
+ $data['price'] = Dever::db($this->type . '_price', 'place')->select(array($this->type . '_id' => $data['info']['id']), array('col' => 'per,total,type'));
|
|
|
+ if ($data['price']) {
|
|
|
+ foreach ($data['price'] as &$v) {
|
|
|
+ if ($v['total'] > 0) {
|
|
|
+ if ($v['type'] == 1) {
|
|
|
+ $v['total'] = '每日可下载共'.$v['total'].'次';
|
|
|
+ } elseif ($v['type'] == 2) {
|
|
|
+ $v['total'] = '每日可使用共'.$v['total'].'次';
|
|
|
+ } elseif ($v['type'] == 3) {
|
|
|
+ $v['total'] = '每次最多购买'.$v['total'].'个';
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $v['per'] = $v['per'] . '%';
|
|
|
+ $v['name'] = Dever::db('resource', 'place')->value('type', $v['type']);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+ # 获取所有数据
|
|
|
+ public function getData()
|
|
|
+ {
|
|
|
+ $cur = Place::$user[$this->type . '_id'] ?? 0;
|
|
|
+ $user = array();
|
|
|
+ if ($cur > 0) {
|
|
|
+ $user = Dever::db($this->type, 'place')->find($cur);
|
|
|
+ }
|
|
|
+ $data['list'] = $this->data;
|
|
|
+ if ($data['list']) {
|
|
|
+ foreach ($data['list'] as &$v) {
|
|
|
+ # 判断哪个已经买过了,不用再买了
|
|
|
+ $v['sprice'] = $v['price'];
|
|
|
+ # 1是可以购买
|
|
|
+ $v['buy'] = 1;
|
|
|
+ if ($user && $user['level'] >= $v['level']) {
|
|
|
+ $v['buy'] = 2;
|
|
|
+ } elseif ($v['pay'] == 1) {
|
|
|
+ $v['price'] -= $user['price'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
# 获取列表
|
|
|
public function getList($state = true)
|
|
|
{
|
|
@@ -36,7 +87,7 @@ class Vip
|
|
|
}
|
|
|
|
|
|
# 获取购买资源的价格列表
|
|
|
- public function getPrice($price, $info_id, $app, $type)
|
|
|
+ public function getResourcePrice($price, $info_id, $app, $type)
|
|
|
{
|
|
|
$result = array();
|
|
|
if ($info = $this->info) {
|
|
@@ -92,4 +143,87 @@ class Vip
|
|
|
}
|
|
|
return $result;
|
|
|
}
|
|
|
+
|
|
|
+ # 购买会员
|
|
|
+ public function pay()
|
|
|
+ {
|
|
|
+ if (!Place::$uid) {
|
|
|
+ Dever::error('请先登录', 300);
|
|
|
+ }
|
|
|
+ $db = Dever::db($this->type, 'place');
|
|
|
+ $id = Dever::input('id', 'is_numeric', 'ID');
|
|
|
+ $info = $db->find($id);
|
|
|
+ if (!$info) {
|
|
|
+ Dever::error('信息不存在');
|
|
|
+ }
|
|
|
+ $cur = Place::$user[$this->type . '_id'];
|
|
|
+ if ($cur == $info['id']) {
|
|
|
+ Dever::error('您已购买过' . $info['name']);
|
|
|
+ }
|
|
|
+ if ($cur > 0) {
|
|
|
+ $user = $db->find($cur);
|
|
|
+ if ($user && $user['level'] >= $info['level']) {
|
|
|
+ Dever::error('您已购买过');
|
|
|
+ }
|
|
|
+ if ($info['pay'] == 1) {
|
|
|
+ $info['price'] -= $user['price'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $prefix = strtoupper(substr($this->type, 0, 2));
|
|
|
+ $account = Dever::input('account', 'is_string', '账户', 'wechat');
|
|
|
+ $env = Dever::input('env', 'is_numeric', '运行环境', 3);
|
|
|
+ $result = Dever::load('util', 'api')->openid($account, $env, Place::$uid);
|
|
|
+ if (isset($result['openid'])) {
|
|
|
+ Place::$user['openid'] = $result['openid'];
|
|
|
+ } elseif (isset($result['link'])) {
|
|
|
+ return $result;
|
|
|
+ }
|
|
|
+
|
|
|
+ $price = $info['price'];
|
|
|
+
|
|
|
+ # 支付账户
|
|
|
+ $account = 'pay_' . $account;
|
|
|
+ # 下单
|
|
|
+ $order = array
|
|
|
+ (
|
|
|
+ 'uid' => Place::$uid,
|
|
|
+ 'openid' => Place::$user['openid'] ?? '',
|
|
|
+ 'order_num' => Dever::load('util', 'api')->createNumber($prefix, 'place/'.$this->type.'_order'),
|
|
|
+ 'cash' => $price*100,
|
|
|
+ 'name' => $info['name'],
|
|
|
+ 'time_expire' => time() + 3600,
|
|
|
+ );
|
|
|
+ # 设置支付成功的回调信息,多个参数用|隔开
|
|
|
+ $param['notify'] = 'place/'.$this->type.'.success|' . Dever::input('p') . '|' . $order['order_num'];
|
|
|
+ $data['pay'] = Dever::load('account', 'api')->run($account, 'order', $order, $env);
|
|
|
+ if ($data['pay']) {
|
|
|
+ $order['status'] = 1;
|
|
|
+ $order[$this->type.'_id'] = $info['id'];
|
|
|
+ $data['order_id'] = Dever::db($this->type . '_order', 'place')->insert($order);
|
|
|
+ $data['order_num'] = $order['order_num'];
|
|
|
+ }
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+ # 支付成功
|
|
|
+ public function success($place, $order_num, $type, $status, $body = array())
|
|
|
+ {
|
|
|
+ Dever::input('authorization', 'is_string', '入口码', $place);
|
|
|
+ $order = Dever::db($this->type.'_order', 'place')->find(array('order_num' => $order_num));
|
|
|
+ if ($order && $order['status'] == 1) {
|
|
|
+ if ($status == 1) {
|
|
|
+ $update['status'] = 2;
|
|
|
+ } else {
|
|
|
+ $update['status'] = 3;
|
|
|
+ }
|
|
|
+
|
|
|
+ $update['pdate'] = time();
|
|
|
+ $state = Dever::db($this->type.'_order', 'place')->update($order['id'], $update);
|
|
|
+ if (!$state) {
|
|
|
+ return '订单更新失败';
|
|
|
+ }
|
|
|
+ Dever::db('user', 'place')->update($order['uid'], array($this->type.'_id' => $order[$this->type.'_id']));
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|