sms = $sms;
}
//
/**
* 处理微信的请求消息
*
* @return string
*/
public function serve(Request $request)
{
// Log::info('request arrived.'); # 注意:Log 为 Laravel 组件,所以它记的日志去 Laravel 日志看,而不是 EasyWeChat 日志
$app = app('wechat.mini_program');
$app->server->push(function ($message) {
// $message = array (
// 'ToUserName' => 'gh_66ddebb44654',
// 'FromUserName' => 'oVEaG5KqLUpuz0CukddVMSq5as_o',
// 'CreateTime' => '1611050964',
// 'MsgType' => 'miniprogrampage',
// 'MsgId' => '23064700922189383',
// 'Title' => '获取服务号二维码',
// 'AppId' => 'wxc41491431733671e',
// 'PagePath' => 'pages/tabBar/home',
// 'ThumbUrl' => 'http://mmbiz.qpic.cn/mmbiz_jpg/o4p1tZHtvpAFBQhOjo96xRia72TpcJ7biaZCEiadbSlqjSfLAa65dTUbPYgdaORNfiaoDpbeHbicGseFp9UedT46AsQ/0',
// 'ThumbMediaId' => 'zTMcYIe19PQewxzLyNTnBOjgYmei-CMvTQi_4gtW43JmrKzfckh9wuZNt09-kznC',
// );
$this->recvMessage($message);
return "您好!欢迎使用福恋小程序";
});
// Log::info('response arrived.');
return $app->server->serve();
}
public function merchantWorkServer()
{
$config = config('wechat.work_merchant');
$app = Factory::openWork($config);
$server = $app->server;
$server->push(function ($message) {
switch ($message['InfoType']) {
//推送suite_ticket
case 'suite_ticket':
break;
//授权成功通知
case 'create_auth':
break;
//变更授权通知
case 'cancel_auth':
break;
//通讯录事件通知
case 'change_contact':
switch ($message['ChangeType']) {
case 'create_user':
return '新增成员事件';
break;
case 'update_user':
return '更新成员事件';
break;
case 'delete_user':
return '删除成员事件';
break;
case 'create_party':
return '新增部门事件';
break;
case 'update_party':
return '更新部门事件';
break;
case 'delete_party':
return '删除部门事件';
break;
case 'update_tag':
return '标签成员变更事件';
break;
}
break;
default:
return 'fail';
break;
}
});
$response = $server->serve();
$response->send();
}
public function merchantWorkLoveMPServer()
{
$config = config('wechat.work_merchant_love_mp');
$app = Factory::openWork($config);
$server = $app->server;
$server->push(function ($message) {
Log::info("企业微信");
Log::info($message);
switch ($message['InfoType']) {
//推送suite_ticket
case 'suite_ticket':
break;
//授权成功通知
case 'create_auth':
break;
//变更授权通知
case 'cancel_auth':
break;
//通讯录事件通知
case 'change_contact':
switch ($message['ChangeType']) {
case 'create_user':
return '新增成员事件';
break;
case 'update_user':
return '更新成员事件';
break;
case 'delete_user':
return '删除成员事件';
break;
case 'create_party':
return '新增部门事件';
break;
case 'update_party':
return '更新部门事件';
break;
case 'delete_party':
return '删除部门事件';
break;
case 'update_tag':
return '标签成员变更事件';
break;
}
break;
default:
return 'fail';
break;
}
});
$response = $server->serve();
$response->send();
}
public function merchantWorkLoveSaasServer()
{
$config = config('wechat.work_merchant_love_saas');
$app = Factory::openWork($config);
$server = $app->server;
$server->push(function ($message) {
Log::info("企业微信-福恋saas");
Log::info($message);
switch ($message['InfoType']) {
//推送suite_ticket
case 'suite_ticket':
break;
//授权成功通知
case 'create_auth':
break;
//变更授权通知
case 'cancel_auth':
break;
//通讯录事件通知
case 'change_contact':
switch ($message['ChangeType']) {
case 'create_user':
return '新增成员事件';
break;
case 'update_user':
return '更新成员事件';
break;
case 'delete_user':
return '删除成员事件';
break;
case 'create_party':
return '新增部门事件';
break;
case 'update_party':
return '更新部门事件';
break;
case 'delete_party':
return '删除部门事件';
break;
case 'update_tag':
return '标签成员变更事件';
break;
}
break;
default:
return 'fail';
break;
}
});
$response = $server->serve();
$response->send();
}
private function recvOfficialMessage($message)
{
switch ($message['MsgType']) {
case 'event':
return '收到事件消息';
break;
case 'text':
return '收到文字消息';
break;
case 'image':
return '收到图片消息';
break;
case 'voice':
return '收到语音消息';
break;
case 'video':
return '收到视频消息';
break;
case 'location':
return '收到坐标消息';
break;
case 'link':
return '收到链接消息';
break;
case 'file':
return '收到文件消息';
// ... 其它消息
default:
return '收到其它消息';
break;
}
}
private function recvMessage($message)
{
$fromUsername = $message['FromUserName'];
$content = '你好!欢迎来到福恋小程序。';
//接收消息
$msgType = $message['MsgType'];
if ($msgType == 'event') {//时间消息
if ($message['Event'] && $message['Event'] == 'user_enter_tempsession') {//进入会话2019年9月5日15:17:事件
$content = $this->getServerQuestion('MP');
$data = ['content' => $content];
$this->sendMessage($fromUsername, 'text', $data);
}
} elseif ($msgType == 'text' || $msgType == 'miniprogrampage') {//文本消息
//根据文本返回对应内容
$result = $this->getResponse($message);
if ($result && $result['type'] == 'TEXT') {
$data = ['content' => $result['content']];
} elseif ($result && $result['type'] == 'IMAGE') {
$data = ['media_id' => $result['content']];
}
$this->sendMessage($fromUsername, $result['type'], $data);
} elseif ($msgType == 'image') {//图片消息
}
return;
}
public function getResponse($message)
{
try {
if ($message['MsgType'] == 'text') {
$inpput_content = $message['Content'];
} else {
$inpput_content = $message['Title'];
}
$question = ServerQuestion::where("name", 'like', '%' . $inpput_content . '%')->orWhereHas('keywords', function ($sql) use ($inpput_content) {
$sql->where("name", 'like', '%' . $inpput_content . '%');
})->first();
if (empty($question)) {
$content = $this->getServerQuestion('MP');
return ['type' => 'TEXT', 'content' => $content];
}
$answer = $question->answer;
$content = "";
if ($answer && $answer->type == 'TEXT') {
$content = $this->getResponseText($answer);
} elseif ($answer && $answer->type == 'IMAGE') {
$content = $this->getResponseImage($answer);
}
if ($content)
return ['type' => $answer->type, 'content' => $content];
} catch (\Exception $e) {
$this->getError($e);
return false;
}
}
public function getResponseImage($answer)
{
try {
Image::configure(['driver' => 'gd']);
$pic = $answer->content;
$image = Image::make($pic);
$path = storage_path('qrcode/' . time() . 'server.png');
$image->save($path);
$content = $answer->content;
$app = \EasyWeChat::miniProgram();
// $path = app()->basePath('public/server_qrcode.jpg');
$result = $app->media->uploadImage($path);
$content = $result['media_id'];
if (file_exists($path)) {
unlink($path);
}
return $content;
} catch (\Exception $e) {
$this->getError($e);
return false;
}
}
public function getResponseText($answer)
{
try {
switch ($answer->path_type) {
case 'MP':
$content = '' . $answer->content . '';
break;
case 'OFFICIAL':
$content = '' . $answer->content . '';
break;
default:
$content = $answer->content;
break;
}
return $content;
} catch (\Exception $e) {
$this->getError($e);
return false;
}
}
public function getServerQuestion($type)
{
try {
$content = "你好,小恋暂时不在,请用手点击下方问题,可以获得答案,请用手点击问题!请用手点击问题!";
//换行
$n = "\r\n";
$questions = ServerQuestion::where('type', $type)->pluck('name')->toArray();
$i = 1;
foreach ($questions as $question) {
// $question = $i.' '."".$question."";
$question = $i . ' ' . $question . '';
$content = $content . $n . $question;
$i++;
}
return $content;
} catch (\Exception $e) {
$this->getError($e);
return false;
}
}
private function sendMessage($touser, $msgtype, $data)
{
// $app = \EasyWeChat::miniProgram();
// $token = $app->access_token->getToken();
// $access_token = $token['access_token'];
// $access_token = $this->get_accessToken();
$access_token = "";
$resp = Http::get("https://love.ufutx.com/go/api/mp/access_token?token=go_love");
if ($resp) {
if ($resp) {
$res = json_decode($resp, true);
$access_token = $res["data"]['access_token'];
}
}
if (empty($access_token)) {
return $this->failure("缺少access_token");
}
$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" . $access_token;
$data['touser'] = $touser;
$data['msgtype'] = $msgtype;
if (strtoupper($msgtype) == 'TEXT') {
$data['text'] = $data;
} elseif (strtoupper($msgtype) == 'IMAGE') {
$data['image'] = $data;
}
$result = Http::post($url, json_encode($data, JSON_UNESCAPED_UNICODE));
}
private function uploadMedia($img)
{
// $app = \EasyWeChat::miniProgram();
$path = app()->basePath($img);
// $image = exif_imagetype($path);
// $type = image_type_to_mime_type($image); // 获取文件类型
// $type = 'image/png';
// $token = $app->access_token->getToken();
// $access_token = $token['access_token'];
$access_token = "";
$resp = Http::get("https://love.ufutx.com/go/api/mp/access_token?token=go_love");
if ($resp) {
if ($resp) {
$res = json_decode($resp, true);
$access_token = $res["data"]['access_token'];
}
}
if (empty($access_token)) {
return $this->failure("缺少access_token");
}
$url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=" . $access_token . "&type=image";
// 启用 curl
$curl = curl_init();
if (class_exists('\CURLFile')) {
curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true);
$data = array('media' => new \CURLFile(realpath($path)));//>=5.5
} else {
if (defined('CURLOPT_SAFE_UPLOAD')) {
curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false);
}
$data = array('media' => '@' . realpath($path));//<=5.5
}
// 请求 URl
curl_setopt($curl, CURLOPT_URL, $url);
// 是否 post 提交 0否 1是
curl_setopt($curl, CURLOPT_POST, 1);
// 提交的数据
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
// 返回的内容作为变量储存,而不是直接输出。这个时候就必需设置curl的CURLOPT_RETURNTRANSFER选项为1或true。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 设置请求头
curl_setopt($curl, CURLOPT_USERAGENT, "TEST");
// 检查是否有错误
$error = curl_error($curl);
if ($error) {
// json 格式 转成数组
return json_decode($error, true);
} else {
// json 格式 转成数组
$result = curl_exec($curl); // 取出接口返回数据
return json_decode($result, true);
}
}
private function checkSignature($request)
{
$signature = $request->input('signature');
$timestamp = $request->input('timestamp');
$nonce = $request->input("nonce");
$token = "love";
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if ($tmpStr == $signature) {
return true;
} else {
return false;
}
}
public function otherWechatAuth(Request $request, $account)
{
// dd(request()->ip());
$account = strtolower($account);
$paas_wechat_user = session('wechat.oauth_user')[$account];
$paas_official_openid = $paas_wechat_user['id'];
Cache::put('paas_name', strtoupper($account), 10);
session(['paas_official_openid' => $paas_official_openid]);
$user_id = $request->input('user_id', 7776);
if (config('app.env') == 'local') {
return redirect('http://localhost:8080/#/information/' . $user_id . '?paas=' . strtoupper($account));
}
return redirect(env('APP_URL') . '/mobile/#/information/' . $user_id . '?paas=' . strtoupper($account));
}
public function wechatAuth(Request $request)
{
$wechat_user = session('wechat.oauth_user')['default'];
$openid = $wechat_user['id'];
//缓存openid
session(['official_openid' => $openid]);
$mobile = $request->input('mobile');
if ($mobile) {
$user = User::where('mobile', $mobile)->first();
if ($user && $user->wechat && empty($user->wechat->official_openid)) {
$user->wechat->official_openid = $openid;
$user->wechat->save();
}
}
if (config('app.env') == 'local') {
// dd($request->input('type'));
$redirect_url = 'http://localhost:8081/#/login';
return redirect($redirect_url);
}
if (config('app.env') == 'alpha') {
$host = 'http://alpha.ufutx.net';
} else {
$host = env('APP_URL') . '';
}
$redirect_url = $host . '/';
$type = $request->input('type');
$from_user_id = $request->input('from_user_id');
if ($type == 'arena') {
$arena_id = $request->input('id');
$redirect_url = $host . '/api/official/arenas/' . $arena_id . '?from_user_id=' . $from_user_id;
} elseif ($type == 'login') {
$wechat = Wechat::where('official_openid', $openid)->first();
if ($wechat && $wechat->user) {
$user = $wechat->user;
$token = $user->createToken($user->mobile)->accessToken;
}
$redirect_url = $host . '/mobile/#/login';
}
// return redirect($redirect_url);
return redirect($redirect_url);
}
/**
* 新年红包授权页面
*/
public function activityWechatAuth(Request $request)
{
$from_official_openid = $request->input('from_official_openid');
//微信授权用户信息 静默登录只能获取openid
$wechat_user = session('wechat.oauth_user')['new'];
$source = $request->has('source') ? $request->source : '';
$official_openid = $wechat_user['id'];
if ($source) {
Redis::setnx($official_openid . 'new_source', $source);
} else {
$source = Redis::get($official_openid . 'new_source');
}
//缓存openid
session(['official_openid' => $official_openid]);
session(['from_official_openid' => $from_official_openid]);
//活动页面url
$param = '?official_openid=' . $official_openid . '&from_official_openid=' . $from_official_openid;
if (config('app.env') == 'local') {
$redirect_url = 'http://localhost:8080/#/nineFruit' . $param . '&source=' . $source;
} else {
$redirect_url = env('APP_URL') . '/rp/#/nineFruit' . $param . '&source=' . $source;
}
//todo
//记录参与用户信息
$key = Participant::PART_KEY;
$key = $key . $official_openid;
// if (Cache::has($key)) {
// $participant = Cache::get($key);
// }else{
$participant = Participant::where('official_openid', $official_openid)->first();
if (empty($participant)) {
$participant = Participant::create([
'official_openid' => $official_openid,
'ip' => Ip::getip(),
]);
// }
Cache::forever($key, $participant);
}
//获取用户的最新信息
UpdateWechatUserInfo::dispatch($participant)->onQueue('love');
//重定向到活动页面
return redirect($redirect_url);
}
// 家的味道授权-静默授权
public function FamilyAuth(Request $request)
{
$wechatUser = session('wechat.oauth_user.new');
$openId = $wechatUser->getId();
Log::info($request->url);
$url = config('app.env') == 'production' ? env('APP_URL') . '/pu/#/' : 'http://alpha.ufutx.net/pu/#/';
$url = $request->url ? urldecode($request->url) : $url;
if ($url == "https://love.ufutx.com/pu/" || $url == "https://love.ufutx.cn/pu/") {
$url = config("app.url") . "/pu/#/";
}
Log::info($url);
$anchor_openid = $request->anchor_openid ?? '';
$from_openid = $request->from_openid ?? '';
$serve_tab = $request->serve_tab ?? '';
// 商户账户id
$merchant_id = $request->merchant_id ?? '';
//商户用户id
$account_id = $request->account_id ?? '';
// 是否自动支付
$auto_pay = $request->auto_pay ?? 0;
// 联盟id
$allinace_id = $request->alliance_id ?? '';
$evaluate_type = $request->evaluate_type ?? '';
// 渠道码id
$share_channel_id = $request->share_channel_id ?? '';
$auth_state = $request->auth_state ?? 0;
$qr_code_id = $request->qr_code_id;
$m_id = $request->m_id;
$video_id = 0;
$spread_merchant_id = $request->spread_merchant_id ?? '';
$vip_level_id = $request->vip_level_id ?? '';
if ((strpos($url, 'videos='))) {
$video_id = substr($url, strpos($url, 'videos=') + 7);
}
$q_type = $request->q_type;
$q_type_id = $request->q_type_id;
$url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1);
$url = $url . 'openid=' . $openId . "&from_openid=" . $from_openid . "&from_user_id=" . $request->from_user_id .
"&from_platform=" . $request->from_platform . '&anchor_openid=' . $anchor_openid . '&merchant_id=' . $merchant_id .
'&account_id=' . $account_id . '&auto_pay=' . $auto_pay . '&share_channel_id=' . $share_channel_id .
'&alliance_id=' . $allinace_id . '&serve_tab=' . $serve_tab . '&auth_state=' . $auth_state . '&qr_code_id=' . $qr_code_id .
'&evaluate_type=' . $evaluate_type . '&video_id=' . $video_id . '&actioveLabel=' . $request->actioveLabel . '&m_id=' . $m_id
. '&spread_merchant_id=' . $spread_merchant_id . '&vip_level_id=' . $vip_level_id . '&q_type=' . $q_type . '&q_type_id=' . $q_type_id;
// Log::info("跳转链接");
// Log::info($url);
$user = MerchantUsers::where('openid', $openId)->first();
if (!$user) {
$rand_str = $this->randString(8);
$user = new MerchantUsers();
$user->openid = $openId;
$user->rand_str = $rand_str;
$user->nickname = '用户' . $rand_str;
$user->save();
}
if ($request->merchant_id && $request->merchant_id >= 1) {
$record = AccessRecord::where('open_id', $openId)->where('account_id', $request->merchant_id)->first();
if ($record) {
$record->last_time = now();
$record->save();
} else {
$record = new AccessRecord();
$record->open_id = $openId;
$record->account_id = $request->merchant_id;
$record->last_time = now();
$record->recommender = $from_openid;
$record->save();
}
InviteMerchant::dispatch($request->merchant_id)->onQueue('love');
}
if (!empty($record)) {
Redis::zincrby('access_count' . $record->id, 1, $request->merchant_id);
}
if (empty($user->uuid)) {
//增加基表账号
AddUnionUser::dispatch($user, $password = null, 'SO')->onQueue('love');
}
return redirect($url);
}
public function inviteMerchantProcessOrderAuth(Request $request)
{
$wechatUser = session('wechat.oauth_user.new');
$openId = $wechatUser->getId();
$url = config('app.env') == 'production' ? env('APP_URL') . '/pu_m/#/' : 'http://sadmin.ufutx.net/pu_m/#/';
$url = $request->url ? urldecode($request->url) : $url;
// 商户账户id
$merchant_id = $request->merchant_id ?? '';
$order_id = $request->order_id;
$role_id = $request->role_id;
$url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1);
$url = $url . 'openid=' . $openId . '&merchant_id=' . $merchant_id . '&order_id=' . $order_id . '&role_id=' . $role_id;
return redirect($url);
}
public function groupOrderAuth(Request $request)
{
$wechatUser = session('wechat.oauth_user.new');
$openId = $wechatUser->getId();
$url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/';
$url = $request->url ? urldecode($request->url) : $url;
// 商户账户id
$merchant_id = $request->merchant_id ?? '';
$order_id = $request->order_id;
$id = $request->id;
$from_openid = $request->from_openid;
$history_id = $request->history_id;
$type = $request->type;
$url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1);
$url = $url . 'openid=' . $openId . '&merchant_id=' . $merchant_id . '&id=' . $id . '&order_id=' . $order_id .
'&history_id=' . $history_id . '&type=' . $type . '&from_openid=' . $from_openid;
return redirect($url);
}
public function activityMeetingAuth(Request $request)
{
$wechatUser = session('wechat.oauth_user.new');
$openId = $wechatUser->getId();
$url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/';
$url = $request->url ? urldecode($request->url) : $url;
// 商户账户id
$merchant_id = $request->merchant_id ?? '';
$id = $request->id;
$url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1);
$url = $url . 'openid=' . $openId . '&merchant_id=' . $merchant_id . '&id=' . $id;
return redirect($url);
}
// 非静默授权
public function NonSilenceAuth(Request $request)
{
$wechatUser = session('wechat.oauth_user.new');
$openId = $wechatUser->getId();
$moreInfo = $wechatUser->getOriginal();
$user = MerchantUsers::where('openid', $openId)->first();
if (!$user) {
$user = new MerchantUsers();
$user->openid = $openId;
$rand_str = $this->randString(8);
$user->nickname = !empty($moreInfo['nickname']) ? $moreInfo['nickname'] : '用户' . $rand_str;
$user->pic = !empty($moreInfo['headimgurl']) ? $moreInfo['headimgurl'] : 'https://images.ufutx.com/202007/01/e0de60525143427d4dd19515a5b387ba.png';
$user->sex = !empty($moreInfo['sex']) ? $moreInfo['sex'] : 0;
$user->city = !empty($moreInfo['city']) ? $moreInfo['city'] : '';
$user->province = !empty($moreInfo['province']) ? $moreInfo['province'] : '';
$user->unionid = !empty($moreInfo['unionid']) ? $moreInfo['unionid'] : '';
$user->save();
} else {
//如果没有绑定unionID
if (!empty($moreInfo['unionid']) && empty($user->unionid)) {
$user->unionid = $moreInfo['unionid'];
}
if (!empty($moreInfo['nickname'])) {
$user->nickname = $moreInfo['nickname'];
}
if (!empty($moreInfo['headimgurl']) && $moreInfo['headimgurl'] != $user->pic) {
$user->pic = $moreInfo['headimgurl'];
}
if (!empty($moreInfo['sex']) && $user->sex == 0) {
$user->sex = $moreInfo['sex'];
}
if (!empty($moreInfo['province']) && $user->province == '') {
$user->province = $moreInfo['province'];
}
if (!empty($moreInfo['city']) && $user->city == '') {
$user->city = $moreInfo['city'];
}
$user->save();
}
$url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/';
$url = $request->url ? urldecode($request->url) : $url;
$url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1);
$from_openid = $request->from_openid ?? '';
$merchant_id = $request->merchant_id ?? '';
$url = $url . 'openid=' . $openId . "&from_openid=" . $from_openid . "&from_platform=" . $request->from_platform . '&merchant_id=' . $merchant_id;
return redirect($url);
}
// 直播授权
public function LiveAuth(Request $request)
{
$live_id = $request->input('live_id', 0);
$from_id = $request->input('from_id', 0);
$url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/';
$url = $request->url ? urldecode($request->url) : $url;
$is_new = 0;
$wechatUser = session('wechat.oauth_user.new');
$moreInfo = $wechatUser->getOriginal();
$openId = $wechatUser->getId();
if (empty($openId)) {
return redirect(env('APP_URL') . '/h5/#/');
}
$viewer = Viewer::where('openid', $openId)->first();
if (empty($viewer)) {
$viewer = new Viewer();
$viewer->openid = $openId;
$rand_str = $this->randString(10);
$viewer->nickname = !empty($moreInfo['nickname']) ? $moreInfo['nickname'] : '用户' . $rand_str;
$viewer->avatar = !empty($moreInfo['headimgurl']) ? $moreInfo['headimgurl'] : 'https://images.ufutx.com/202007/01/e0de60525143427d4dd19515a5b387ba.png';
// 处理用户扫描带参二维码后,不点击公众号消息,点击菜单或者其他路径的情况
$redis_url = Redis::get($openId . 'url');
//注册页面
if ($redis_url) {
$from_id = substr($url, strripos($url, "from_id=") + 8, (strripos($url, "&live_id=") - strripos($url, "from_id=") - 8));
$live_id = substr($url, strripos($url, "live_id=") + 8);
$url = $redis_url;
}
if ($request->has('source') && $request->source) {
$viewer->source = $request->source;
} else {
if (str_contains($url, env('APP_URL') . '/h5/#/fLoveEnvoy')) {
$viewer->source = 'messenger';
}
if (str_contains($url, env('APP_URL') . '/h5/#/angelData')) {
$viewer->source = 'star';
}
}
$viewer->record_url = $url;
$viewer->viewer_id = !empty($from_id) ? $from_id : 0;
$viewer->live_id = !empty($live_id) ? $live_id : 0;
$viewer->sex = !empty($moreInfo['sex']) ? $moreInfo['sex'] : 0;
$viewer->unionid = !empty($moreInfo['unionid']) ? $moreInfo['unionid'] : '';
$viewer->save();
$is_new = 1;
//分享次数自增长
Viewer::where('id', $request->from_id)->increment('times');
//分享奖励
$this->newViewerShare($request, $viewer);
} else {
//如果没有绑定unionID
if (!empty($moreInfo['unionid']) && empty($viewer->unionid)) {
$viewer->unionid = $moreInfo['unionid'];
}
if (!empty($moreInfo['nickname']) && mb_substr($viewer->nickname, 0, 2) == '用户') {
$viewer->nickname = $moreInfo['nickname'];
}
if (!empty($moreInfo['headimgurl']) && $moreInfo['headimgurl'] != $viewer->avatar) {
$viewer->avatar = $moreInfo['headimgurl'];
}
if (!empty($moreInfo['sex']) && $viewer->sex == 0) {
$viewer->sex = $moreInfo['sex'];
}
$viewer->save();
if ($request->from_id) {
$this->oldViewerShare($request, $viewer);
}
}
if (!$request->from_user_id) {
$from_viewer = Viewer::where('id', $request->from_id)->first();
if ($from_viewer) {
if ($from_viewer->user_id) {
$request->from_user_id = $from_viewer->user_id;
}
}
}
if (empty($viewer->uuid)) {
AddUnionUser::dispatch($viewer, $password = $viewer->password, 'LO')->onQueue('love');
}
$url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1);
$redirect_url = $url . 'merchant_id=' . $request->merchant_id . '&openid=' . $openId . "&from_id=" . $from_id . "&from_openid=" . $request->from_openid . "&from_user_id=" . $request->from_user_id . "&from_platform=" . $request->from_platform . '&anchor_openid=' . $request->anchor_openid . '&auth_state=0';
if ($is_new && $request->activity) {
$redirect_url .= '&activity=1';
}
if ($request->signMarriageID) {
$redirect_url .= '&signMarriageID=' . $request->signMarriageID;
}
if ($request->is_audit) {
$redirect_url .= '&is_audit=' . $request->is_audit;
}
if ($request->merchant_id) {//商户id
$redirect_url .= '&merchant_id=' . $request->merchant_id;
}
if ($request->account_id) {//s端用户id
$redirect_url .= '&account_id=' . $request->account_id;
}
return redirect($redirect_url);
}
public function earningAuth(Request $request)
{
$url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/';
$redirect_url = $request->url ? urldecode($request->url) : $url;
Log::info($redirect_url);
return redirect($redirect_url);
}
// 非静默授权
public function newNonSilenceAuth(Request $request)
{
$code = $request->code;
$jump_url = $request->jump_url ?? 'my';
// $appid = 'wx36c72a00f1b2be64';
// $secret = '77f3fa72e17186ecc94ca3038a3ec467';
$appid = config('wechat.official_account.new.app_id');
$secret = config('wechat.official_account.new.secret');
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code";
$result = $this->http_request($url);
$merchant_id = urldecode($request->merchant_id);
$from_openid = urldecode($request->from_openid);
$alliance_id = urldecode($request->alliance_id);
$share_channel_id = urldecode($request->share_channel_id);
//Log::info("微信信息");
if ($result && isset($result['access_token'])) {
$account = MerchantUsers::where('openid', $result['openid'])->first();
if ($account) {
$url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $result['access_token'] . '&openid=' . $result['openid'];
$result = $this->http_request($url);
// session(['test1993'=>$result]);
$account->nickname = $result['nickname'] ?? $account->nickname;
$account->sex = $result['sex'] ?? $account->sex;
$account->city = $result['city'] ?? $account->city;
$account->province = $result['province'] ?? $account->province;
$account->pic = $result['headimgurl'] ?? $account->pic;
$unionid = $result['unionid'] ?? $account->unionid;
if ($unionid) {
$merchant_union_id = MerchantUser::where('unionid', $unionid)->value('unionid');
if (!$merchant_union_id) {
$account->unionid = $unionid;
}
}
$account->authorize_at = date('Y-m-d H:i:s');
$account->save();
}
}
$redirect_url = env('APP_URL') . '/pu/#/' . $jump_url . '?merchant_id=' . $merchant_id . '&from_openid=' . $from_openid . '&alliance_id=' . $alliance_id . '&share_channel_id=' . $share_channel_id;
return redirect($redirect_url);
}
//分享给新用户
public function newViewerShare($request, $viewer)
{
$from_id = $request->input('from_id', 0);
$live_id = $request->input('live_id', 0);
if ($request->from_id) {
$viewer_share = new ViewerShare();
$viewer_share->viewer_id = $viewer->id;
$viewer_share->sharer_id = $from_id;
$viewer_share->live_id = $live_id;
$viewer_share->type = 1;
$viewer_share->is_show = 1;
$viewer_share->save();
if ($request->has('task_id') && $request->task_id && $request->live_id) {
// //生成审批内容
// $viewer_share_audit = New ViewerShareAudit();
// $viewer_share_audit->viewer_id = $request->from_id;
// $viewer_share_audit->other_viewer_id = $viewer->id;
// $viewer_share_audit->task_id = $request->task_id ? : 0;
// $viewer_share_audit->save();
//完成任务
$task = Task::find($request->task_id);
if ($task && $task->the_rest > 0 && $task->num && $task->type == '直播推广') {
$list_data['from_id'] = $request->from_id;
$list_data['task_id'] = $request->task_id;
$list_data['source_id'] = $request->task_id;
$list_data['other_viewer_id'] = $viewer->id;
$list_data['type'] = 'share';
DoTask::dispatch($list_data)->onQueue('love');
$viewer->task_id = $request->task_id;
$viewer->save();
}
} else {
$param = [
'sharer_id' => $from_id,
'viewer_id' => $viewer->id,
];
MakeShareCash::dispatch($param)->onQueue('love');
}
//模板消息通知分享人
// $data['touser'] = Viewer::where('id', $request->from_id)->value('openid');
// $data['template_id'] = '_s-xlwx8Bj75Cf1UnSJE8HSBCZWFhGoQRdVDf84h3Rw';
// $data['url'] = env('APP_URL').'/ls/#/shareList';
//
// $data['data'] = [
// 'first' => '您好,有用户通过您的推荐进入平台!',
// 'keyword1' => $viewer->nickname,
// 'keyword2' => date('Y-m-d H:i:s'),
// 'reamrk' => '感谢您的使用',
// ];
// SendTemplateMsg::dispatch($data)->onQueue('love');
}
return true;
}
//分享给老用户
public function oldViewerShare($request, $viewer)
{
$live_id = $request->input('live_id', 0);
if ($viewer->id != $request->from_id) {
$is_shared = ViewerShare::where('viewer_id', $viewer->id)->where('sharer_id', $request->from_id)->where('live_id', $live_id)->count();
$is_first_shared = ViewerShare::where('viewer_id', $viewer->id)->where('sharer_id', $request->from_id)->count();
//老用户奖励
$this->makeOldShareCash($request->from_id, $viewer->id);
if ($request->from_id && empty($is_shared)) {
$viewer_share = new ViewerShare();
$viewer_share->viewer_id = $viewer->id;
$viewer_share->sharer_id = $request->from_id;
$viewer_share->type = 2;
$viewer_share->live_id = $request->live_id ?: 0;
//首次分享?
if ($is_first_shared == 0) {
$viewer_share->is_show = 1;
}
$viewer_share->save();
//绑定用户与分享人关系
// if($request->has('live_id') && $request->live_id && $request->from_id != $viewer->id){
// $live_id = $request->live_id;
// Redis::zincrby($live_id.'_share_rank', 1 ,$request->from_id);
// }
//分享次数自增长
Viewer::where('id', $request->from_id)->increment('times');
if ($request->has('live_id') && $request->live_id) {
$live_id = $request->live_id;
Redis::zincrby($live_id . '_share_rank', 1, $request->from_id);
}
}
// //分享奖励
// if($request->from_id){
// $old_reward = Viewer::where('id', $request->from_id)->value('old_reward');
// Asset::where('viewer_id', $request->from_id)->increment('cash', $old_reward);
// }
}
return true;
}
public function checkBlockCash($share_id)
{
try {
//判断分享者是否是福恋使者
$messenger = Messenger::where('viewer_id', $share_id)->where('is_audit', 1)->first();
if (empty($messenger) || empty($messenger->share_viewer_id)) {
return;
}
//成为福恋使者时间
$check_date = $messenger->check_date;
//成为福恋使者后邀请人数
$count = ViewerShare::where('sharer_id', $share_id)->where('created_at', '>', $check_date)->where('type', 1)->count();
if ($count >= 10) {//十个用户解冻福恋使者分享者金额
//福恋使者分享者
$share_viewer_id = $messenger->share_viewer_id;
//解冻记录
$asset_log = AssetLog::where('viewer_id', $share_viewer_id)->where('type', 4)->where('log_id', $share_id)->where('is_hooked', 0)->first();
if (empty($asset_log)) {
return;
}
\DB::beginTransaction();
//解冻金额
$num = $asset_log->num;
$asset = Asset::where('viewer_id', $share_viewer_id)->first();
$asset->increment('share_cash', $num);
$asset->decrement('blocked_cash', $num);
if ($asset->blocked_cash < 0) {
throw new \Exception("解冻金额溢出", 1);
}
//更新解冻记录
$asset_log->update([
'real_num' => $asset_log->num,
'is_hooked' => 1,
'score' => bcadd($asset->share_cash, $asset->cash, 2),
]);
\DB::commit();
return;
}
} catch (\Exception $e) {
\DB::rollback();
\Log::error($e->getMessage());
return;
}
}
/**
* 收益规则
* 第一次分享给老用户收益0.01
*/
public function makeOldShareCash($from_id, $viewer_id)
{
if (empty($from_id)) {
return;
}
$param = [
'sharer_id' => $from_id,
'viewer_id' => $viewer_id
];
//是否已经有分享记录
$h = ViewerShare::where($param)->exists();
if ($h) {
return;
}
//产生收益
MakeOldShareCash::dispatch($param)->onQueue('love');
}
public function getUrlqrcode($url, $size = 100)
{
$name = substr($url, stripos($url, '='));
$path = "../storage/qrcode/$name.png";
QrCode::format('png')->margin(1)->size($size)->generate($url, $path);
$pic = $this->uploadFile($path);
unlink($path);
return $pic;
}
//创建token
public function api_token($account)
{
$token = MerchantUsers::where('id', $account->id)->value('api_token');
if ($token) {
$result = decrypt($token);
$time = explode('-', $result)[2];
if (time() - $time > 604800) {
$token = encrypt($account->id . '-' . $account->mobile . '-' . time() . '-' . $account->email);
MerchantUsers::where('id', $account->id)->update(['api_token' => $token]);
}
} else {
$token = encrypt($account->id . '-' . $account->mobile . '-' . time() . '-' . $account->email);
MerchantUsers::where('id', $account->id)->update(['api_token' => $token]);
}
return $token;
}
//HTTP请求(支持HTTP/HTTPS,支持GET/POST)
private function http_request($url, $data = null)
{
try {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)) {
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$output = curl_exec($curl);
curl_close($curl);
return json_decode($output, true);
} catch (\Exception $e) {
// HandleLogs::error('HTTP请求 异常','微信内容安全',$e);
return '';
}
}
//登录静默授权
public function loginAuth(Request $request)
{
$wechatUser = session('wechat.oauth_user.new');
$openId = $wechatUser->getId();
//dd(env('APP_URL'));
$merchat_account = MerchantAccount::where('openid', $openId)->first();
if ($merchat_account) {
//增加基表账号
if (empty($merchat_account->uuid)) {
AddUnionUser::dispatch($merchat_account, $password = null, 'SOA')->onQueue('love');
}
$url = env('APP_URL') . '/pu_m/#/loginByWeixin?openid=' . $openId;
return redirect($url);
} else {
$url = env('APP_URL') . '/pu_m/#/login?openid=' . $openId;
//$url = 'http://192.168.31.230:8080'.'/#/login';
return redirect($url);
}
}
//微信静默授权
public function blessingUserSilenceAuth(Request $request)
{
$wechatUser = session('wechat.oauth_user.new');
$openId = $wechatUser->getId();
$url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/';
$url = $request->url ? urldecode($request->url) : $url;
$url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1);
//$url = 'https://love.ufutx.com/h5/#/discover/blessingHome?';
$url = $url . 'openid=' . $openId;
$bless_user = BlessingUsers::where('openid', $openId)->first();
if ($bless_user) {
return redirect($url);
}
$bless_user = new BlessingUsers();
$bless_user->openid = $openId;
$bless_user->save();
return redirect($url);
}
public function blessingUserNonSilenceAuth(Request $request)
{
$code = $request->code;
$jump_url = $request->jump_url ?: 'my';
$appid = 'wx36c72a00f1b2be64';
$secret = '77f3fa72e17186ecc94ca3038a3ec467';
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code";
$result = $this->http_request($url);
$alliance_id = urldecode($request->alliance_id);
$openId = '';
if ($result && isset($result['access_token'])) {
$openId = $result['openid'];
$url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $result['access_token'] . '&openid=' . $result['openid'];
$result = $this->http_request($url);
$merchant_user = MerchantUsers::where('openid', $openId)->first();
if ($merchant_user) {
$merchant_user->unionid = $result['unionid'] ?? null;
$merchant_user->nickname = $result['nickname'] ?? null;
$merchant_user->pic = $result['headimgurl'] ?? null;
$merchant_user->authorize_at = date('Y-m-d H:i:s');
$merchant_user->save();
} else {
$rand_str = $this->randString(8);
$merchant_user = new MerchantUsers();
$merchant_user->openid = $openId;
$merchant_user->unionid = $result['unionid'] ?? null;
$merchant_user->nickname = $result['nickname'] ?? null;
$merchant_user->pic = $result['headimgurl'] ?? null;
$merchant_user->rand_str = $rand_str;
$merchant_user->authorize_at = date('Y-m-d H:i:s');
$merchant_user->save();
}
}
$redirect_url = env('APP_URL') . '/al_m/#/' . $jump_url . '?alliance_id=' . $alliance_id . '&openid=' . $openId . '&authorize_at=' . $merchant_user->authorize_at;
return redirect($redirect_url);
}
//静默授权
public function silenceAuth(Request $request)
{
$wechatUser = session('wechat.oauth_user.new');
$openId = $wechatUser->getId();
$url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/';
$url = $request->url ? urldecode($request->url) : $url;
$alliance_id = $request->alliance_id ?? '';
$from_openid = $request->from_openid ?? '';
$url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1);
$url = $url . 'openid=' . $openId . "&alliance_id=" . $alliance_id . "&from_openid=" . $request->from_openid;
$user = MerchantUsers::where('openid', $openId)->first();
if (!$user) {
$rand_str = $this->randString(8);
$user = new MerchantUsers();
$user->openid = $openId;
$user->rand_str = $rand_str;
$user->nickname = '用户' . $rand_str;
$user->save();
}
if (empty($user->uuid)) {
//增加基表账号
AddUnionUser::dispatch($user, $password = null, 'SO')->onQueue('love');
}
return redirect($url);
}
/**
* 绑定商户分享渠道(微信授权)
*/
public function bindMerchantShareChannel($share_channel_id)
{
try {
$url = env('APP_URL') . '/pu/#/channelFailure?err_msg=该绑定渠道已关闭绑定';
return redirect($url);
$wechatUser = session('wechat.oauth_user.new');
if (empty($wechatUser)) {
// throw new \Exception('微信授权失败');
$url = request()->getUri();
return redirect($url);
}
$openid = $wechatUser->getId();
//渠道信息
$channel = MerchantShareChannel::find($share_channel_id);
if (empty($channel)) {
$err_msg = '渠道信息已被删除';
$url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg;
return redirect($url);
}
//跳转前端url
$url = env('APP_URL') . '/pu/#/channelsShare?share_channel_id=' . $share_channel_id . '&merchant_id=' . $channel->m_id;
if ($channel->bind_m_id)
return redirect($url);
//根据openid获取商户信息
$merchant = \App\Models\Server\MerchantAccount::where('openid', $openid)->first();
$owner_merchant = \App\Models\Server\MerchantAccount::with('anchor')->where('id', $channel->m_id)->first();
if (empty($owner_merchant) || empty($owner_merchant->anchorV2)) {
$err_msg = '渠道拥有者信息不存在';
$url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg . '&merchant_id=' . $channel->m_id;
return redirect($url);
}
if ($merchant && $merchant->mobile) {//存在商户信息并且手机号
//绑定商户
$channel->bind_m_id = $merchant->id;
$channel->save();
//短信通知 todo
$url = env('APP_URL') . '/pu/#/channelsShare?share_channel_id=' . $share_channel_id . '&merchant_id=' . $channel->m_id . '&openid=' . $openid;
$short_url = \CommonUtilsService::shortUrl($url);
$message = '恭喜你成为商家' . $owner_merchant->anchorV2->name . '的渠道分享人,赶紧点击' . $short_url['url'] . ' 查看你的渠道分享码吧!';
SendEasySms::dispatch(['mobile' => $merchant->mobile, 'message' => $message])->onQueue('love');
} else {
//跳转前端url
$url = env('APP_URL') . '/pu/#/bindingChannels?share_channel_id=' . $share_channel_id . '&merchant_id=' . $channel->m_id . '&openid=' . $openid;
}
return redirect($url);
} catch (\Exception $e) {
$this->getError($e);
$err_msg = '服务器休息,请稍后再试';
$url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg . '&merchant_id=' . $channel->m_id;
return redirect($url);
}
}
/**
* 绑定商户分享渠道(用户微信授权)
*/
public function bindMerchantShareChannelV2($share_channel_id)
{
try {
//微信授权信息
$wechatUser = session('wechat.oauth_user.new');
if (empty($wechatUser)) {
$url = request()->getUri();
return redirect($url);
}
$openid = $wechatUser->getId();
//渠道信息
$channel = MerchantShareChannel::find($share_channel_id);
if (empty($channel)) {
$err_msg = '渠道信息已被删除';
$url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg . '&merchant_id=5';
return redirect($url);
}
//跳转前端url
$url = env('APP_URL') . '/pu/#/channelsShare?share_channel_id=' . $share_channel_id . '&merchant_id=' . $channel->m_id;
//渠道已被绑定
if ($channel->bind_m_user_id) {
$user = MerchantUser::where('openid', $openid)->first();
if ($user && $user->id == $channel->bind_m_user_id)
return redirect($url);
$err_msg = '该渠道已被其他用户绑定';
$url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg . '&merchant_id=' . $channel->m_id;
return redirect($url);
}
//根据openid获取用户信息
$user = MerchantUser::firstOrCreate(['openid' => $openid]);
if (empty($user->nickname)) {
$rand_str = $this->randString(8);
$user->rand_str = $rand_str;
$user->pic = User::DefaultAvatar;
$user->nickname = '用户' . $rand_str;
$user->save();
}
//判断渠道拥有者是否存在
$owner_merchant = \App\Models\Server\MerchantAccount::with('anchor')->where('id', $channel->m_id)->first();
if (empty($owner_merchant) || empty($owner_merchant->anchorV2)) {
$err_msg = '渠道拥有者信息不存在';
$url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg . '&merchant_id=' . $channel->m_id;
return redirect($url);
}
//跳转前端绑定url
$url = env('APP_URL') . '/pu/#/bindingChannels?share_channel_id=' . $share_channel_id . '&merchant_id=' . $channel->m_id . '&openid=' . $openid;
return redirect($url);
} catch (\Exception $e) {
$this->getError($e);
$err_msg = '服务器休息,请稍后再试';
$url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg . '&merchant_id=' . $channel->m_id;
return redirect($url);
}
}
//微信授权 商家绑定微信提现账号
public function NonSilenceAuthBindWechatTransfer(Request $request)
{
$code = $request->code;
$jump_url = 'bindWeChatPage';
$appid = config('wechat.official_account.new.app_id');
$secret = config('wechat.official_account.new.secret');
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code";
$result = $this->http_request($url);
\Log::info('商家id:' . $request->merchant_id . ' result:' . json_encode($result));
$merchant_id = $request->merchant_id;
$m_user_id = $request->merchant_user_id ?? 0;
$redirect_url = env('APP_URL') . '/h5/#/' . $jump_url . '?merchant_id=' . $merchant_id . '&auth_state=1';
if ($result && isset($result['access_token'])) {
$url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $result['access_token'] . '&openid=' . $result['openid'];
$result = $this->http_request($url);
$transfer = MEarningTransfers::where('m_id', $merchant_id)->where('m_user_id', 0)
->where('way', 'weixin')
->where('account', $result['openid'])
->first();
if ($transfer) {
$transfer->nick_name = $result['nickname'];
$transfer->name = $result['nickname'];
$transfer->pic = $result['headimgurl'];
$transfer->save();
return redirect($redirect_url);
}
$transfer = new MEarningTransfers();
$transfer->m_id = $merchant_id;
$transfer->m_user_id = 0;
$transfer->way = 'weixin';
$transfer->account = $result['openid'];
$transfer->name = $result['nickname'];
$transfer->nick_name = $result['nickname'];
$transfer->pic = $result['headimgurl'] ?? User::DefaultAvatar;
$transfer->save();
}
return redirect($redirect_url);
}
//微信授权 saas用户绑定微信提现账号
public function NonSilenceAuthBindWechatTransferSaasUser(Request $request)
{
$code = $request->code;
$jump_url = 'IncomeWithdrawal';
$appid = config('wechat.official_account.new.app_id');
$secret = config('wechat.official_account.new.secret');
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code";
$result = $this->http_request($url);
$merchant_id = $request->merchant_id;//商户id
$m_user_id = $request->account_id;//用户id
$redirect_url = env('APP_URL') . '/pu/#/' . $jump_url . '?merchant_id=' . $merchant_id . '&auth_state=1';
if ($result && isset($result['access_token'])) {
$url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $result['access_token'] . '&openid=' . $result['openid'];
$result = $this->http_request($url);
$transfer = MEarningTransfers::where('m_id', $merchant_id)->where('m_user_id', $m_user_id)
->where('way', 'weixin')
->where('account', $result['openid'])
->first();
if ($transfer) {
$transfer->nick_name = $result['nickname'];
$transfer->name = $result['nickname'];
$transfer->pic = $result['headimgurl'];
$transfer->updated_at = date('Y-m-d H:i:s');
$transfer->save();
return redirect($redirect_url);
}
$transfer = new MEarningTransfers();
$transfer->m_id = $merchant_id;
$transfer->m_user_id = $m_user_id;
$transfer->way = 'weixin';
$transfer->account = $result['openid'];
$transfer->name = $result['nickname'];
$transfer->nick_name = $result['nickname'];
$transfer->pic = $result['headimgurl'] ?? User::DefaultAvatar;
$transfer->save();
}
return redirect($redirect_url);
}
//微信授权 h5用户绑定微信提现账号
public function NonSilenceAuthBindWechatTransferH5User(Request $request)
{
$code = $request->code;
$jump_url = 'accountPage';
$appid = config('wechat.official_account.new.app_id');
$secret = config('wechat.official_account.new.secret');
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code";
$result = $this->http_request($url);
$merchant_id = $request->merchant_id ?? 1;//商户id
$m_user_id = $request->account_id;//用户id
$redirect_url = env('APP_URL') . '/h5/#/' . $jump_url . '?merchant_id=' . $merchant_id . '&auth_state=1';
if ($result && isset($result['access_token'])) {
$url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $result['access_token'] . '&openid=' . $result['openid'];
$result = $this->http_request($url);
$transfer = MEarningTransfers::where('m_id', $merchant_id)->where('m_user_id', $m_user_id)
->where('way', 'weixin')
->where('account', $result['openid'])
->first();
if ($transfer) {
$transfer->nick_name = $result['nickname'];
$transfer->name = $result['nickname'];
$transfer->pic = $result['headimgurl'];
$transfer->updated_at = date('Y-m-d H:i:s');
$transfer->save();
return redirect($redirect_url);
}
$transfer = new MEarningTransfers();
$transfer->m_id = $merchant_id;
$transfer->m_user_id = $m_user_id;
$transfer->way = 'weixin';
$transfer->account = $result['openid'];
$transfer->name = $result['nickname'];
$transfer->nick_name = $result['nickname'];
$transfer->pic = $result['headimgurl'] ?? User::DefaultAvatar;
$transfer->save();
}
return redirect($redirect_url);
}
public function bindNoticeOpenid(Request $request, $merchant_id, $admin_id)
{
try {
$wechatUser = session('wechat.oauth_user.new');
if (empty($wechatUser))
throw new \Exception('获取微信信息失败');
$openid = $wechatUser->getId();
if ($admin_id) {
MerchantMembers::where('mch_id', $merchant_id)->where('admin_id', $admin_id)->update(['notice_openid' => $openid]);
} else {
MerchantAccount::where('id', $merchant_id)->update(['notice_openid' => $openid]);
}
} catch (\Exception $e) {
$this->getError($e);
}
$url = config('app.url') . '/pu/#/adminBinding?merchant_id=' . $merchant_id;
return redirect($url);
}
public function surveyAuth(Request $request)
{
$wechatUser = session('wechat.oauth_user.new');
$url = $request->input('url');
return redirect($url);
}
public function tempAuth(Request $request)
{
$wechatUser = session('wechat.oauth_user.new');
$url = "https://health.ufutx.com/api/temp/oa/second/code?first_openid=" . $wechatUser->getId();
return redirect($url);
}
public function workServe(Request $request)
{
$config = config("wechat.work_program_merchant");
$app = Factory::work($config);
$app->server->push(function ($message) use ($app) {
Log::info($message);
if ($message["MsgType"] == "text") {
SendWorkProgramMessage::dispatch($message)->onQueue("love_gpt");
return "";
}
return "暂时只支持文本内容";
});
$response = $app->server->serve();
$res = $response->send();
}
}