openid(['key' => $account], $env, $order['uid']); if (isset($result['link'])) { return $result; } $account = $this->getInfo(['key' => 'pay_' . $account]); if (!$account) { Dever::error('支付账户配置错误'); } $cert = Dever::db('place/account_cert')->find(['account_id' => $account['id'], 'platform_cert_id' => 2]); if (!$cert || ($cert && $cert['edate'] <= time())) { Dever::load(\Api\Lib\Account::class)->run($account, 'task', [], 1, 'run', 'place'); } $param = []; $param['order_num'] = $order['order_num']; $param['openid'] = $result['openid']; $param['name'] = $order['name']; $param['notify'] = $order['notify']; $param['cash'] = $order['pay_money_cash']*100; $param['time_expire'] = time() + 4000; return Dever::load(\Api\Lib\Account::class)->run($account, 'order', $param, $env, 'run', 'place'); } # 退款操作 public function refund($order, $pay_cash, $refund_order_num, $sector_id, $place_id, $type) { $account = $order['env_platform']; $env = $order['env_type']; $account = $this->getInfo(['key' => 'pay_' . $account]); if (!$account) { Dever::error('支付账户配置错误'); } $param['order_num'] = $order['order_num']; $param['refund_order_num'] = $refund_order_num; $param['total'] = $order['pay_money_cash']*100; $param['cash'] = $pay_cash*100; $param['notify'] = 'Porder/Lib/Notify.refund|' . $sector_id . '|' . $place_id . '|' . $type . '|' . $refund_order_num; return Dever::load(\Api\Lib\Account::class)->run($account, 'refund', $param, 1, 'run', 'place'); } # 微信小程序发货操作 public function delivery($order, $detail, $data, $mode = 1, $delivered = true) { if ($order['env_platform'] == 'weixin' && $order['env_type'] == 5) { $token = Dever::load(\Api\Lib\Util::class)->token($order['env_platform'], $order['env_type'], 'place'); if (!$token) { Dever::error('无法发货'); } # 虚拟商品 $method = 3; if ($data && isset($order['method'])) { if ($order['method'] == 3) { # 自提 $method = 4; } elseif ($detail['source_type'] == 1) { # 快递 $method = 1; } } $goods = $detail['name']; $delivery = []; if ($method == 1) { $address = Dever::db('puser/address')->find($order['address_id']); $contact = ''; if ($address) { $contact = ['receiver_contact' => \Dever\Helper\Str::hide($address['phone'])]; } foreach ($data as $v) { $content = explode(',', $v['content']); $code = $v['code']; foreach ($content as $v1) { $delivery[] = [ 'tracking_no' => $v1, 'express_company' => $code, 'item_desc' => $goods, 'contact' => $contact, ]; } } } else { $delivery[] = [ 'item_desc' => $goods, ]; } $result = $this->openid(['key' => $order['env_platform']], $order['env_type'], $order['uid']); if (!$result['openid']) { return; } $account = $this->getInfo(['key' => $order['env_platform']]); if (!$account) { Dever::error('账户配置错误'); } $param = []; $param['access_token'] = $token; $param['order_num'] = $order['order_num']; $param['logistics_type'] = $method; $param['delivery'] = $delivery; $param['mode'] = $mode; $param['delivered'] = $delivered; $param['time'] = time(); $param['openid'] = $result['openid']; return Dever::load(\Api\Lib\Account::class)->run($account, 'delivery', $param, 1, 'run', 'place'); } } # 获取openid public function openid($account, $env, $uid, $result = []) { $account = $this->getInfo($account); return Dever::load(\Api\Lib\Util::class)->openid($account, $env, $uid, $result, 'place'); } # 获取小程序码 # version = develop/release/trial public function getAppletCode($account, $env, $scene, $page, $version = 'develop') { $token = Dever::load(\Api\Lib\Util::class)->token($account, $env, 'place'); if ($token) { $param['access_token'] = $token; $param['scene'] = $scene; $param['page'] = $page; $param['env_version'] = $version; $data = Dever::load(\Api\Lib\Account::class)->run($account, 'applet_code', $param, 1, 'run', 'place'); return $data; } } # 获取账户信息 public function getInfo($where) { $info = Dever::db('place/account')->find($where); if ($info) { $account = Dever::db('api/account')->find(['key' => $info['key']]); $info['app_id'] = $account['app_id']; $info['platform_id'] = $account['platform_id']; $info['desc'] = $account['desc']; return $info; } } }