123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- <?php
- # 充值
- namespace Account\Lib;
- use Dever;
- class Pay
- {
- # 支付项目
- private $project_id = 1;
- # 支付渠道
- private $channel_id = 1;
- # 支付类型:5是小程序
- private $system_source = 5;
- # 生成订单
- public function create($data)
- {
- $order = [
- 'order_num' => $this->createOrderNum(),
- 'config_id' => $data['config_id'],
- 'info_id' => $data['info_id'],
- 'card_id' => $data['card_id'],
- 'uid' => $data['uid'],
- 'username' => $data['username'],
- 'name' => $data['name'],
- 'cash' => $data['cash'],
- 'price' => $data['price'],
- 'yue' => $data['yue'],
- ];
- $order['id'] = Dever::db('account/pay')->insert($order);
- if ($order['id']) {
- # 需要支付
- if ($data['pay_channel_id']) {
- $this->channel_id = $data['pay_channel_id'];
- }
- if ($data['pay_project_id']) {
- $this->project_id = $data['pay_project_id'];
- }
- if ($order['price'] > 0) {
- return $this->yes($order);
- } else {
- return $this->no($order);
- }
- }
- Dever::alert('支付失败');
- }
- # 生成订单号
- private function createOrderNum()
- {
- $where['order_num'] = Dever::order('P');
- $state = Dever::db('account/pay')->one($where);
- if (!$state) {
- return $where['order_num'];
- } else {
- return $this->createOrderNum();
- }
- }
- # 支付
- private function yes($order)
- {
- $openid = Dever::load('user/lib/applet')->getOpenid($order['uid'], $this->system_source, $this->project_id);
- $param = array(
- 'project_id' => $this->project_id,
- 'channel_id' => $this->channel_id,
- 'system_source' => $this->system_source,
- 'uid' => $order['uid'],
- 'username' => isset($order['username']) ? $order['username'] : '',
- 'name' => $order['name'],
- 'cash' => $order['price'],
- 'product_id' => $order['id'],
- 'order_id' => $order['order_num'],
- 'openid' => $openid,
- );
- $data = Dever::load('pay/api.pay', $param);
- $data['order_cash'] = Dever::number($order['cash']);
- $data['order_yue'] = Dever::number($order['yue']);
- $data['order_num'] = $order['order_num'];
- $data['order_id'] = $order['id'];
- return $data;
- }
- # 无需支付
- private function no($order)
- {
- $param['pay_product_id'] = $order['id'];
- $param['pay_order_id'] = $order['order_num'];
- $param['pay_status'] = 2;
- $param['pay_cash'] = $order['price'];
- $param['pay_msg'] = '';
- $this->success($param);
- return array(
- 'order' => '',
- 'order_cash' => Dever::number($order['cash']),
- 'order_yue' => Dever::number($order['yue']),
- 'order_num' => $order['order_num'],
- 'order_id' => $order['id'],
- 'type' => 'test',
- );
- }
- # 支付成功回调 安全加密 设置token
- public function success_secure_api_token()
- {
- $project_id = Dever::input('pay_project_id');
- $info = Dever::db('pay/project')->one($project_id);
- if ($info) {
- return $info['key'];
- }
- return 'account_dever';
- }
- # 支付成功回调 安全加密
- public function success_secure_api($param = array())
- {
- $this->success($param);
- }
- # 支付成功回调
- public function success($param = array())
- {
- $send = $param ? $param : Dever::preInput('pay_');
- $product_id = $send['pay_product_id'];
- $order_id = $send['pay_order_id'];
- $status = $send['pay_status'];
- $cash = $send['pay_cash'];
- $msg = $send['pay_msg'];
- $order = Dever::db('account/pay')->one(array('id' => $product_id, 'clear' => true));
- if ($order && $order['status'] == 1) {
- $update = array();
- if ($status == 2) {
- $update['status'] = $status;
- $update['where_id'] = $order['id'];
- Dever::db('account/pay')->update($update);
- $desc = '支付充值';
- Dever::load('account/lib/info.up_commit', $order['uid'], $order['cash'], 'chongzhi', 'qianbao', $desc, 'account/pay', $order['id']);
- if (Dever::project('wechat_applet')) {
- //Dever::load('order/lib/applet')->add($order['id'], 2);
- }
-
- # 发消息
- if ($order['uid'] && $order['uid'] > 0) {
- $this->payNotice($order);
- }
- }
- }
- return 'ok';
- }
- public function payNotice($order)
- {
- if ($order['card_id'] > 0 && Dever::project('duihuan')) {
- Dever::load('duihuan/lib/give')->act($order['uid'], 1, $order['card_id'], $order['order_num']);
- }
- }
- }
|